Tutorials

MySQL Fulltext Search

Altijd al een eigen zoekmachine willen maken? Hiermee kan het !

Pagina 1

Inleiding

MySQL Fulltext Search

Wat moet je kunnen?
Basis van MySQL

Wat is Fulltext Search eigenlijk?
Fulltext search is een functie van mysql om te zoeken in je database. De gevonden resultaten worden gesorteerd op relevantie van de gevonden resultaten. Dit kan je dus gemakkelijk gebruiken voor een zoekmachine oid.

Wat je nodig hebt is een MyISAM tabel met een FULLTEXT index op één of meer velden. Een fulltext search kan plaatsvinden in een CHAR, VARCHAR of een TEXT kolom.

(Als je grote hoeveelheden data in een tabel wil zetten, dan kan je beter eerst de data in de tabel zetten en daarna de FULLTEXT index aanmaken (ALTER TABLE). Dit gaat sneller. Heb je geen grote tabel, of hij is leeg, dan kan je gewoon een tabel direct maken met FULLTEXT index.)
Pagina 2

Voorbeelden

Voorbeelden:

Simpel gebruik van match(), zoek naar 'database' in titel en content, gesorteerd op relevatie.
-> SELECT * FROM artikelen WHERE MATCH (titel,content) AGAINST ('database')


ID -> Titel -> Content
0 -> MySQL Tutorial -> DB staat voor database...
4 -> MySQL vs PostgreSQL -> In de volgende database vergelijking...


Twee maal match() gebruiken, een om de 'score' (relevantie) te bepalen, en de andere voor het zoeken.
-> SELECT id, content, MATCH (titel,content) AGAINST ('MySQL geinstalleerd, start als root.') AS score FROM artikelen WHERE MATCH (titel,content) AGAINST('MySQL geinstalleerd, start als root.')


ID -> Content -> Score
3 -> 1. Start mysql nooit als root... -> 2.6992766789014
4 -> Als je mysql goed hebt geinstalleerd.. -> 1.3366307144826


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)


ID -> Titel -> Content
1 -> Hoe gebruik je MySQL efficient? -> Nadat je de volgende stappen....
2 -> MySQL optimaliseren -> In deze tutorial laten we je zien
0 -> MySQL Tutorial -> DB staat voor database...
4 -> MySQL vs PostgreSQL -> In de volgende database verg..
5 -> MySQL beveiliging -> Als je mysql goed hebt geinstall..
3 -> 1001 MySQL tips1 -> Start mysql nooit als root...


Letop: Als het zoekterm in meer dan 50% van de resultaten voorkomt, dan is het resultaat 0 rows, je moet dan specifieker zoeken.

Ik hoop jullie hierbij voldoende te hebben verteld over de MySQL Fulltext Search functie, voor vragen en / of opmerkingen: [email protected]

Jasper Jochem
Pagina 3

In de praktijk

Voor dit artikel maak ik gebruik van de volgende tabel:

<?
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:

<?
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...');
INSERT INTO artikelen VALUES (5, 'MySQL beveiliging', 'Als je mysql goed hebt geinstalleerd...');
?>

We werken eigenlijk met één functie (against() hoort erbij) namelijk match(). Je gebruikt match() altijd in combinatie met against().

* Match(veld1, veld2 etc) - Geeft aan in welke velden gezocht moet worden. (meerdere velden gescheiden door komma's)
* Against(zoekterm) - De term waarnaar gezocht moet worden in de velden.

Je kan ook nog een BOOLEAN zoekopdracht uitvoeren, dat wil zeggen een zoekterm met + - etc. (Dit werkt alleen in MySQL versies 4.0.1 of hoger!)

Against('+zoekterm1 -zoekterm2', IN BOOLEAN MODE)

Operatoren zijn:

+ 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.

Voorbeelden operatoren:

ZoektermResultaat
Appel banaan Bevat een van deze woorden
+appel -banaan Appel, maar banaan komt er niet in voor.
+appel peer Appel, maar word hoger in de resultaten gezet als ook peer erin voorkomt.
+appel +(>peer <banaan)Appel en peer of banaan, maar appel + peer word hoger in de resultaten gezet dan appel + banaan.
+appel *Appel, Appelflap etc.
"grote huis" Wel: "het grote huis", Niet: "het grote mooie huis"

Reacties

0
Nog geen reacties.