elasticsearch - 按多个字段聚合并在 ElasticSearch 中计数
问题描述
我有一个包含以下数据的索引:
{
"_index": "recommender",
"_type": "doc",
"_id": "AWZl8H042YsxaK6w02jY",
"_score": 1,
"_source": {
"user": "102",
"song": "1",
"created": "12-28-2018 19:12:12"
}
},
{
"_index": "recommender",
"_type": "doc",
"_id": "AWZl8PM5zqmU2ne0dY9W",
"_score": 1,
"_source": {
"user": "102",
"song": "5",
"created": "01-1-2018 23:12:12"
}
},
{
"_index": "recommender",
"_type": "doc",
"_id": "AWZl8PPx2YsxaK6w02jc",
"_score": 1,
"_source": {
"user": "102",
"song": "5",
"created": "01-1-2018 23:12:12"
}
},
{
"_index": "recommender",
"_type": "doc",
"_id": "AWZl8Xdm2YsxaK6w02jf",
"_score": 1,
"_source": {
"user": "102",
"song": "5",
"created": "06-10-2018 15:16:12"
}
},
{
"_index": "recommender",
"_type": "doc",
"_id": "AWZl8XgvzqmU2ne0dY9a",
"_score": 1,
"_source": {
"user": "102",
"song": "5",
"created": "06-10-2018 15:16:12"
}
},
{
"_index": "recommender",
"_type": "doc",
"_id": "AWZl8ZLwzqmU2ne0dY9d",
"_score": 1,
"_source": {
"user": "103",
"song": "5",
"created": "06-10-2018 15:16:12"
}
},
{
"_index": "recommender",
"_type": "doc",
"_id": "AWZl8aF1zqmU2ne0dY9e",
"_score": 1,
"_source": {
"user": "103",
"song": "6",
"created": "06-10-2018 15:16:12"
}
},
{
"_index": "recommender",
"_type": "doc",
"_id": "AWZl79hm2YsxaK6w02jW",
"_score": 1,
"_source": {
"user": "102",
"song": "1",
"created": "1-02-2018 13:12:12"
}
},
{
"_index": "recommender",
"_type": "doc",
"_id": "AWZl8O1nzqmU2ne0dY9U",
"_score": 1,
"_source": {
"user": "102",
"song": "5",
"created": "01-1-2018 23:12:12"
}
},
{
"_index": "recommender",
"_type": "doc",
"_id": "AWZl8O9F2YsxaK6w02ja",
"_score": 1,
"_source": {
"user": "102",
"song": "5",
"created": "01-1-2018 23:12:12"
}
}
我想计算每个用户的歌曲数量。所以我可以得到数据,用户总共102
播放歌曲的次数。5
4
我是苹果来数数。用户或没有。歌曲分开。但是,不能按歌曲和用户聚合在一起。
POST /eventindex/_search?size=0
{
"aggs" : {
"doc" : {
"terms" : { "field" : "user" }
}
}
}
我读到我可以使用子聚合并尝试了这样的东西:
POST /recommender/_search?size=0
{
"aggs": {
"doc": {
"nested": {
"path": "docs"
},
"aggs": {
"name": {
"terms": {
"field": "user"
},
"aggs": {
"name": {
"terms": {
"field": "song"
}
}
}
}
}
}
}
}
}
然而这并没有奏效。解决这个问题的正确方法是什么?
解决方案
希望这可以解决您的问题
POST /recommender/_search?size=0
{
"aggs": {
"song": {
"terms": {
"field": "song"
},
"aggs": {
"user": {
"terms": {
"field": "user"
}
}
}
}
}
}
此查询将输出每首歌曲的个人用户计数。
推荐阅读
- prometheus - 格式化 PromQL 值
- c# - LiveCharts 上的自定义类?
- powershell - 在多个窗口中打开网站并使用 powershell 向下滚动它们
- oracle-apex - Oracle APEX:如何更改交互式网格中开关列的值(使用动态操作 - JavaScript)?
- vb.net - 暂停执行的线程,然后重新使用同一个线程
- php - 表单提交后Codeigniter 4错误404路由有问题
- xml - 我可以在 XML 中使用相同名称和相同值的属性吗?
- class - Flutter 中的单例析构函数
- sql - 在 SQL developer 和 SSIS ODBC 连接中定义、初始化和使用变量
- javascript - document.body.removeEventListener 不适用于删除按键事件的侦听器