gpt4 book ai didi

elasticsearch - 如何在Elasticsearch中对同一文档进行最大日期汇总?

转载 作者:行者123 更新时间:2023-12-03 01:27:16 24 4
gpt4 key购买 nike

我有数百万个带有这样一个块的文档:

{
"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 ,以识别哪个是最大购买日期,但是我真的找不到方法(如果这确实是最好的方法)类(class))。

有什么建议吗?

最佳答案

我假设您的字段useraccountid是唯一的。您将需要进行术语聚合,在内部进行最大聚合。我可以想到:

"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。建议仅将 terms聚合返回直到10,000个结果。

如果您需要更多,可以玩 Composite aggregation。这样,您可以分页结果,并且群集不会出现性能问题。

如果您想使用Composite,我可以想到以下几点:
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个元素的页面中分页结果。看看 After parameter for the composite aggregation

希望这会有所帮助! :D

关于elasticsearch - 如何在Elasticsearch中对同一文档进行最大日期汇总?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57762494/

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