Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql ft_min_word_len Änderung auf Ubuntu funktioniert nicht

Ich konnte das Problem und die Lösung finden.

Die Einstellung für die Volltextsuche war gut, da ich mit Alt Ost 2 Wörter suchen wollte und ft_min_word_len = 2 hatte

Jetzt, während ich weitere Tests durchführte, fand ich, dass es zufällig nach wenigen 2-Zeichen-Wörtern sucht und andere ignoriert.

Hier ist ein Beispiel

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)

Aber das Folgende funktioniert

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

Also ist es etwas anderes und anscheinend hat es die ft_stopword_file gefunden die eine Liste von Wörtern hat und nichts tut, wenn eine Suche mit einem von ihnen erfolgt.

Die Liste ist hier http://dev.mysql.com /doc/refman/5.1/en/fulltext-stopwords.html

Also in diesem Fall jede Wortsuche mit einer Länge von mindestens 2 Zeichen zuzulassen

  • Setzen Sie ft_min_word_len auf 2
  • Fügen Sie dann in der mysql-Konfigurationsdatei für debian /etc/mysql/my.cnf ft_stopword_file='path/to/stopword_file.txt' hinzu
  • Wir können diese Datei bei Bedarf leer lassen.

Oh, noch eine Sache, sobald wir die obigen Einstellungen vorgenommen haben, müssen wir mysql neu starten und wenn wir ft_min_word_len ändern dann müssen wir den Index neu erstellen oder die Tabelle reparieren.