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.