我面临着根据用户点击日志对Solr结果进行排序的问题。我希望更多可访问的结果优先。有人知道如何在Solr中配置或实现此类属性吗?
非常感谢。
好问题。你的问题可以被认为是一个经典的集体智慧或群体智慧问题。第一步是为某个查询点击url的计数,即对于每个查询,url对,您将为该元组维护一个计数。每次用户单击特定的url时,计数都会增加1。作为第二步,Solr将根据其排名和相关性算法(如LCS、向量空间等)为您返回结果。除此之外,url对还将为您返回一个框架公式,该公式将Solr为文档提供的排名添加一定值(基于点击次数),然后您必须根据获得的总排名显示结果。
文档获得的总排名=Solr给出的排名+单击排名您给出的数值。
例如,当你搜索"iphone计划"时,Solr会按排名从高到低的顺序返回以下链接:
- 苹果
- AT&T
- 亚马逊
现在,您检查每个查询的url对,即{"iphone计划"、Apple}{"iphone计划"、AT&T}{;T与苹果相比。通过使用用户定义的公式并对单击进行加权,您可以重新排列以上内容并更改其显示顺序。
然而,请注意,你设计的公式应该不适合垃圾邮件发送者,他们可以通过对特定文档的巨大点击来改变你网站的整个排名(比如使用机器人:)
以上就是逻辑。现在有两种方法可以实现以上内容:
-
更改Lucene相似性类(http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/all/org/apache/lucene/search/Similarity.html)即,首先了解Lucene是如何进行排名的,然后将您的模块嵌入
-
将其作为Solr之上的独立例程来实现。
注意:请记住,如果您有巨大/大的数据,那么获取查询、url对的计数并不容易,在这种情况下,您需要编写一些map reduce作业才能实现这一点。