3

我正面临根据用户点击日志对 Solr 结果进行排序的问题。我希望更多的访问结果是第一位的。有谁知道如何在 Solr 中配置或实现此类属性?

非常感谢。

4

1 回答 1

6

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

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

例如,当您搜索“iphone plan”时,Solr 按从高到低的顺序返回以下链接:

  1. 苹果
  2. 美国电话电报公司
  3. 亚马逊

现在您检查每个查询,url 对,即 {"iphone plan", Apple} {"iphone plan", AT&T} {"iphone plan", Amazon} 点击次数,您就会知道查询的点击次数与苹果相比,AT&T 最高。通过使用您的用户定义的公式并对点击量给予一定的权重,您可以重新对上述内容进行排名并更改它们的显示顺序。

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

以上就是逻辑。现在有两种方法可以实现上述内容:

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

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

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

于 2012-03-29T07:31:47.077 回答