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

mysql ft_min_word_len zmiana na ubuntu nie działa

Udało mi się znaleźć problem i naprawić.

Ustawienie wyszukiwania pełnotekstowego było dobre, ponieważ chciałem wyszukiwać za pomocą alt east 2 słów i miałem ft_min_word_len = 2

Teraz, wykonując więcej testów, odkryłem, że losowo wyszukuje kilka dwuznakowych słów i ignoruje inne.

Oto przykład

CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR(200),
    body TEXT,
    FULLTEXT (title,body)
);

INSERT INTO articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('use');
Empty set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('Use');
Empty set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('you');
Empty set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('the');
Empty set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('vs.');
Empty set (0.00 sec)

Ale następujące działa

mysql> SELECT * FROM articles
    -> WHERE MATCH (title,body) AGAINST ('run');
+----+-------------------+-------------------------------------+
| id | title             | body                                |
+----+-------------------+-------------------------------------+
|  4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... |
+----+-------------------+-------------------------------------+

Więc to coś innego i najwyraźniej znalazłem ft_stopword_file który ma listę słów i nie robi nic, jeśli jakiekolwiek wyszukiwanie nastąpi z jednym z nich.

Lista znajduje się tutaj http://dev.mysql.com /doc/refman/5.1/en/fulltext-stopwords.html

Więc w tym przypadku, aby umożliwić wyszukiwanie dowolnego słowa o długości co najmniej 2 znaków

  • Ustaw ft_min_word_len na 2
  • Następnie w pliku konfiguracyjnym mysql dla debian /etc/mysql/my.cnf dodaj ft_stopword_file='ścieżka/do/pliku_stopword.txt'
  • W razie potrzeby możemy pozostawić ten plik pusty.

Och jeszcze jedno, gdy zrobimy powyższe ustawienia, musimy zrestartować mysql i jeśli zmienimy ft_min_word_len następnie musimy odbudować indeks lub naprawić tabelę.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. wybierz zapytanie w wordpressie

  2. Jak uciec z zarezerwowanych słów mysql w zapytaniu w php?

  3. PHP mysqli() nie działa

  4. Mysql Nie można było nawiązać połączenia, ponieważ maszyna docelowa aktywnie je odrzuciła

  5. Dodawanie łamania linii w MySQL INSERT INTO text