按共享字段值对聚合桶进行排序

时间:2018-09-13 10:46:27

标签: elasticsearch elasticsearch-aggregation

我想基于组字段G对文档进行分组。我使用Elastic文档中描述的“字段聚合”策略按照存储文档的最大分数对存储桶进行排序(在Elastic中称为“字段折叠示例” doc),就像这样:

{
  "query": {
    "match": {
      "body": "elections"
    }
  },
  "aggs": {
    "top_sites": {
      "terms": {
        "field": "domain",
        "order": {
          "top_hit": "desc"
        }
      },
      "aggs": {
        "top_tags_hits": {
          "top_hits": {}
        },
        "top_hit" : {
          "max": {
            "script": {
              "source": "_score"
            }
          }
        }
      }
    }
  }
}

此查询还包括每个存储区中的热门匹配。 如果最高得分在存储分区中不是唯一的,我想指定一个第二列。从应用程序上下文中,我知道在存储桶中,所有文档都为字段F共享相同的值。因此,应将此字段用作第二列。

如何在Elastic中实现呢?有没有一种方法可以使顶部匹配子聚集中的字段在封闭的聚集中可用?

有什么想法吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

看来可以。在此page中,列出了用于术语聚合的所有排序策略。

它们是多条件存储桶排序的示例:

  

通过提供一个   订单条件数组,例如:

GET /_search
{
    "aggs" : {
        "countries" : {
            "terms" : {
                "field" : "artist.country",
                "order" : [ { "rock>playback_stats.avg" : "desc" }, { "_count" : "desc" } ]
            },
            "aggs" : {
                "rock" : {
                    "filter" : { "term" : { "genre" : "rock" }},
                    "aggs" : {
                        "playback_stats" : { "stats" : { "field" : "play_count" }}
                    }
                }
            }
        }
    }
}