Z dokumentacji MySQL
-
+
Wiodący znak plus wskazuje, że to słowo musi być obecne w każdym zwracanym wierszu. -
*
Gwiazdka służy jako operator obcięcia (lub symbol wieloznaczny). W przeciwieństwie do innych operatorów, należy ją dołączyć do słowa, którego dotyczy zmiana. Słowa pasują, jeśli zaczynają się od słowa poprzedzającego *operator.Jeśli słowo jest określone za pomocą operatora obcinania, nie jest ono usuwane z zapytania logicznego, nawet jeśli jest za krótkie (jak określono na podstawie ustawienia ft_min_word_len) lub słowo stop. Dzieje się tak, ponieważ słowo nie jest postrzegane jako zbyt krótkie lub pomijane, ale jako prefiks, który musi być obecny w dokumencie w formie słowa zaczynającego się od prefiksu .
W kontekście:
DOPASUJ(...) PRZECIW(...)
MATCH (name) AGAINST ('+ski*' IN BOOLEAN MODE)
oznacza, że szukasz wierszy, w których słowo w name
kolumna musi zawierać ski
i musi zacząć ze słowem ski
.
Z opublikowanego zestawu Dartmouth Skiway
jest jedyną name
zgodny z tymi wymaganiami:zawiera słowo ski
i jest poprzedzone słowem ski
.
Druga name
kolumny, chociaż pasują do pierwszej reguły:musi zawierać ski
, nie są one poprzedzone ski
, jak określono w Twojej regule. Wiersz zwrócony przez Twoje wyszukiwanie logiczne jest jedynym, który ma name
kolumna zawierająca słowo, które oba zawiera ski
i jest słowem przedrostkiem przez ski
.
Zgodnie z sugestią ajreal, spróbuj zmniejszyć ft_min_len_word_setting
w my.cnf
. Twoje wyszukiwanie może nie przynieść oczekiwanych wyników z powodu ustawienia domyślnego. Spróbuj zmniejszyć go do 3.
WHERE kolumna LIKE %text%
WHERE name LIKE "%ski%"
wyszukuje wiersze z name
kolumny zawierające ski
, bez względu na to, gdzie występuje słowo.