首页 > 解决方案 > ElasticSearch:从布尔查询中的每个查询中获取单独的分数

问题描述

假设我有一个复合布尔查询,其中包含各种“必须”和“应该”语句,每个语句可能包含不同的叶查询,包括“多重匹配”和“匹配短语”查询,如下所示。

如何从打包到单个查询中的单个查询中获得分数?我知道一种方法可能是将其分解为多个查询,执行每个查询,然后在代码级别(而不是查询级别)聚合结果。但是,我认为效率较低,另外,我失去了 ElasticSearch 的排序/分页/.... 功能。

我认为“解释 API”对我也没有用,因为它提供了非常低级的评分细节(效率低且难以解析),而我只需要知道每个特定叶查询的分数(我也已经命名他们)

如果我在任何术语(例如复合,叶子)上错了,请纠正我。大图是如何从布尔查询中的每个子查询中获取单独的分数。

PS:我在 bool query 中遇到了不同的分数函数。但是,它不会返回分数。如果我将我的查询包装在“function_score”中,我希望评分为默认值,但获取单个分数以响应查询。

请看下面的片段:

{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "...",
            "fields": [
              "field1^3",
              "field2^5"
            ],
            "_name": "must1_mm",
            "boost": 3
          }
        }
      ],
      "should": [
        {
          "multi_match": {
            "query": "...",
            "fields": [
              "field3^2",
              "field4^5"
            ],
            "boost": 2,
            "_name": "should1_mm",
            "boost": 2
          }
        },
          {
          "match_phrase": {
            "field5": {
              "_name": "phrase1",
              "boost": 1.5,
              "query": "..."
            }
          }
        },
        {
          "match_phrase": {
            "field6": {
              "_name": "phrase2",
              "boost": 1,
              "query": "..."
            }
          }
        }
      ]
    }
  }
}```


标签: elasticsearchinformation-retrieval

解决方案


推荐阅读