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.