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.