Jeg tror, du vil bruge Boolean Full-Text Search a>
Hvis du matcher uden operatorer +
-
mod såsom green red blue
alle rækker returneres, hvor en post indeholder mindst ét ord:green
eller red
eller blue
.
IN BOOLEAN MODE
og uden operatorer vil hvert matchet ord score 1
. Så hvis der er en post, der matcher to ud af de tre ord, får den 2
.
For at få rækkerne med mindst 2 point:
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 Naturlig sprogtilstand scoring fungerer helt anderledes. Tror det primært er baseret på BM25 .
På store datasæt boolsk fuldtekstsøgning (ved hjælp af et fuldtekstindeks
) overgår normalt REGEXP
eller LIKE
langt om matchende ord et eller andet sted i teksten. Ville kun bruge like/regexp til at matche fra initialen såsom REGEXP '^word'
eller LIKE 'word%'
- hvis et indeks kan bruges.