如何在Elasticsearch中获取数组字段的最后一个元素并返回计算字段
Elasticsearch 新增计算字段查询方案
你可以使用 Elasticsearch 内置的 script_fields 特性实现需求,查询时既保留原始文档数据,同时返回payments数组最后一项的计算字段,完整查询语句如下:
GET customers-v1/customer/123 { "_source": true, "script_fields": { "last_payment": { "script": { "lang": "painless", "source": "if(params._source.payments != null && params._source.payments.size() > 0) { return params._source.payments.get(params._source.payments.size()-1); } return null;" } } } }
参数说明:
_source: true配置用来保留返回原始的文档所有字段,不会因为添加了脚本字段就默认屏蔽原始数据- 脚本采用ES默认的painless语法,先做了非空和长度判断,避免数组为空时抛出异常,再通过
size()-1取数组最后一个元素 - 新增的计算字段名为
last_payment,你可以根据业务需求自行修改字段名
查询返回结果会在原有结构基础上新增fields字段,里面就包含你需要的payments数组最后一项的取值。
内容的提问来源于stack exchange,提问作者adrian oviedo
相关产品推荐
相关产品推荐

