Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

alteração do mysql ft_min_word_len no Ubuntu não funciona


Consegui encontrar o problema e a correção.

A configuração de pesquisa de texto completo era boa, pois eu queria pesquisar com alt east 2 palavras e tinha ft_min_word_len = 2

Agora, ao fazer mais testes, descobri que aleatoriamente pesquisa algumas palavras de 2 caracteres e ignora outras.

Aqui está um exemplo
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)

Mas o seguinte 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. ... |
+----+-------------------+-------------------------------------+

Então é outra coisa e aparentemente encontrou o ft_stopword_file que tem uma lista de palavras e não faz nada se acontecer alguma pesquisa com uma delas.

A lista está aqui http://dev.mysql.com /doc/refman/5.1/en/fulltext-stopwords.html

Portanto, neste caso, para permitir qualquer pesquisa de palavras com pelo menos 2 caracteres
  • Defina ft_min_word_len como 2
  • Em seguida, no arquivo de configuração do mysql, para debian /etc/mysql/my.cnf adicione ft_stopword_file='path/to/stopword_file.txt'
  • Podemos deixar este arquivo em branco, se necessário.

Ah, mais uma coisa, uma vez que fazemos as configurações acima, precisamos reiniciar o mysql e se alterarmos ft_min_word_len então precisamos reconstruir o índice ou reparar a tabela.