我们正在运行SOLR 4.3.1,我有一个关于控制SOLR如何对某些文档进行评分的问题。
在某些情况下,我们索引了质量"差"的文档-主体(在这种情况下是描述字段)可能只有3或4个单词。其他文档可能有更好的描述。当执行搜索,并且在"好"(较长)和"差"(较短)文档中都找到搜索词时,问题就出现了。
SOLR似乎在较短的文档中获得更高的匹配分数,这是有道理的,因为搜索的术语可能只有3或4个单词中的1个,所以它的百分比高于具有较长描述的文档,其中在100个单词中只找到1或2个匹配(例如)。
是否有可能以某种方式扣分或降低非常短的文档的分数?我知道一些非常短的文档可能是可以的,但一般来说,在我们的情况下,非常短的文档通常是"质量差"的。
建议吗?
我们正在使用edismax搜索。
谢谢,比尔
BM25 Similarity允许您调整长度规范化对文档评分的影响。默认情况下,正如您所观察到的那样,较短的字段内容在相同数量的术语匹配下排名高于较长的字段内容。
你听起来像是想要中和,或者可能逆转这个长度规范化过程,以便所有长度的字段内容被认为具有相同数量的术语匹配。
两个调优参数为:
k1
控制词频的饱和点(用于当您希望重复的词频对分数有较大/较小的影响时),和
b
(您想要的),控制内容长度对比赛得分的影响。
如果您想深入了解,这是BM25上的一个很好的阅读:http://opensourceconnections.com/blog/2015/10/16/bm25-the-next-generation-of-lucene-relevation/
要使其工作,您需要将BM25Similarity添加到SOLR schema.xml
中,无论是全局的,还是嵌套在描述字段的字段类型定义中(建议,因为您可能不希望对所有字段进行此处理)。
<similarity class="solr.BM25SimilarityFactory">
<str name="k1">1.2</str>
<str name="b">0.75</str>
</similarity>
(显示默认值)
如果您将b
降低到0.0
,您将有效地消除长度规范化的影响,这意味着当该字段是唯一考虑评分的因素时,在同一字段中匹配相同单个查询词的两个文档将始终获得相同的评分(无论字段长度如何)。
您需要重新加载您的配置并重新索引您的文档,以使此更改生效
你也可以尝试负b
(-0.75
也许?),因为这个假设应该工作奖励较长的文档,但我还没有在当前的实现中验证这一点,所以请回来,如果你得到负b
的工作方式你需要。