2010-10-11 4 views
0

J'utilise la gemme Sunspot dans mon application RoR pour faire des recherches sur le modèle Post, et cela fonctionne très bien pour cela. Cependant, j'ai besoin d'utiliser son algorithme de correspondance sur un seul objet post.Sunspot Solr correspondant à un seul objet

Par exemple, je peux rechercher tous les messages comme celui-ci:

Sunspot.search Post do 
    ... 
end 

Mais, je dois faire la recherche contre un seul objet de poste, comme ceci:

Sunspot.search @post do 
    ... 
end 

Est-ce possible?

Je souhaite utiliser le même algorithme de correspondance sur un seul objet post pour vérifier s'il correspond ou non.

+0

Vous voulez dire que vous voulez faire ce correspondant dans RoR? Ou voulez-vous obtenir une correspondance avec ce qui est stocké dans Solr? –

+0

Je veux faire cette correspondance dans RoR. Lorsque je fais ce match, l'objet peut ou non avoir été ajouté à solr. Par conséquent, il serait bon d'utiliser la même logique que celle utilisée par Solr pour faire la correspondance dans mon application RoR. –

Répondre

0

Je ne pense pas que ce soit possible. C'est Solr et Lucene, pas Sunspot, qui ont tous les algorithmes qui déterminent si quelque chose correspond ou non à une requête donnée. Les clients Solr construisent simplement les paramètres de la requête et les transmettent à Solr, puis analysent les résultats de Solr.

+0

Je pensais autant mais espérais quelque chose de caché dans l'API que je pourrais utiliser. Tant pis. –

0

Je ne sais pas exactement comment faire cela avec la tâche solaire, mais une chose que vous pouvez essayer est d'interroger RSolr directement, passer l'ID du modèle que vous voulez vérifier dans le: fq, et voir si elle retourne un résultat ou non. Devrait revenir assez vite à cause de la requête de filtre:

solr = RSolr.connect(:url => Sunspot.session.config.solr.url) 
solr.select :q => solr_query, :fq => ['type:Post', "id:#{@post.id}"] 
Questions connexes