我目前正在使用Solr 1.4(很快升级到3.3)。友谊表非常标准:
id | follower_id | user_id
我想执行常规关键字solr搜索,并按分离度和标准分数顺序对结果进行排序。从结果集中,如果关键字匹配我的任何直接朋友,他们将首先显示。其次是我的朋友的朋友,第三是朋友的第三度分离。所有其他结果都会在之后发生。
我很确定Solr不会提供任何“预先烘焙”的方式,因此我可能需要在MySQL上加入以正确排序结果。好奇,如果有人之前已经这样做过和/或有一些见解。
答案 0 :(得分:2)
答案 1 :(得分:2)
一种方法可能是创建degree_1
,degree_2
等字段,并将字段 x 的朋友列表存储在字段degree_x
中。然后,您可以触发多个查询 - 第一个将结果限制为degree_1
中有您的人,第二个将结果限制为degree_2
中有您的人,等等。
这有点复杂,但我能想到使用Solr的唯一解决方案。
答案 2 :(得分:0)
之前我没有在solr中代表过图表,但我认为从高层次来看,这就是你能做到的。首先,将人们表示为节点,将社交网络表示为数据库中的图表。在sql中实现transitive closure函数以允许您遍历图形。然后,您将结果索引到solr,并将社交网络信息存储到payloads,example。
答案 3 :(得分:-1)
我能够通过执行多个查询并使用范围“with”来限制同事,第二和第三学位同事的id,使用id并使用mysql进行选择。
@search_1 = perform_search(1, options)
@search_2 = perform_search(2, options)
if degree == 1
with(:id).any_of(options[:colleague_ids])
elsif degree == 2
with(:id).any_of(options[:second_degree_colleagues])
end
这是一个肮脏的解决方案,因为我必须执行多个solr查询,但直到我可以使用动态字段排序选项(solr 3.3,当前不支持太阳黑子)我真的不知道任何其他方法来实现这一点。