Apache Solr奇怪的搜索相关性排名

时间:2017-01-29 04:41:07

标签: solr

我正在使用Apache Solr对我的某些计算机内部文档(存储在数据库中)进行搜索查询。对于通过降序相关性排序的搜索查询,我得到了非常奇怪的结果。例如,我的搜索查询中有5个单词。 4个结果中最相关的是一个多次只包含其中2个单词的文档。包含所有单词的唯一文档最后是死的。如果我以正确的方式更改单词,那么我会看到一个更好的排名顺序,正确的文章是最相关的。我该如何解决这个问题?在我看来,包含所有5个单词的文档应该排名高于仅包含其中两个单词的文档(更频繁地说明)。

1 个答案:

答案 0 :(得分:2)

Solr所做的是一个名为TF-IDF的正确算法。 因此,在您的情况下,订单可以用这个公式来解释。

其中一个可能的解决方案是忽略TF-IDF得分并将文档中的一个命中计为一个,而不仅仅是5个匹配的文档将获得5分,4个匹配将获得4个等等。常量分数查询可以执行特技:

  

使用^ =创建常量分数查询,其中   将整个子句设置为任何文档的指定分数   匹配该条款。当你只关心时,这是可取的   匹配特定子句,不需要其他相关因素   例如术语频率(术语出现在术语中的次数)   字段)或逆文档频率(整个索引的度量)   一个词在一个领域中的罕见程度)。

查询的可能示例:

text:Julian^=1 text:Cribb^=1 text:EPA^=1 text:peak^=1 text:oil^=1

需要一些脚本编写的另一个解决方案就是这样,首先你需要一个查询,你会要求所有包含完全 5个元素的内容,例如+Julian +Cribb +EPA +peak +oil,那么你将对5个中的4个元素的组合做同样的事情,如果我没有弄错,它将需要额外的5个查询并退回,直到你检查所有内容直到1个强制性条款。然后,您将获得完整的结果,如果您认为5个匹配的文档总是优于4个匹配的文档,那么您只需要normalise个结果或只是连接它们。这个解决方案的缺点 - 很多查询,需要以编程方式运行它们,一些脚本会有所帮助,规范化并不明显。优点 - 你将保留TF-IDF和匹配条款的想法。