首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要对文档内部数组对象- ElasticSearch进行聚合

需要对文档内部数组对象- ElasticSearch进行聚合
EN

Stack Overflow用户
提问于 2018-11-28 03:38:31
回答 2查看 238关注 0票数 1

我试图对以下文档进行聚合

代码语言:javascript
复制
{
  "pid": 900000,
  "mid": 9000,
  "cid": 90,
  "bid": 1000,
  "gmv": 1000000,
  "vol": 200,
  "data": [
    {
      "date": "25-11-2018",
      "gmv": 100000,
      "vol": 20
    },
    {
      "date": "24-11-2018",
      "gmv": 100000,
      "vol": 20
    },
    {
      "date": "23-11-2018",
      "gmv": 100000,
      "vol": 20
    }
  ]
}

这里需要做的分析是:

  1. 在所有文档上筛选中间或/和/和
  2. 对data.date进行7天的滤波,并对每个pid进行超过该范围的data.vol之和。
  3. 按desc顺序对前一步获得的文件进行排序。
  4. 将这些结果按pid分组。

这意味着,我们正在试图获得最高的产品的数量(数量)的总和,在一个日期范围内,具体的cid/mid。

PID指产品ID,中间指商家ID,CID指的是类别ID。

EN

回答 2

Stack Overflow用户

发布于 2018-11-28 08:11:48

首先,需要更改映射以在嵌套字段上运行查询。将字段“data”的类型更改为“嵌套”。

然后,可以使用筛选器中的范围查询和mid/cid上的术语筛选器对数据进行筛选。一旦得到正确的数据集,就可以在pid上按照vol之和的子聚合进行聚合。

以下是以下查询。

代码语言:javascript
复制
{
    "query": {
        "bool": {
            "filter": [
                {
                    "bool": {
                        "must": [
                            {
                                "range": {
                                    "data.date": {
                                        "gte": "28-11-2018",
                                        "lte": "25-11-2018"
                                    }
                                }
                            },
                            {
                                "must": [
                                    {
                                        "terms": {
                                            "mid": [
                                                "9000"
                                            ]
                                        }
                                    }
                                ]
                            }
                        ]
                    }
                }
            ]
        }
    },
    "aggs": {
        "AGG_PID": {
            "terms": {
                "field": "pid",
                "size": 0,
                "order": {
                    "TOTAL_SUM": "desc"
                },
                "min_doc_count": 1
            },
            "aggs": {
                "TOTAL_SUM": {
                    "sum": {
                        "field": "data.vol"
                    }
                }
            }
        }
    }
}

您可以相应地修改查询。希望这会有帮助。

票数 1
EN

Stack Overflow用户

发布于 2018-11-28 18:28:33

请查找嵌套聚合查询,该查询按"vol“对每一桶"pid”进行排序。可以在查询部件中添加任意数量的筛选器。

{ "size": 0, "query": { "bool": { "must": [ { "term": { "mid": "2" } } ] } }, "aggs": { "top_products_sorted_by_order_volume": { "terms": { "field": "pid", "order": { "nested_data_object>order_volume_by_range>order_volume_sum": "desc" } }, "aggs": { "nested_data_object": { "nested": { "path": "data" }, "aggs": { "order_volume_by_range": { "filter": { "range": { "data.date": { "gte": "2018-11-26", "lte": "2018-11-27" } } }, "aggs": { "order_volume_sum": { "sum": { "field": "data.ord_vol" } } } } } } } } } }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53511748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档