Мисля, че искате да използвате Boolean Full-Text Search
Ако отговаряте без оператори +
-
срещу като green red blue
се връщат всички редове, където записът съдържа поне една дума:green
или red
или blue
.
IN BOOLEAN MODE
и без оператори всяка съвпадаща дума ще получи 1
. Така че, ако има запис, отговарящ на две от трите думи, той ще получи 2
.
За да получите редовете с поне 2 точки:
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
В Режим на естествен език точкуването работи съвсем различно. Мислете, че е основно базиран на BM25 .
При големи набори от данни булево търсене в пълен текст (с помощта на пълнотекстов индекс
) обикновено превъзхожда REGEXP
или LIKE
далеч, ако съвпадат думи някъде в текста. Ще използва само like/regexp за съвпадение от инициала, като REGEXP '^word'
или LIKE 'word%'
- ако може да се използва индекс.