Fulltext Index in MySQL

  1. Inleiding
  2. Zoeken in een MySQL database
  3. Werking van de FULLTEXT index
  4. Relevantie bij een FULLTEXT zoekopdracht.
  5. Boolean FULLTEXT zoekopdrachten
  6. FULLTEXT Query Expansion
  7. Slotwoord en referenties
  8. Reacties op deze tutorial

FULLTEXT Query Expansion

Een laatste onderwerp dat ik in deze tutorial wil bespreken zijn full-text zoekopdrachten die gebruik maken van Query Expansion (vertaald: query uitbreiding).

Deze methode is over het algemeen handig als een zoekstring te kort is doordat de gebruiker niet precies weet waar hij op moet zoeken (bijv. de 'Ik doe een gok' optie van Google). Stel dat een gebruiker bijvoorbeeld zoekt op 'database' kan hij best wel eens 'MySQL', 'PostgreSQL' of 'Oracle' bedoelen. In dat geval zouden artikelen waarin deze trefwoorden voorkomen ook als gevonden resultaat terug gegeven moeten worden.

Door de WITH QUERY EXPANSION modifier aan de zoekopdracht mee te geven, kunnen we dit waarschijnlijk deels voor elkaar krijgen. Dit principe werkt namelijk door de zoekopdracht twee keer uit te voeren waarbij de zoekstring voor de tweede opdracht uitgebreid wordt met woorden uit de meest relevante resultaten uit de eerste opdracht.

Stel dus dat we zoeken naar 'database' en in de gevonden resultaten komt 'MySQL' veelvuldig voor. De tweede zoekopdracht zal dan ook rijen vinden waarin 'MySQL' voorkomt ook al bevatten deze rijen het woord 'database' niet.

Ik zal dit hele verhaal maar eens verduidelijken met een tweetal voorbeelden. Allereerst maar eens een normale zoekopdracht:
Code
1
2
3
SELECT *
FROM artikelen
WHERE MATCH(inhoud) AGAINST('database')

Het resultaat van deze query:
Code
1
2
3
4
5
6
+----+-------------------+------------------------------------------+
| id | titel             | inhoud                                   |
+----+-------------------+------------------------------------------+
|  5 | MySQL vs. YourSQL | In de volgende database vergelijking ... |
|  1 | MySQL Tutorial    | DBMS staat voor DataBase ...             |
+----+-------------------+------------------------------------------+

Als we nu het Query Expansion principe toepassen ziet de query er als volgt uit:
Code
1
2
3
SELECT *
FROM artikelen
WHERE MATCH(inhoud) AGAINST('database' WITH QUERY EXPANSION)

En het resultaat wordt dan:
Code
1
2
3
4
5
6
7
+----+-------------------------------------+------------------------------------------+
| id | titel                               | inhoud                                   |
+----+-------------------------------------+------------------------------------------+
|  1 | MySQL Tutorial                      | DBMS staat voor DataBase ...             |
|  5 | MySQL vs. YourSQL                   | In de volgende database vergelijking ... |
|  2 | MySQL op een goede manier gebruiken | Nadat je de volgende stappen ...         |
+----+-------------------------------------+------------------------------------------+

We zien dat er nu een extra rij gevonden is. Als je de resultaten gaat vergelijken zie je dat er nu twee records gevonden zijn met 'volgende' erin terwijl dat er eerst maar 1 was. Blijkbaar is het woord 'volgende' dus door MySQL als zeer relevant woord beoordeeld en gebruikt in de tweede zoekopdracht.

Vorige Volgende