我想知道是否有办法知道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
这里的问题是第一个结果得分1.0(仅因为它是第一个得到较高solr得分的结果,但它无法证明它是完全匹配的),而在我看来,它应该是〜0.5,因为它不完全匹配。 我想知道我得到的结果是否真的相关,并且只考虑最相关的"结果 - 例如:只有得分>的结果0.6。 但我现在不能这样做,因为0.6并没有证明真正的相关性。
答案 0 :(得分:0)
没有“真正的相关性”这一点,这就是为什么最高分没有归一化为1.0的原因。根据您给Solr的参数(例如如何相互评分各个字段),可以认为事情或多或少相关。在这种情况下,“60%相关性”真正意味着什么?查询之间的分数(通常)不具有可比性,并且将根据索引的内容而更改(如果索引具有相同术语的新文档,则如果再次运行,则可能会降低先前查询的分数。)
如果要确定完全匹配的优先级,请添加一个包含KeywordTokenizer和LowercaseField的字段,并将该字段评分得更高(通过qf =)。如果情况重要,请使用StrField(这将只为您提供完美的完全匹配)并将该字段评分更高。
如果您想要要求所有条款,请使用q.op=AND
,如果所有字段都不存在,则不会给出任何匹配。如果您想进行更高级的匹配,请使用mm
参数准确说明需要匹配的术语数量(您可以在一个时间间隔内以百分比形式执行此操作等)。
当您使用dismax或edismax查询处理程序时,这些设置是相关的,这听起来就像您从问题中所做的那样。
答案 1 :(得分:0)
为了做你所要求的(不考虑你为什么这么做),你可以:
注意事项: