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

Problem z wyszukiwaniem pełnotekstowym MySQL 5.6 podczas wyszukiwania słowa the w PHP

Ok, w końcu to rozgryzłem. Wygląda na to, że wyczyściłem już odrzucane słowa myisam, ale nie te innodb. Jest to trochę trudniejsze niż w przypadku myisam, ale oto kroki dla każdego, kto może tego potrzebować:

W swoim /etc/my.cnf (lub my.ini w systemie Windows) dodaj następujące wiersze:

Utwórz tabelę odrzucanych słów. Utworzyłem mój w bazie danych o nazwie settings i tabelę o nazwie innodb-stopwords . Nie możesz po prostu ustawić innodb_ft_enable_stopword = 0 , musisz utworzyć i połączyć z tabelą.

Upewnij się, że Twoja tabela jest innodb i dodaj kolumnę o nazwie value , varchar(?), utf8_general_ci. Możesz pozostawić to puste lub dodać wartości do tabeli.

innodb_ft_enable_stopword = 1  
innodb_ft_server_stopword_table = settings/innodb-stopwords

Uruchom ponownie serwer mysql.

Upuść i odtwórz swoje indeksy pełnotekstowe.

Jeśli nie chcesz restartować serwera, możesz dynamicznie ustawić zmienne za pomocą (również zaktualizować plik cnf/ini dla następnego restartu serwera)

--innodb_ft_enable_stopword=1
--innodb_ft_server_stopword_table=db_name/table_name

Nie widzę żadnego obejścia dla odtworzenia indeksu... możesz to zrobić w jednym poleceniu, dzięki czemu tabela jest cały czas zablokowana, a Twoi użytkownicy nie otrzymują błędów:

ALTER TABLE `tablename` DROP INDEX indexname, ADD FULLTEXT(`columnname`);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Optymalizacja MySQL Prędkość INSERT jest spowolniona z powodu indeksów

  2. Przechowywanie numerów ubezpieczenia społecznego

  3. Jak znaleźć wiersze, które mają wartość zawierającą małą literę?

  4. Leniwe pobieranie pojedynczej kolumny (atrybut klasy) z Hibernate

  5. Składnia MySQL wydaje się poprawna