2010-08-09 8 views
15

Je suis un peu perdu, cela ressemble à une erreur stupide - mais je n'ai aucune idée de ce que cela peut être. Voici la séance d'essais:FULLTEXT recherche dans MySQL ne retourne pas de lignes

mysql> drop table articles; 
Query OK, 0 rows affected (0.02 sec) 

mysql> CREATE TABLE articles (body TEXT, title VARCHAR(250), id INT NOT NULL auto_increment, PRIMARY KEY(id)) ENGINE = MYISAM; 
Query OK, 0 rows affected (0.02 sec) 

mysql> ALTER TABLE articles ADD FULLTEXT(body, title); 
Query OK, 0 rows affected (0.02 sec) 
Records: 0 Duplicates: 0 Warnings: 0 

mysql> insert into articles(body) values ('Maya'); 
Query OK, 1 row affected (0.00 sec) 

mysql> SELECT * FROM articles WHERE MATCH(title, body) AGAINST('Maya'); 
Empty set (0.00 sec) 

mysql> select * from articles 
    -> ; 
+------+-------+----+ 
| body | title | id | 
+------+-------+----+ 
| Maya | NULL | 1 | 
+------+-------+----+ 
1 row in set (0.00 sec) 

C'est sur "mysqld Ver 5.1.37-1ubuntu5 pour debian-linux-gnu sur i486 ((Ubuntu))".

Voici le script pour la coupe simple et coller (s'il vous plaît essayer et de vérifier si cela fonctionne sur votre système):

CREATE TABLE articles (body TEXT, title VARCHAR(250), id INT NOT NULL auto_increment, PRIMARY KEY(id)) ENGINE = MYISAM; 
ALTER TABLE articles ADD FULLTEXT(body, title); 
insert into articles(body) values ('Maya'); 
SELECT * FROM articles WHERE MATCH(title, body) AGAINST('Maya');  
+2

+1 pour demander une amende, question compréhensible, bien documenté du premier coup. –

Répondre

19

En MySQL, il y a trois types de recherches en texte intégral:

  • recherche booléenne
  • recherche en langage naturel (utilisé par défaut)
  • recherche d'extension de requête

De MySQL manual entry:

Une recherche en langage naturel interprète la chaîne de recherche comme une phrase dans langage humain naturel (une phrase dans texte libre). Il n'y a pas d'opérateurs spéciaux . La liste des mots vides s'applique. En outre, les mots qui sont présents dans 50% ou plus des rangées sont considérés comme communs et ne correspondent pas. Les recherches de texte intégral sont naturelles recherche de la langue si le modificateur IN NATURAL LANGUAGE MODE est utilisé ou si aucun modificateur n'est indiqué.

Par exemple, essayez d'ajouter deux autres dossiers:

INSERT INTO articles(body) VALUES ('Some text'), ('Another text'); 

et exécutez le même SELECT à nouveau - il fonctionnera.

Pour contourner ce problème, vous pouvez utiliser le mode booléen, qui n'a pas « 50% » règle:

SELECT * FROM articles WHERE MATCH(title, body) AGAINST('Maya' IN BOOLEAN MODE); 
Questions connexes