Solr归一化分数

Zde*_*dev 7 solr

我想知道是否有办法知道solr响应中的第一个结果是否与我的查询完全匹配?例如,我正在搜索文字:"iphone 6s 64GB gold"

我得到了3个结果:

1)第一个带有" iphone 6s 64GB"得分的结果:187.86491

2)第二个结果,单词" iphone 6s"得分:170.36568

3)第三个结果,单词" iphone"得分:136.68152

当我将分数标准化时,我得到了这些新分数:

1) score 1.0
2) score 0.92
3) score 0.66
Run Code Online (Sandbox Code Playgroud)

这里的问题是,第一个结果得分为1.0(仅因为它是第一个得到较高solr得分的结果,但它无法证明它是完全匹配),而在我看来,它应该是〜0.5因为它不是完全匹配.我想知道我得到的结果是否真的相关,并且仅采用"最相关"的结果 - 例如:只有得分> 0.6的结果.但我现在不能这样做,因为0.6并没有证明真正的相关性.

Mat*_*ndh 1

不存在“真正相关性”这样的东西,这就是为什么最高分没有标准化为 1.0。根据您提供给 Solr 的参数(例如如何对各个字段相互进行评分),可以认为事物或多或少相关。在这种情况下,“60% 相关性”到底意味着什么?查询之间的分数(通常)不具有可比性,并且会根据索引的内容而变化(如果对具有相同术语的新文档建立索引,则如果再次运行,前一个查询的分数可能会降低)。

如果您想优先考虑精确匹配,请添加一个带有 KeywordTokenizer 和 LowercaseField 的字段,并对该字段进行更高的评分(通过 qf=)。如果大小写很重要,请改用 StrField(这只会为您提供完全精确的匹配)并为该字段评分更高。

如果您希望要求所有术语都存在,请使用q.op=AND,如果所有字段都不存在,则不会给出任何命中。如果您想要进行更高级的匹配,请使用mm参数来准确说明需要匹配的术语数量(可以以百分比、间隔内等形式进行)。

当您使用 dismax 或 edismax 查询处理程序时,这些设置是相关的,这听起来就像您在问题中所做的那样。