Mysql
 sql >> Base de données >  >> RDS >> Mysql

le changement mysql ft_min_word_len sur ubuntu ne fonctionne pas

J'ai pu trouver le problème et le correctif.

Le paramètre de recherche en texte intégral était bon car je voulais rechercher avec alt east 2 mots et j'avais ft_min_word_len = 2

Maintenant, en faisant plus de tests, j'ai trouvé qu'il cherchait au hasard quelques mots de 2 caractères et en ignorait d'autres.

Voici un exemple

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)

Mais les travaux suivants

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

Donc c'est autre chose et apparemment trouvé son ft_stopword_file qui a une liste de mots et ne fait rien si une recherche se produit avec l'un d'eux.

La liste est ici http://dev.mysql.com /doc/refman/5.1/en/fulltext-stopwords.html

Donc, dans ce cas, pour autoriser toute recherche de mots d'une longueur d'au moins 2 caractères

  • Définir le ft_min_word_len sur 2
  • Puis dans le fichier de configuration mysql, pour debian /etc/mysql/my.cnf ajoutez ft_stopword_file='path/to/stopword_file.txt'
  • Nous pouvons laisser ce fichier vide si nécessaire.

Oh, encore une fois, une fois que nous avons défini les paramètres ci-dessus, nous devons redémarrer mysql et si nous modifions ft_min_word_len alors nous devons reconstruire l'index ou réparer la table.