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.