2010-11-13 8 views
1

J'ai fait beaucoup de recherches booléennes réussies mais 1 mot semble l'empêcher d'afficher les résultats attendus. Ci-dessous vous pouvez voir la structure de la table en haut, avec une attention particulière au contenu des étiquettes pour ce produit d'essai.Recherche booléenne ignorant le mot

alt text

Le code dans le texte Incase la capture d'écran est trop petit:

SELECT 
     id, 
     name, 
     description, 
     price, 
     image 
    FROM 
     products 
    WHERE   
     MATCH(tags,name,description) 
     AGAINST ('hot*' IN BOOLEAN MODE) 

Si je fais une recherche pour « chaud » qui est l'une des balises, il retourne 0. Cependant, si je fais une recherche de "boisson" qui est un autre tag, il trouve le produit!

Je n'arrive pas à comprendre pourquoi!

Répondre

4

Si je fais une recherche pour "hot" qui est l'un des tags, il renvoie 0 résultats.

Par défaut, MySQL n'indexe pas (et recherche) les mots de moins de 4 caractères.

Diminuez @@ft_min_word_len si vous souhaitez les indexer et reconstruire l'index.

+2

Que diriez-vous d'autres dbmse? –

+0

Et en aparté, @AlexCrooks pour tester cela dans votre environnement, ajouter "bite" aux termes de recherche et réessayer ("bite" étant un mot de quatre lettres, aussi "rose", "bleu" etc ..] mais de cette façon vous pouvez vous prouver que c'est le problème.) – jcolebrand

+0

@meder lisant mon esprit, mon deuxième commentaire allait être à @Quassnoi ~ Est-ce que cela s'applique à MSSQL ou ORA ou Postgresql? – jcolebrand

0

Assurez-vous que n'est pas un stop word (ne est pas un mot d'arrêt par défaut, mais peut-être votre implémentation de MySQL a pour une raison quelconque?) « Chaud » et que « chaud » ne soit pas trop court d'un mot (default ft_min_word_len est 4, donc les mots de moins de 4 lettres seront ignorés, SAUF s'ils correspondent à l'opérateur de troncature *, alors que chaud serait ignoré, hott ne serait pas, voir:)