ElasticSearch按最高命中率分数的聚合顺序

bbmckpt7  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(1)|浏览(192)

我想按TOP_HIT的DOCK.SCORE订购桶。我目前的实现如下所示。

group_by_iid: {
    terms: {
      field: 'iid',
      order: { max_score: 'desc' },
      size: 0
    },
    aggs: {
      max_score: { max: { script: 'doc.score' } },
      top_hit: {
        top_hits: {
          sort: [{ source_priority: { order: 'desc' } }],
          size: 1
        }
      }
    }
  }

这是错误的,因为存储桶是根据它们的最高分数进行排序的,而不是它们最高的SOURCE_PRIORITY文档的分数。有没有办法解决这个问题?

eanckbw9

eanckbw91#

我也有同样的问题,我解决这个问题的方法是在文档分数上引入一个子聚合。然后,在我的外部聚合中,我按max_core聚合的名称进行了排序。

GET /my-index/my-type/_search

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "searchTerm": {
              "query": "style",
              "type": "boolean"
            }
          }
        },
        {
          "flt_field": {
            "searchTerm": {
              "like_text": "style"
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "group_by_target_url": {
      "terms": {
        "field": "targetUrl",
        "order": {
          "max_score": "desc"
        }
      },
      "aggs": {
        "max_score": {
          "max": {
            "script": "_score"
          }
        }
      }
    }
  }
}

我按照这个链接上的说明操作:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html

相关问题