如何规范化ElasticSearch得分?

4
对于我的项目,我需要找出哪些搜索结果被认为是“好”的匹配。目前,得分因查询而异,因此需要以某种方式对它们进行规范化。规范化分数将允许选择高于给定阈值的结果。
我为Lucene找到了几个解决方案:
- 如何规范化solr / lucene得分? - http://wiki.apache.org/lucene-java/ScoresAsPercentages 我该如何继续并将相同的技术应用于ElasticSearch?或者也许已经有一个与ES一起使用的解决方案可以进行得分规范化吗?

你能展示一个需要对分数进行归一化的查询吗? - DrTyrsa
1
你提供的两个解决方案都强烈建议你“不要这样做”。这是一个解决方案,你可以直接应用到 Elasticsearch 上,并且你也应该这样做。 - femtoRgon
1
如果您仍然遇到问题,您可能会对此答案中的分数归一化解决方案感兴趣。 - Pierre-Nicolas Mougel
@Pierre-NicolasMougel建议也看一下这个答案:https://dev59.com/VbTma4cB1Zd3GeqP2zZl#56389964 - Datageek
2个回答

3
根据我的搜索结果,似乎没有一种方法可以从Elastic中获取标准化评分。您需要通过两个查询来实现。第一次查询是试验查询(最好只返回1个结果,但所有属性都相同),它将为您提取 max_score 。然后,您可以执行实际的查询并使用 functional_score 对得分进行标准化。在调用 function_score 时将先前作为试验查询部分的 max_score 传递给参数,并将其用于标准化每个得分。 参考:这篇文章摘录

0

有点晚了。 我们需要为一个使用案例规范化ES分数。因此,我们编写了一个插件,覆盖了ES Rescorer功能。

支持最小-最大值和z得分。

Github:https://github.com/bkatwal/elasticsearch-score-normalizer

用法: 最小-最大值

{
  "query": {
    ... some query
  },
  "from" : 0,
  "size" : 50,
  "rescore" : {
      "score_normalizer" : {
        "normalizer_type" : "min_max",
        "min_score" : 1,
        "max_score" : 10
      }
   }
}

使用z-分数:


  "query": {
    ... some query
  },
  "from" : 0,
  "size" : 50,
  "rescore" : {
      "score_normalizer" : {
        "normalizer_type" : "z_score",
        "min_score" : 1,
        "factor" : 0.6,
        "factor_mode" : "increase_by_percent"
      }
   }
}

请查看 Github 存储库以获取完整的文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接