在用户点击的基础上对solr结果进行排序?

Kp *_*pta 3 lucene search solr information-retrieval collective-intelligence

我正面临基于用户点击日志排序Solr结果的问题.我希望首先获得更多访问结果.有谁知道如何在Solr中配置或实现此类属性?

非常感谢你.

Yav*_*var 6

好问题.您的问题可以被视为经典的集体智慧或群体智慧问题.第一步是为某个查询点击url的计数,即对于每个查询,url对,你将为这个元组保留一个计数.每次用户点击特定网址时,计数都会增加1.作为第二步,Solr会根据每个查询的排名和相关性算法(例如LCS,向量空间等)返回结果,url对返回给你一个公式,将一个特定值(基于点击次数)添加到Solr为文档给出的等级,然后你必须根据获得的总排名显示结果.

获得文档的总排名= Solr给出的排名+点击排名您给出的数字值.

例如,当您搜索"iphone计划"时,Solr会按照从高排到低的顺序返回以下链接:

  1. 苹果
  2. AT&T
  3. 亚马逊

现在你检查每个查询,网址对,即{"iphone计划",Apple} {"iphone计划",AT&T} {"iphone计划",亚马逊}点击次数,你就可以知道查询的点击次数AT&T与Apple相比是最高的.通过使用用户定义的公式并为点击提供一些权重,您可以重新启动上述内容并更改其显示顺序.

但请注意,您设计的公式不应该对垃圾邮件发送者有利,他们可以通过对特定文档进行大量点击来更改网站的整个排名内容(假设使用机器人:))

以上是逻辑.现在有两种方法可以实现上述目的:

  1. 更改Lucene相似度类(http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/all/org/apache/lucene/search/Similarity.html)即首先了解Lucene如何进行排名然后将您的模块嵌入其中

  2. 在Solr之上将其作为独立例程实现.

注意:请记住,如果您有大量/大数据,获取查询,网址对的计数并不容易,在这种情况下,您需要编写一些map reduce作业才能完成此操作.