按内部多桶聚合中的源字段对多桶聚合进行排序

时间:2020-01-10 15:34:23

标签: elasticsearch elasticsearch-6

TL; DR::在外部多桶聚合中使用内部多桶聚合(top_hitssize: 1)可以进行排序内桶中的数据将外聚合的桶放在哪儿?


我有以下索引映射

{
  "parent": {
    "properties": {
      "children": {
        "type": "nested",
        "properties": {
          "child_id": { "type": "keyword" }
        }
      }
    }
  }
}

(数据中的每个子对象)还具有属性last_modified: Dateother_property: String

我需要获取(所有父母但没有父母的)孩子名单,但每个last_modified的孩子只有child_id个最新的孩子。然后,我需要对这些结果进行排序和分页,以返回可管理的数据量。

我能够使用nestedtermstop_hitsbucket_sort聚合的组合来获取数据并对其进行分页(并获得总计用cardinality来计数)

{
  "query": {
    "match_all": {}
  },
  "size": 0,
  "aggs": {
    "children": {
        "nested": {
            "path": "children"
        },
        "aggs": {
            "totalCount": {
                "cardinality": {
                    "field": "children.child_id"
                }
            },
            "oneChildPerId": {
                "terms": {
                    "field": "children.child_id",
                    "order": { "_term": "asc" },
                    "size": 1000000
                },
                "aggs": {
                    "lastModified": {
                        "top_hits": {
                            "_source": [
                                "children.other_property"
                            ],
                            "sort": {
                                "children.last_modified": {
                                    "order": "desc"
                                }
                            },
                            "size": 1
                        }
                    },
                    "paginate": {
                        "bucket_sort": {
                            "from": 36,
                            "size": 3
                        }
                    }
                }
            }
        }
    }
  }
}

但是经过一天的研究和实验,我们似乎还不知道如何根据oneChildPerId来分类other_property聚合的存储桶通过lastModified聚合检索的单个孩子。

是否有一种方法可以根据嵌套的多桶聚合结果对多桶聚合进行排序?


我尝试过的事情:

  • 我以为我也可以使用bucket_sort,但显然,它的sort仅可用于包含其他单桶聚合并以精确的结尾的路径。
  • 我试图找到一种方法以某种方式将lastModified的1结果多桶转换为单桶,但没有找到任何东西。

我正在使用ElasticSearch 6.8.6(在ES 5.x和更早版本中没有bucket_sort和类似工具)。

0 个答案:

没有答案