Solr标准化分数

时间:2016-02-22 09:30:47

标签: 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

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

2 个答案:

答案 0 :(得分:0)

没有“真正的相关性”这一点,这就是为什么最高分没有归一化为1.0的原因。根据您给Solr的参数(例如如何相互评分各个字段),可以认为事情或多或少相关。在这种情况下,“60%相关性”真正意味着什么?查询之间的分数(通常)不具有可比性,并且将根据索引的内容而更改(如果索引具有相同术语的新文档,则如果再次运行,则可能会降低先前查询的分数。)

如果要确定完全匹配的优先级,请添加一个包含KeywordTokenizer和LowercaseField的字段,并将该字段评分得更高(通过qf =)。如果情况重要,请使用StrField(这将只为您提供完美的完全匹配)并将该字段评分更高。

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

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

答案 1 :(得分:0)

为了做你所要求的(不考虑你为什么这么做),你可以:

  1. 使用highlighting返回文档中匹配的内容
  2. 将查询字符串与突出显示的片段进行比较,并验证它是否完美匹配
  3. 注意事项:

    1. 如果你使用词干分析器等,完全匹配可能意味着只匹配一个术语的一部分。所以你不能只使用字符串比较,你需要先通过每个分析链运行查询字符串和片段(通过查询分析查询字符串,通过索引分析进行分片​​)
    2. 根据突出显示类型,您可能需要在字段上使用某些功能。