2010-05-19 17 views
1

Dans mon application web j'effectuer 3 types de recherche sur items table avec les conditions suivantes:Est-il possible d'utiliser la recherche Sphinx avec des conditions dynamiques?

  1. items.is_public = 1 (utiliser le champ title pour l'indexation) - peut être récupéré beaucoup de résultats (cardinalité est beaucoup plus élevé que dans les autres cas)

  2. items.category_id = {X} (utiliser title + private_notes champs d'indexation) - généralement moins de 100 résultats

  3. items.user_id = {X} (utiliser title + private_notes champs d'indexation) - généralement moins de 100 résultats

Je ne peux pas trouver un moyen de faire fonctionner Sphinx dans tous ces cas, mais il fonctionne bien dans le 1er cas. Dois-je utiliser Sphinx juste pour le 1er cas et utiliser la recherche FULLTEXT "lente" dans MySQL (au moins en raison d'une cardinalité inférieure dans 2-3 cas)?

Ou est-ce juste moi et Sphinx peut faire à peu près tout?

Répondre

1

Sans connaissance de vos modèles que je pourrais manquer quelque chose, mais comment est ceci:

class item < ActiveRecord::Base 
    define_index do 
    indexes :title 
    indexes :private_notes 
    has :is_public, :type => :boolean 
    has :category_id 
    has :user_id 
    end 
end 

1)

Item.search(:conditions => {:title => "blah"}, :with => {:is_public => true}) 

2)

Item.search("blah", :with => {:category_id => 1}) 

3)

Item.search("blah", :with => {:user_id => 196}) 
+0

Merci! Je trouve think_sphinx beaucoup plus puissant que Ultrasphinx gem. Il n'est donc pas nécessaire de revenir à la recherche FULLTEXT non-sphinx maintenant. – ep3static