Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Tajemnica wyszukiwania pełnotekstowego MySQL

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel Eloquent porównuje datę z polem datetime

  2. Zapytanie o wiele tagów

  3. MySQL:błąd SQL:1140, stan SQL:42000

  4. Jak przenieść wszystkie bazy danych MySQL ze starego na nowy serwer?

  5. Konwertuj BufferedInputStream na obraz