Myślę, że chcesz użyć Boolean Full-Text Search
Jeśli pasujesz bez operatorów +
-
przeciwko takim jak green red blue
zwracane są wszystkie wiersze, w których rekord zawiera co najmniej jedno słowo:green
lub red
lub blue
.
IN BOOLEAN MODE
a bez operatorów każde dopasowane słowo otrzyma 1
. Więc jeśli istnieje rekord pasujący do dwóch z trzech słów, otrzyma wynik 2
.
Aby uzyskać wiersze z co najmniej 2 punktami:
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
W trybie języka naturalnego punktacja działa zupełnie inaczej. Myślę, że opiera się głównie na BM25 .
W przypadku dużych zbiorów danych wyszukiwanie pełnotekstowe za pomocą wartości logicznej (przy użyciu indeks pełnotekstowy
) zwykle przewyższa REGEXP
lub LIKE
zdecydowanie, jeśli pasujące słowa gdzieś w tekście. Używałby tylko like/regexp do dopasowania od inicjału, takiego jak REGEXP '^word'
lub LIKE 'word%'
- czy można wykorzystać indeks.