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.