2011-08-06 6 views
0

J'ai une table où il y a des données vidéo, comme "titre", "description", etc. J'essaie d'écrire un moteur de recherche avec indexation MySQL fulltext. La requête SQL fonctionne avec certains mots mais pas tous les mots. Voici ma requête SQL; Où je remplace "XXXXXXXX" avec les termes de la requête. Cela fonctionne avec "otomotiv" mais pas avec "otomoti". Ne doit-il pas trouver "otomoti" s'il trouve "otomotiv", comme "otomoti" fait partie du mot entier "otomotiv"?MySQL Fulltext (Not) Recherche

J'ai essayé de changer le mode de recherche en "IN NATURAL LANGUAGE MODE" ou "WITH QUERY EXPANSION" mais toujours pas de chance.

Est-il normal que MySQL ne trouve pas une partie du mot entier?

Répondre

2

Vous devez effectuer une recherche booléenne en texte intégral car il prend en charge l'opérateur générique.
http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

SELECT * 
FROM videos 
WHERE MATCH (title, description) AGAINST ('otomoti*' IN BOOLEAN MODE) 
+0

Il fonctionne, merci. Donc, serait-il judicieux d'écrire AGAINST ('* otomoti *' IN BOOLEAN MODE) comme il pourrait y avoir d'autres variations, comme "potomotiv"? (Désolé pour les astérisques b/c SO changer n'importe quoi entre astérisques en texte gras). –

+0

Non, vous ne pouvez pas placer d'astérisque au début du mot. Si vous voulez effectuer une recherche de sous-chaîne, jetez un oeil à l'opérateur "LIKE". –

+0

Je pensais que "LIKE" était plus lent que "FULLTEXT". Si c'est vrai, que je dois rester avec FULLTEXT, non? Il est également discuté sur ce lien, http://forums.mysql.com/read.php?24,126294 Je ne suis pas sûr s'il est préférable d'utiliser "LIKE". –