Return 第一个 'term' 来自 Elasticsearch 中每个聚合的命中

Return first 'term' hit from each aggregation in Elasticsearch

使用 Elasticsearch 聚合,是否可以 return 仅从每个聚合中找到第一个匹配项?我没有在 Elastic 文档中找到此功能的详细信息。

{
took: 1,
timed_out: false,
_shards: {
  total: 5,
  successful: 5,
  failed: 0
},
hits: {
  total: 2,
  max_score: 0.7380617,
hits: [
  {},
  {}
]
}
}

我使用 top_hits 聚合来确保每个聚合的第一个命中是相关的命中,所以如果我可以 return 只有每个聚合的第一个命中一个单独的列表。这完全可能吗,还是需要以编程方式遍历聚合查询结果?

执行聚合时,您希望检查结果中的 aggregations json,而不是 hits。由于您已经知道 Top hits Aggregation,请注意它提供了一个 size 选项,因此只需将其设置为 1 并且每个桶都会有一个命中。

在这个例子中,我通过索引中一个名为 catL1 的字段进行聚合,top-categories 是我为聚合选择的名称:

{
    "aggs": {
        "top-categories": {
            "terms": {
                "field": "catL1"
            },
            "aggs": {
                "top-categories_hits": {
                    "top_hits": {
                        "size" : 1
                    }
                }
            }
        }
    }
}

现在我的结果是:

{
    "took": 33,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 1248280,
        "max_score": 1,
        "hits": [
            ...
        ]
    },
    "aggregations": {
        "top-categories": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 217939,
            "buckets": [
                {
                    "key": "category1",
                    "doc_count": 412189,
                    "top-categories_hits": {
                        "hits": {
                            "total": 412189,
                            "max_score": 1,
                            "hits": [
                                ONLY_1_HIT
                            ]
                        }
                    }
                },
 {
                    "key": "category2",
                    "doc_count": 3000189,
                    "top-categories_hits": {
                        "hits": {
                            "total": 3000189,
                            "max_score": 1,
                            "hits": [
                                ONLY_1_HIT
                            ]
                        }
                    }
                }

            ]
        }
    }
}

您可以看到有一个名为 aggregations 的 json,它每个桶只包含一个命中(我用占位符替换了命中)

编辑: 当然,您可能也对总数 hits 感兴趣,但我的意思是 aggregations 是您在此问题的上下文中要查找的内容