Eu tenho uma tabela articles
com os seguintes dados
mysql> select * from articles;
+----+-----------------------+------------------------------------------+
| id | title | body |
+----+-----------------------+------------------------------------------+
| 1 | MySQL Tutorial | DBMS stands for DataBase ... |
| 2 | How To Use MySQL Well | After you went through a ... |
| 3 | Optimizing MySQL | In this tutorial we will show ... |
| 4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... |
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
| 6 | MySQL Security | When configured properly, MySQL ... |
| 7 | ABCD | Following things are not upto date |
| 8 | RockOn | is the Following |
+----+-----------------------+------------------------------------------+
8 rows in set (0.00 sec)
quando eu escrevo a consulta como ..
mysql> select * from articles where match(`body`) against('database');
+----+-------------------+------------------------------------------+
| id | title | body |
+----+-------------------+------------------------------------------+
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
| 1 | MySQL Tutorial | DBMS stands for DataBase ... |
+----+-------------------+------------------------------------------+
2 rows in set (0.00 sec)
o resultado é o esperado.
mas quando eu emito a consulta como
mysql >select * from articles where match(`body`) against('following' in boolean mode);
Empty set (0.00 sec)
por que mostra um conjunto vazio, pois há um registro correspondente à consulta.
Eu tenho índice de texto completo no corpo.
mysql> show create table articles\G
*************************** 1. row ***************************
Table: articles
Create Table: CREATE TABLE `articles` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(200) DEFAULT NULL,
`body` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `body` (`body`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
Provavelmente parece que
following
está nastop words
lista.você deve verificar as palavras de parada para ver se é esse o caso.
A resposta de @John.Locke acerta em cheio. +1 em sua resposta.
O comentário de @DTest confirmou isso. +1 no seu comentário.
Aqui está como contornar isso:
Passo 01) Crie uma lista vazia de palavras irrelevantes
Opcional: faça com que a lista de stopwords tenha artigos (sem trocadilhos) 'a','an','the'
Etapa 02) Configure o mysql para aceitar tudo nos índices FULLTEXT menos suas stopwords personalizadas
Passo 03) Reinicie o mysql
Passo 04) Reindexar a tabela
De uma chance !!!
EMBARGO
Sempre que você reindexar um índice FULLTEXT após customizar para permitir que mais palavras sejam indexadas, o índice resultante definitivamente será maior.