gpt4 book ai didi

elasticsearch - Elasticsearch 中嵌套的对象聚合数组

转载 作者:行者123 更新时间:2023-12-02 18:38:47 24 4
gpt4 key购买 nike

Elasticsearch 中的文档是这样索引的

文档 1

{
"task_completed": 10
"tagged_object": [
{
"category": "cat",
"count": 10
},
{
"category": "cars",
"count": 20
}
]
}

文档 2

{
"task_completed": 50
"tagged_object": [
{
"category": "cars",
"count": 100
},
{
"category": "dog",
"count": 5
}
]
}

如您所见,类别键的值本质上是动态的。我想对按类别分组执行类似 SQL 中的聚合,并返回每个类别的计数总和。

在上面的例子中,聚合应该返回猫:10,汽车:120和狗:5

想知道如何在 Elasticsearch 中编写此聚合查询(如果可能)。提前致谢。

最佳答案

您可以使用 nested 获得所需的结果, terms , 和 sum聚合。

添加带有索引映射、搜索查询和搜索结果的工作示例

索引映射:

{
"mappings": {
"properties": {
"tagged_object": {
"type": "nested"
}
}
}
}

搜索查询:

{
"size": 0,
"aggs": {
"resellers": {
"nested": {
"path": "tagged_object"
},
"aggs": {
"books": {
"terms": {
"field": "tagged_object.category.keyword"
},
"aggs":{
"sum_of_count":{
"sum":{
"field":"tagged_object.count"
}
}
}
}
}
}
}
}

搜索结果:

"aggregations": {
"resellers": {
"doc_count": 4,
"books": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "cars",
"doc_count": 2,
"sum_of_count": {
"value": 120.0
}
},
{
"key": "cat",
"doc_count": 1,
"sum_of_count": {
"value": 10.0
}
},
{
"key": "dog",
"doc_count": 1,
"sum_of_count": {
"value": 5.0
}
}
]
}
}
}

关于elasticsearch - Elasticsearch 中嵌套的对象聚合数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68359948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com