2009-04-15 6 views
5

J'utilise Sphinx avec le plugin Thinking Sphinx. J'ai répertorié un modèle appelé lieu avec le code suivant (et le thinking_sphinx rake: commande d'index)Sphinx renvoyant des résultats de recherche incorrects

define_index do 
    indexes :name 
    indexes city 
    indexes zip 
end 

-je obtenir les résultats dans mon contrôleur avec ce code:

@venues = Venue.search params[:search] 

et je les rendre comme Json. Le problème que j'ai est que quand je frappe cette URL:

http://localhost:3000/venue/list?search=Baltimo 

Je n'ai rien. Mais quand j'ai frappé cette URL:

http://localhost:3000/venue/list?search=Baltimor 

Je reçois tous les lieux situés dans la ville de Baltimore. Pour une raison quelconque, un personnage fait une différence. Théoriquement, je devrais obtenir tous les lieux à Baltimore si je fais juste la recherche avec un caractère - 'b'

Est-ce que quelqu'un sait ce qui se passe ici?

Merci

Répondre

6

Sauf si vous avez enable_star mis à 1 et min_prefix_len ou min_infix_len mis à 1 ou plus, vous ne serez pas B pour correspondre à Baltimore (et même alors, je pense que vous devez rechercher B * pour obtenir le match).

Ce qui se passe ici est que par défaut, Thinking Sphinx dit Sphinx d'utiliser un stemmer anglais, ce qui permet de similaires mots (par des personnages, et non par sens) être matchs considérés, il met Baltimor et Baltimore dans le même panier.

Si vous voulez obtenir une partie d'un mot adapté, alors vous avez besoin de mettre quelque chose comme ce qui suit dans config/sphinx.yml:

development: 
    enable_star: 1 
    min_infix_len: 1 
test: 
    enable_star: 1 
    min_infix_len: 1 
production 
    enable_star: 1 
    min_infix_len: 1 

arrêt Puis Sphinx, réindexer et redémarrez Sphinx . Une fois que vous avez fait cela, alors les recherches de B * devraient renvoyer Baltimore.

Espérons que cela aide.

+0

doux, juste trouvé que sur la documentation sphinx ... mais ne pouvait pas trouver où il a dit de mettre cela dans le yml. Je vous remercie! – Tony

+0

Existe-t-il un moyen de ne pas taper un * à la fin? Comme si le bois de recherche tirait du bois et du bois sans avoir à taper du bois * – Mike

+0

Bonne réponse. Pour tous ceux qui trébuchent ici, les détails sont disponibles sur http://freelancing-god.github.com/ts/fr/advanced_config.html. Une chose à prendre en compte est que la définition de min_infix_len sur 1 réduira probablement les performances. – dmonopoly

Questions connexes