sql >> Databáze >  >> RDS >> Mysql

Změna mysql ft_min_word_len na ubuntu nefunguje

Byl jsem schopen najít problém a opravu.

Nastavení fulltextového vyhledávání bylo dobré, protože jsem chtěl hledat pomocí alt east 2 slov a měl jsem ft_min_word_len = 2

Nyní při dalším testování jsem zjistil, že náhodně vyhledává několik 2 znakových slov a ostatní ignoruje.

Zde je příklad

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 následující funguje

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

Takže je to něco jiného a zjevně našel jeho ft_stopword_file který má seznam slov a nedělá nic, pokud s jedním z nich proběhne vyhledávání.

Seznam je zde http://dev.mysql.com /doc/refman/5.1/en/fulltext-stopwords.html

V tomto případě tedy povolit vyhledávání slov o délce alespoň 2 znaků

  • Nastavte parametr ft_min_word_len na 2
  • Poté do konfiguračního souboru mysql pro debian /etc/mysql/my.cnf přidejte ft_stopword_file='path/to/stopword_file.txt'
  • V případě potřeby můžeme tento soubor ponechat prázdný.

Ještě jedna věc, jakmile provedeme výše uvedená nastavení, musíme restartovat mysql a pokud změníme ft_min_word_len pak musíme znovu sestavit index nebo opravit tabulku.




  1. Jak provést úplné vnější spojení v MySQL

  2. Připojte 2 stoly a zobrazte je podle ID, priority a čísla

  3. Oracle :vyberte maximální hodnotu z různých sloupců stejného řádku

  4. SQLite Python