2010-02-19 15 views
2

Lorsque vous effectuez une recherche « débordement de pile », le Sphinx ne donneront pas les résultats qui correspondent à « Stackoverflow »Si quelqu'un a déjà utilisé le moteur de recherche Sphinx avant ... Savez-vous s'il peut joindre des mots?

C'est parce que les index Sphinx « Stackoverflow » en un seul mot ... alors que la requête est deux mots.

Est-ce que quelqu'un sait comment résoudre ce problème? (comme Google ... ils peuvent rejoindre la requête!)

Répondre

1

Il n'est pas nécessaire d'altérer les données transmises à Sphinx. Tout ce que vous devez faire est de modifier légèrement la requête de recherche dans Sphinx dans votre code de traitement de formulaire afin qu'il contienne diverses combinaisons de termes de recherche et utilisez le mode de correspondance SPH_MATCH_EXTENDED. En particulier, pour votre exemple

(Stack Overflow) | stackoverflow 
+0

Où puis-je mettre ce code? Result_ids = cl.Query (q, index) – TIMEX

+0

C'est ce que j'ai jusqu'ici. – TIMEX

+0

Cela ne fonctionne pas: cl.Query (("talk radar") | "talkradar", index) – TIMEX

0

Ne pourriez-vous pas combiner les termes de recherche en un mot avant de les envoyer à sphinx? Vous auriez besoin de faire toutes les permutations des termes de serach, c'est-à-dire my search term comme mysearch, mysearchterm, et searchterm, mais cela semble fonctionner.

2

Vous pouvez utiliser la fonction wordforms pour cartographier les mots pour des mots différents, ou pour correspondre à beaucoup de mots à un seul mot. Si vous avez beaucoup de mots que vous voulez corriger, vous pouvez le faire. Je pense que si vous utilisiez cette fonctionnalité, vous ne feriez qu'une seule recherche, et ce serait probablement plus rapide que de faire une recherche "ou".