Myslím, že chcete použít Booleovské fulltextové vyhledávání
Pokud odpovídáte bez operátorů + - proti jako je green red blue jsou vráceny všechny řádky, kde záznam obsahuje alespoň jedno slovo:green nebo red nebo blue .
IN BOOLEAN MODE a bez operátorů bude mít každé odpovídající slovo skóre 1 . Pokud tedy existuje záznam odpovídající dvěma ze tří slov, dostane skóre 2 .
Chcete-li získat řádky s alespoň 2 skóre:
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
V režimu přirozeného jazyka bodování funguje úplně jinak. Domnívám se, že je primárně založen na BM25 .
U velkých datových sad booleovské fulltextové vyhledávání (pomocí fulltextového indexu
) obvykle překonává REGEXP nebo LIKE zdaleka, pokud se slova shodují někde v textu. Použil by pouze like/regexp pro shodu s iniciálou, jako je REGEXP '^word' nebo LIKE 'word%' - pokud lze použít index.