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.