lucene 如何规范化ElasticSearch分数?

2o7dmzc5  于 2022-11-07  发布在  Lucene
关注(0)|答案(2)|浏览(168)

对于我的项目,我需要找出哪些搜索结果被认为是“好的”匹配。目前,分数因查询的不同而变化很大,因此需要以某种方式对其进行规范化。规范化分数将允许选择高于给定阈值的结果。
我为Lucene找到了几个解决方案:

我该如何继续将同样的技术应用到ElasticSearch中呢?或者,也许已经有一个解决方案可以与ES一起工作来实现分数标准化?

lpwwtiir

lpwwtiir1#

就我所搜索的,没有办法从弹性中得到一个标准化的分数。你必须通过两个查询来破解它。(优选地具有尺寸1,但其余所有属性都相同),它将为您获取max_score。然后,您可以拍摄实际的查询,并使用functional_score来规范化得分。将您在params中作为引导查询的一部分获得的max_score传递给function_score,并使用它来规范化每个分数。请参阅:本文摘录

brccelvz

brccelvz2#

现在有点晚了。我们需要对我们的一个用例的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存储库。

相关问题