sql >> Base de Datos >  >> RDS >> Mysql

El cambio de mysql ft_min_word_len en ubuntu no funciona

Pude encontrar el problema y la solución.

La configuración de búsqueda de texto completo fue buena ya que quería buscar con alt east 2 palabras y tenía ft_min_word_len = 2

Ahora, mientras hacía más pruebas, encontré que al azar busca algunas palabras de 2 caracteres e ignora otras.

Aquí hay un ejemplo

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)

Pero lo siguiente funciona

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

Así que es otra cosa y aparentemente encontré que es el ft_stopword_file que tiene una lista de palabras y no hace nada si ocurre alguna búsqueda con una de ellas.

La lista está aquí http://dev.mysql.com /doc/refman/5.1/en/fulltext-stopwords.html

Entonces, en este caso, para permitir cualquier búsqueda de palabras de al menos 2 caracteres

  • Establezca ft_min_word_len en 2
  • Luego, en el archivo de configuración de mysql, para debian /etc/mysql/my.cnf agregue ft_stopword_file='path/to/stopword_file.txt'
  • Podemos dejar este archivo en blanco si es necesario.

Ah, una cosa más una vez que hagamos la configuración anterior, debemos reiniciar mysql y si cambiamos ft_min_word_len entonces necesitamos reconstruir el índice o reparar la tabla.