背景需求是只需要文档的_id字段,并且_id组装成一个数组。
在搜索请求中使用 script_fields 来整理 _id 为数组输出:
POST goods_info/_search?size=0
{"query": {"term": {"brand": {"value": "MGC"}}},"_source":false,"aggs": {"ids_as_array": {"scripted_metric": {"init_script": "state.ids = []","map_script": "state.ids.add(doc['_id'].value)","combine_script": "return state.ids","reduce_script": "def ids = []; for (s in states) { ids.addAll(s) } return ids"}}}}
代码说明:
size: 0
:表示不需要实际返回任何文档,因为我们只关心聚合结果。scripted_metric
:一个聚合类型,允许在多个阶段中使用脚本来聚合数据。init_script
:在每个分片上初始化状态。在这里,我们初始化了一个空的列表 ids。map_script
:在每个文档上执行。这里,我们将文档的 _id 添加到 ids 列表中。combine_script
:在每个分片上执行,用于合并每个分片的结果。在这里,我们直接返回 ids 列表。reduce_script
:在所有分片结果上执行,用于合并所有分片的结果。在这里,我们将所有分片的 ids 列表合并成一个大的列表。
输出结果: