Elasticsearch script_fields中如何访问_routing、_parent等元字段?
嘿,我知道你为啥碰壁了——你用params对象访问元字段的思路不对,params是用来传递自定义脚本参数的,可不是获取文档元数据的正确途径!
正确访问_routing、_parent等元字段的方法
要在script_fields里拿到_routing、_parent这类元字段,得用doc对象来访问,它是Painless脚本里专门用来获取当前文档索引字段(包括元字段)的入口。
示例:获取_routing字段
直接通过doc['_routing'].value就能拿到路由值:
{ "query": { "match_all": {} }, "script_fields": { "custom_routing": { "script": { "lang": "painless", "source": "doc['_routing'].value" } } } }
示例:获取_parent字段
如果你还在使用支持_parent字段的旧版本Elasticsearch(提醒下:现在官方更推荐用join数据类型替代_parent,有条件的话建议升级适配),同样用doc对象就能访问:
{ "query": { "match_all": {} }, "script_fields": { "custom_parent": { "script": { "lang": "painless", "source": "doc['_parent'].value" } } } }
额外小提示
- 确认元字段已被索引:像
_routing这类常用元字段默认是开启索引的,但如果有特殊配置,得先确认它能被doc对象访问到。 - 如果只是单纯获取元字段不需要脚本处理,直接用
fields参数会更高效:{ "query": { "match_all": {} }, "fields": ["_routing", "_parent"] }
内容的提问来源于stack exchange,提问作者bornTalented
相关产品推荐
相关产品推荐

