es将相同的provCode 相同的entryPage 的文档的dispCategoryCode聚合到一起 用逗号分割
时间: 2024-10-08 18:09:46 浏览: 22
es file river同步文档
在Elasticsearch(ES)中,如果你想对具有相同`provCode`和`entryPage`的文档进行聚合,并将它们的`dispCategoryCode`值汇总并用逗号分隔,你可以使用聚合功能(Aggregation)。这里是一个简单的示例,假设你正在操作一个名为`your_index`的索引:
```json
GET your_index/_search
{
"size": 0,
"aggs": {
"category_codes_by_prov_and_entry_page": {
"terms": {
"field": "provCode",
"size": 1000, // 如果文档太多,可以设置合适的大小
"script_fields": {
"dispCategoryCodes": {
"script": {
"source": """
var categoryCodes = [];
for (var doc in params.group) {
if (!Array.isArray(doc.dispCategoryCode)) {
doc.dispCategoryCode = [doc.dispCategoryCode];
}
categoryCodes = categoryCodes.concat(doc.dispCategoryCode);
}
return String.join(",", categoryCodes.distinct());
"""
},
"params": { "group": "{{doc}}" } // 这里引用了当前组内的所有文档
}
}
}
}
}
}
```
这个查询首先会对`provCode`字段进行分组,然后对于每个组,它会执行一个脚本,遍历所有文档,收集`dispCategoryCode`,去除重复项后,再用逗号连接成字符串。
阅读全文