Jag tror att du vill använda Boolesk fulltextsökning
Om du matchar utan operatorer + - mot såsom green red blue alla rader returneras, där en post innehåller minst ett ord:green eller red eller blue .
IN BOOLEAN MODE och utan operatorer får varje matchat ord 1 . Så om det finns en post som matchar två av de tre orden skulle den få 2 .
För att få raderna med minst 2 poäng:
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
I naturligt språkläge poängsättning fungerar helt annorlunda. Tror att den främst är baserad på BM25 .
På stora datamängder boolesk fulltextsökning (med ett fulltextindex
) överträffar vanligtvis REGEXP eller LIKE överlägset om matchande ord någonstans i texten. Skulle bara använda like/regexp för att matcha från initialen såsom REGEXP '^word' eller LIKE 'word%' - om ett index kan användas.