首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Elasticsearch中对同一文档进行最大日期聚合?

如何在Elasticsearch中对同一文档进行最大日期聚合?
EN

Stack Overflow用户
提问于 2019-09-02 20:40:07
回答 1查看 517关注 0票数 0

我有数以百万计的文件,像这样的块:

代码语言:javascript
代码运行次数:0
运行
复制
{
  "useraccountid": 123456,
  "purchases_history" : {
    "last_updated" : "Sat Apr 27 13:41:46 UTC 2019",
    "purchases" : [
      {
        "purchase_id" : 19854284,
        "purchase_date" : "Jan 11, 2017 7:53:35 PM"
      },
      {
        "purchase_id" : 19854285,
        "purchase_date" : "Jan 12, 2017 7:53:35 PM"
      },
      {
        "purchase_id" : 19854286,
        "purchase_date" : "Jan 13, 2017 7:53:35 PM"
      }
    ]
  }
}

我想弄清楚我怎样才能做到这样:

SELECT useraccountid, max(purchases_history.purchases.purchase_date) FROM my_index GROUP BY useraccountid

我只找到了最大聚合,但它聚集在索引中的所有文档上,但这不是我所需要的。我需要找到每个文件的最大购买日期。我相信必须有一种方法来迭代每个文档的每个路径purchases_history.purchases.purchase_date,以确定哪一个是最大购买日期,但我真的找不出怎么做(当然,这是最好的方法)。

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-02 22:15:22

我假设您的字段useraccountid是唯一的。你必须做一个术语聚合,在里面做最大聚合。我可以这样想:

代码语言:javascript
代码运行次数:0
运行
复制
"aggs":{
    "unique_user_ids":{
        "terms":{
            "field": "useraccountid",
            "size": 10000 #Default value is 10
        },
        "aggs":{
            "max_date":{
                "max":{
                    "field": "purchases_history.purchases.purchase_date"
                }
            }
        }
    }
}

aggregations字段中,您将首先看到唯一的用户ID和内部,以及它们的最大日期。

请注意10,000的大小。建议只在10,000个结果之前返回terms聚合。

如果你需要更多,你可以玩复合聚集。这样,您可以对结果进行分页,您的集群将不会出现性能问题。

如果您想玩复合游戏,我可以想到以下几点:

代码语言:javascript
代码运行次数:0
运行
复制
GET /_search
{
    "aggs" : {
        "my_buckets": {
            "composite" : {
                "size": 10000, #Default set to 10
                "sources" : [
                    { "user_id": { "terms": {"field": "useraccountid" } } },
                    { "product": { "max": { "field": "purchases_history.purchases.purchase_date" } } }
                ]
            }
        }
    }
}

运行查询后,它将返回一个名为after_key的字段。使用该字段,您可以在包含10,000个元素的页面中对结果进行分页。看一看复合聚集的后置参数

希望这能帮上忙!

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

https://stackoverflow.com/questions/57762494

复制
相关文章

相似问题

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