Apache Solr 中的相关性反馈
Posted
技术标签:
【中文标题】Apache Solr 中的相关性反馈【英文标题】:Relevance feedback in Apache Solr 【发布时间】:2013-06-05 04:09:11 【问题描述】:我想在Solr 中实现relevance feedback。 Solr 已经有一个More Like This 功能:给定一个单个文档,返回一组按与单个输入文档的相似度排列的相似文档。是否可以将 Solr 的 More Like This 功能配置为更像那些?换句话说:给定一组文档,返回与输入集相似的文档列表(按相似度排序)。
根据this question的回答将Solr的More Like This变成More Like 可以通过以下方式完成:
-
获取返回指定文档的查询结果集的url。例如,url
http://solrServer:8983/solr/select?q=id:1%20id:2%20id:3
返回对查询 id:1 id:2 id:3
的响应,这实际上是文档 1、2、3 的串联。
把上面的url(指定文档的串联)放在More Like This handler的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's More Like 此功能由The Rocchio Algorithm 的变体实现:它采用(单个)输入文档的前 20 个术语(具有最高 TF-IDF 值的术语)并将这些术语用作修改后的查询,根据他们的 TF-IDF 提升。我正在寻找一种方法来配置 Solr 的 More Like This 功能,以将多个文档作为其输入,从每个输入文档中提取前 n 个术语,并使用根据其 TF-IDF 提升的这些术语查询索引。
是否可以将 More Like This 配置为这种行为方式?如果没有,在 Solr 中实现相关反馈的最佳方式是什么?
【问题讨论】:
【参考方案1】:很遗憾,无法以这种方式配置 MLT 处理程序。
一种方法是实现自定义SearchComponent 并将其注册到(专用)SearchHadler。
我已经做过类似的事情,如果你看一下 MLT 组件的original implementation,这很容易。
最困难的部分是来自不同shard服务器的结果的同步,但是如果你不使用shards可以跳过。
我还强烈建议在您的实现中使用您自己的参数,以防止与其他组件发生冲突。
【讨论】:
以上是关于Apache Solr 中的相关性反馈的主要内容,如果未能解决你的问题,请参考以下文章