MySQL Fulltext Search
Poster: theoWat is het en waarvoor kan ik het gebruiken?
Als je een beetje goede zoekmachine wilt bouwen voor op je site kom je niet erg ver met de like functie id MySQL ook rijk is. Hiervoor is een aparte functie ontwikkeld die speciaal is voor het zoeken in de database wat bij uitstek geschrikt is voor zoekmachines.
De eisen aan de tabel:
Het is
noodzakelijk om een tabel aan te maken in MySQL met FULLTEXT aan bij 1 of meerdere kolommen. Daarbij moet die kolom waarbij je nu de FULLTEXT aan hebt staan een CHAR, VARCHAR of een TEXT kolom zijn.
Aan de slag!
Nu je weet wat het is en wat het kan is het tijd om even wat te gaan proberen en kijken hoe het werkt.
In de praktijk
Voor de voorbeelden gebruiken wij de volgende tabel:
code:1
2
3
4
5
6
7
CREATE TABLE `artikelen` (
`id` INT( 11 ) DEFAULT '0' NOT NULL ,
`titel` VARCHAR( 50 ) NOT NULL ,
`content` TEXT NOT NULL ,
UNIQUE (`id`),
FULLTEXT (`titel` , `content`)
Met de volgende inhoud:
code:1
2
3
4
5
6
INSERT INTO artikelen VALUES (0, 'MySQL Tutorial ', 'DB staat voor database...');
INSERT INTO artikelen VALUES (1, 'Hoe gebruik je MySQL efficient?', 'Nadat je de volgende stappen....');
INSERT INTO artikelen VALUES (2, 'MySQL optimaliseren', 'In deze tutorial laten we je zien...');
INSERT INTO artikelen VALUES (3, '1001 MySQL tips ', '1. Start mysql nooit als root...');
INSERT INTO artikelen VALUES (4, 'MySQL vs PostgreSQL', 'In de volgende database vergelijking...');
In de query van de zoekfunctie gebruiken we als eerst een WHERE element met daarbij nog 2 elementen. Deze 2 elementen zijn against() en match().
Met match() geeft je aan in welke kolommen hij moet gaan zoeken(natuurlijk wel die kolommen waarbij je de FULLTEXT hebt aangezet).
Met Against() geef je de zoekterm mee, dit plaats je tussen de haakjes. Hierbij kun je ook verschillende operatoren gebruiken. Deze staan onder aan de pagina vermeld.
Er bestaat in de Against functie ook nog de zogenaamde BOOLEAN zoekopdracht hiermee kun je selecteren wat je er absuluut wel of niet in wilt hebben. (LET OP, dit werkt alleen met versies hoger dan
4.0.1)
voorbeeld:
code:1
2
3
4
5
6
7
<?php
*/Simpel gebruik van match(), zoek naar ‘database’ in titel en content, gesorteerd op relevatie./*
SELECT * FROM artikelen WHERE MATCH (titel,content) AGAINST ('database')
*/Zoeken naar Mysql, maar root mag niet voorkomen. (Een voorbeel van IN BOOLEAN MODE)*/
SELECT id, content FROM artikelen WHERE MATCH (titel,content) AGAINST ('+MySQL -root' IN BOOLEAN MODE)
?>
Operatoren:
+ Het woord / de woorden gemarkeerd met + moeten voorkomen in het resultaat.
- Het woord / de woorden gemarkeerd met – mogen absoluut niet voorkomen in het resultaat.
< Maakt een woord minder belangrijk voor de score.
> Maakt een woord belangrijker voor de score.
( ) Deze dienen geplaatst te worden om een groep woorden, zodat je maar één operator hoeft te gebruiken. (bv. +(‘mysql root’))
~ De resultaten waarbij woorden gevonden gemarkeerd met een ~ worden veel lager geplaatst. (Lagere relevantie)
* Wildchard
“ Een groep woorden die omgeven wordt door “ ”, wordt in zijn geheel gezocht.
| Rate dit script: |
Je hebt nog niet gestemd. Rate hier het artikelen:
|  |
| Reacties: |
| Er is 1 reactie geplaatst.
|
| ppaattyy 31-01-2005 10:56 |
lol, ik hoop dat het goed blijf werken want bij mij deed hij het na een tijdje nie meer  |