Ik denk dat je Boolean Full-Text Search
Als je matcht zonder operators +
-
tegen zoals green red blue
alle rijen worden geretourneerd, waarbij een record ten minste één woord bevat:green
of red
of blue
.
IN BOOLEAN MODE
en zonder operatoren scoort elk gevonden woord 1
. Dus als er een record is dat overeenkomt met twee van de drie woorden, scoort het 2
.
Om de rijen met minimaal 2 scores te krijgen:
SELECT *,
MATCH (`TextToCheckIn`) AGAINST ('green red blue' IN BOOLEAN MODE) `score`
FROM `my_tab` WHERE
MATCH (`TextToCheckIn`) AGAINST ('green red blue' IN BOOLEAN MODE)
HAVING `score` >= 2
ORDER BY `score` DESC
In Natuurlijke taalmodus scoren werkt heel anders. Denk dat het voornamelijk gebaseerd is op BM25 .
Op grote datasets boolean fulltext zoeken (met behulp van een fulltext index
) presteert meestal beter dan REGEXP
of LIKE
verreweg als woorden ergens overeenkomen in de tekst. Zou alleen like/regexp gebruiken voor overeenkomsten vanaf de initiaal, zoals REGEXP '^word'
of LIKE 'word%'
- of een index kan worden gebruikt.