2010-11-08 7 views
4

J'ai lu que l'utilisation de la recherche fulltext est plus rapide que l'utilisation de LIKE %%. J'ai mis à jour mon script mais il semble toujours avoir toujours 0 résultat.MySQL Recherche plein texte a toujours 0 résultats?

SELECT *, 
MATCH(pages) AGAINST('doodle') AS score 
FROM books 
WHERE MATCH(pages) AGAINST('doodle') 
ORDER BY score DESC 

Le mot-clé $ est plus long que 4 caractères et j'ai l'index de la colonne de pages en texte intégral. J'ai "doodle" dans la colonne des pages dans ce format "yankee doodle".

J'ai aussi essayé

SELECT *, 
MATCH(pages) AGAINST ('doodle' IN BOOLEAN MODE) AS score 
FROM books 
WHERE MATCH(pages) AGAINST ('doodle' IN BOOLEAN MODE)"; 

Aucun d'entre eux fonctionne: \

+0

Avez-vous un index de texte intégral dans la colonne 'pages'? Voulez-vous vraiment chercher '$ keyword' dans la colonne' pages'? – Xint0

+0

Pouvez-vous montrer un exemple de '$ mot-clé'? –

+0

Oui désolé. J'ai mis à jour mon article – dark

Répondre

13

recherche du texte intégral a quelques bizarreries bizarres.

Par exemple, le comportement décrit dans les derniers paragraphes de this page pourrait être la raison de votre problème:

.... par exemple, bien que le mot « MySQL » est présent dans chaque ligne de la table articles indiqué précédemment, une recherche du mot produit aucun résultat:

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

le résultat de recherche est vide parce que le mot « MySQL » est présent dans au moins 50% des lignes. En tant que tel, il est effectivement traité comme un mot d'ordre. Pour les ensembles de données volumineux, il s'agit du comportement le plus souhaitable: Une requête en langage naturel ne doit pas renvoyer toutes les secondes lignes d'une table de 1 Go. Pour les petits ensembles de données, il peut être moins souhaitable.

La réponse ici serait d'ajouter plus de lignes, ou utiliser la recherche booléenne.

Si vous avez besoin de résultats de recherche pondérés, consultez le commentaire Posted by John Craig on December 16 2009 7:01pm sur la page liée pour obtenir une suggestion de solution de contournement.

+0

S'il vous plaît pourriez-vous me donner un exemple? – dark

+1

@moo vous voulez dire pour le mode booléen? Voir cette page, il a un exemple de requête: http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html –

+0

Je sais qu'il est trop tard pour commenter, mais je suis toujours confronté à ce problème juste aujourd'hui. Je vais utiliser le mode booléen et puisqu'il n'y a pas de pertinence avec les résultats, je vais trier les résultats par leur score comme il est montré ici: http://stackoverflow.com/a/3593438/632027 – Acute