我想知道是否有办法知道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并没有证明真正的相关性.
不存在“真正相关性”这样的东西,这就是为什么最高分没有标准化为 1.0。根据您提供给 Solr 的参数(例如如何对各个字段相互进行评分),可以认为事物或多或少相关。在这种情况下,“60% 相关性”到底意味着什么?查询之间的分数(通常)不具有可比性,并且会根据索引的内容而变化(如果对具有相同术语的新文档建立索引,则如果再次运行,前一个查询的分数可能会降低)。
如果您想优先考虑精确匹配,请添加一个带有 KeywordTokenizer 和 LowercaseField 的字段,并对该字段进行更高的评分(通过 qf=)。如果大小写很重要,请改用 StrField(这只会为您提供完全精确的匹配)并为该字段评分更高。
如果您希望要求所有术语都存在,请使用q.op=AND,如果所有字段都不存在,则不会给出任何命中。如果您想要进行更高级的匹配,请使用mm参数来准确说明需要匹配的术语数量(可以以百分比、间隔内等形式进行)。
当您使用 dismax 或 edismax 查询处理程序时,这些设置是相关的,这听起来就像您在问题中所做的那样。
| 归档时间: |
|
| 查看次数: |
843 次 |
| 最近记录: |