Udało mi się znaleźć problem i naprawić.
Ustawienie wyszukiwania pełnotekstowego było dobre, ponieważ chciałem wyszukiwać za pomocą alt east 2 słów i miałem ft_min_word_len = 2
Teraz, wykonując więcej testów, odkryłem, że losowo wyszukuje kilka dwuznakowych słów i ignoruje inne.
Oto przykład
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 następujące działa
mysql> SELECT * FROM articles
-> WHERE MATCH (title,body) AGAINST ('run');
+----+-------------------+-------------------------------------+
| id | title | body |
+----+-------------------+-------------------------------------+
| 4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... |
+----+-------------------+-------------------------------------+
Więc to coś innego i najwyraźniej znalazłem ft_stopword_file
który ma listę słów i nie robi nic, jeśli jakiekolwiek wyszukiwanie nastąpi z jednym z nich.
Lista znajduje się tutaj http://dev.mysql.com /doc/refman/5.1/en/fulltext-stopwords.html
Więc w tym przypadku, aby umożliwić wyszukiwanie dowolnego słowa o długości co najmniej 2 znaków
- Ustaw ft_min_word_len na 2
- Następnie w pliku konfiguracyjnym mysql dla debian /etc/mysql/my.cnf dodaj ft_stopword_file='ścieżka/do/pliku_stopword.txt'
- W razie potrzeby możemy pozostawić ten plik pusty.
Och jeszcze jedno, gdy zrobimy powyższe ustawienia, musimy zrestartować mysql i jeśli zmienimy ft_min_word_len
następnie musimy odbudować indeks lub naprawić tabelę.