Apache Solr中的相关性反馈

sna*_*ile 15 lucene solr information-retrieval

我想在Solr中实现相关性反馈.Solr中已经有更多类似这样的功能:给定一个单一的文件,返回一组按照相似性排名的单输入文件类似的文件的.是否可以将Solr的更像这个功能配置为更像那些?换句话说:给定一组文档,返回类似于输入集的文档列表(按相似性排序).

根据这个问题的答案,将Solr的更多内容变得更像那些可以通过以下方式完成:

  1. 获取返回指定文档的查询结果集的url.例如,url http://solrServer:8983/solr/select?q=id:1%20id:2%20id:3返回对查询的响应,该查询id:1 id:2 id:3实际上是文档1,2,3的串联.
  2. 将上面的url(指定文档的串联)放在url.streamMore Like This处理程序的GET参数中:http://solrServer:8983/solr/mlt?mlt.fl=text&mlt.mintf=0&stream.url=http://solrServer:8983/solr/select%3Fq=id:1%20id:2%20id:3.现在,More Like This处理程序将文档1,2和3的串联视为单个输入文档,并返回与串联类似的排序文档集.

这是一个非常糟糕的实现:像一个大文档那样处理输入文档集会区分短文档,因为短文档占据了整个大文档的一小部分.

Solr的更多喜欢此功能是通过Rocchio算法的变体实现的:它采用(单个)输入文档的前20个术语(具有最高TF-IDF值的术语)并使用这些术语作为修改后的查询,根据他们的TF-IDF.我正在寻找一种方法来配置Solr的更像这个功能,以多个文档作为输入,从每个输入文档中提取前n个术语,并根据TF-IDF提升这些术语来查询索引.

是否可以将More Like This配置为这样?如果没有,在Solr中实施相关性反馈的最佳方式是什么?

kro*_*mit 2

不幸的是,无法以这种方式配置 MLT 处理程序。

一种方法是实现自定义SearchComponent并将其注册到(专用)SearchHadler

我已经做过类似的事情,如果您查看MLT 组件的原始实现,这非常容易。

最困难的部分是不同分片服务器结果的同步,但如果不使用分片,可以跳过。

我还强烈建议在实现中使用您自己的参数,以防止与其他组件发生冲突。