我有users
, cafes
和它们的food_items
(其中列出了一些成分)。到目前为止,我使用solr通过用户喜欢的一些ingredients
来搜索food_items。这是根据太阳黑子文档
另外,我能够收集用户到不同咖啡馆的相对like-ness
(基于他访问它的次数,搜索它的菜单等)(这是一个动态值,将在飞行中生成)
问题:我想显示通过solr获取的相同结果(food_items), 由咖啡馆排名(结果重新排名)(基于用户对咖啡馆的相似度)使用太阳黑子solr for rails
这个应用程序托管在heroku上,使用websolr
我发现了这些:
https://cwiki.apache.org/confluence/display/solr/Query +评估
https://cwiki.apache.org/confluence/display/solr/RankQuery + API
但我不知道如何在太阳黑子中创建QParserPlugin
或生成排名查询。
sunspot
提供了一种编写自定义查询的方法。因此,如果我能在构造查询以获取相似性并对每个记录进行排序(或)以任何其他方式实现此类逻辑方面得到帮助,那将是非常好的。
谢谢!
你可以这样做:-
def build_query(where_conditions)
condition_procs = where_conditions.map{|c| build_condition c}
Sunspot.search(table_clazz) do
condition_procs.each{|c| instance_eval &c}
paginate(:page => page, :per_page => per_page)
end
end
def build_condition(condition)
Proc.new do
# write this code as if it was inside the sunspot search block
keywords condition['words'], :fields => condition[:field].to_sym
end
end
conditions = [{words: "tasty pizza", field: "title"},
{words: "cheap", field: "description"}]
build_query conditions