elasticsearch 实现 GROUP_CONCAT()
时间: 2023-12-13 20:31:20 浏览: 131
Elasticsearch中没有GROUP_CONCAT函数,但是可以通过terms聚合和script脚本来实现类似的功能。具体步骤如下:
1.使用terms聚合将数据按照指定字段分组。
2.在聚合中使用script脚本来实现对分组内数据的拼接。
下面是一个示例代码:
```
POST /index/_search
{
"size": 0,
"aggs": {
"group_by_school": {
"terms": {
"field": "school.keyword",
"size": 10
},
"aggs": {
"concat_names": {
"scripted_metric": {
"init_script": "state.names = []",
"map_script": "state.names.add(doc['name.keyword'].value)",
"combine_script": "return String.join(',', state.names)",
"reduce_script": "def names = []; for (s in states) { names.addAll(s.names) }; return String.join(',', names)"
}
}
}
}
}
}
```
上述代码中,我们首先使用terms聚合将数据按照school字段分组,然后在聚合中使用scripted_metric脚本来实现对分组内name字段的拼接。具体来说,我们在init_script中初始化一个空数组state.names,然后在map_script中将每个文档的name.keyword字段值添加到数组中,最后在combine_script中将数组中的值用逗号连接起来。reduce_script用于将多个分片的结果合并起来。
阅读全文