我想在relevance feedback中实施Solr。 Solr已经具有More Like This功能:给定单个文档,返回一组与单个输入文档相似的类似文档。是否可以将Solr的更像这个功能配置为更喜欢那些?换句话说:给定一组文档,返回类似于输入集的文档列表(按相似度排序)。
根据this question的回答,将Solr的更多内容变得更像这样可以通过以下方式完成:
http://solrServer:8983/solr/select?q=id:1%20id:2%20id:3
会返回对查询id:1 id:2 id:3
的响应,这实际上是文档1,2,3的连接。url.stream
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更喜欢此功能由The Rocchio Algorithm的变体实现:它采用(单个)输入文档的前20个术语(具有最高TF-IDF值的术语)并将这些术语用作修改后的查询,根据他们的TF-IDF提升。我正在寻找一种方法来配置Solr的更像这个功能,以多个文档作为输入,从每个输入文档中提取前n个术语,并根据TF-IDF提升这些术语来查询索引。
是否可以将More Like This配置为这样?如果没有,在Solr中实施相关反馈的最佳方式是什么?
答案 0 :(得分:2)
不幸的是,无法以这种方式配置MLT处理程序。
一种方法是实施自定义SearchComponent并将其注册到(专用)SearchHadler。
我已经做了类似的事情,如果你看一下MLT组件的original implementation就很容易了。
最困难的部分是同步来自不同分片服务器的结果,但如果不使用分片则可以跳过它。
我还强烈建议您在实现中使用您自己的参数,以防止与其他组件发生冲突。