gpt4 book ai didi

elasticsearch - 获取在ElasticSearch中进行特定购买次数的用户数

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

我的商店中的每个用户都可以进行多次购买,并且有关购买的信息存储在ElasticSearch 6.5中。

我想计算在我的商店中进行特定购买次数的用户数量-一到三张。我们将基于一个名为user_purchases的文档进行搜索,如下所示:

{
"user_id" : 1,
"total_value" : 111.56,
"total_products" : 2
}

如果要使用SQL进行此操作,我们将执行以下操作:
SELECT COUNT(u.id) FROM users u WHERE u.id IN (SELECT up.user_id FROM user_purchases up WHERE COUNT(up.id) = 1 GROUP BY up.user_id);

SELECT COUNT(u.id) FROM users u WHERE u.id IN (SELECT up.user_id FROM user_purchases up WHERE COUNT(up.id) = 3 GROUP BY up.user_id);

我已经使用ElasticSearch已有一段时间了,但是这种情况让我很头疼。我试图找到一些类似的案例,但google合作不力,ES文档没有太多示例可以弄清楚。

似乎最好分别为每个查询三个单独的查询- 一个或三个-大小写,并且可能使用无痛+ ctx脚本,但我只是不知道从哪里开始。我做了一些稍微复杂的事情,“如果包含此操作然后执行该操作”,但这将花费我很长时间。

如果有人可以提供帮助,并提供使用搜索或multisearch API(或其他任何可行的API)进行查询的示例,我将非常感激!

最佳答案

如果您在terms字段上运行 user_id aggregation,您将获得购买最多的用户到只购买一次的用户的存储桶列表。然后,您可以使用 bucket_selector pipeline aggregation过滤掉所有不需要的存储桶:

{
"size": 0,
"aggs": {
"users": {
"terms": {
"field": "user_id"
},
"aggs": {
"1_3": {
"bucket_selector": {
"buckets_path": {
"nb_purchases": "_count"
},
"script": "params.nb_purchases == 1 || params.nb_purchases == 3"
}
}
}
}
}
}

关于elasticsearch - 获取在ElasticSearch中进行特定购买次数的用户数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56112844/

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