Elasticsearch搜索查询结果优化:提取嵌套字段替换JSON对象
Elasticsearch查询结果字段提取方案
要实现将[Business Unit]字段从嵌套对象转为仅返回其Code字段值的需求,可采用以下两种方案:
方案一:查询时通过脚本构造返回结构
使用script_fields自定义返回字段结构,同时保留原文档的元数据(_index、_type、_id、_score):
GET /77/_search { "_source": false, "script_fields": { "_index": {"script": "return params._index"}, "_type": {"script": "return params._type"}, "_id": {"script": "return params._id"}, "_score": {"script": "return params._score"}, "_source": { "script": { "source": """ Map source = new HashMap(); source.put('[ReferenceNo]', doc['[ReferenceNo]'].value); source.put('[Business Unit]', doc['[Business Unit].Code'].value); return source; """ } } } }
该查询会返回与你期望一致的结果,注意需确保字段的索引映射支持通过doc访问(若字段为嵌套类型,需调整脚本中的路径写法)。
方案二:应用层结果处理
若不想修改查询语句,可在获取Elasticsearch返回结果后,在业务代码中遍历hits数组,替换目标字段的值,示例伪代码:
# 示例Python处理逻辑 for hit in search_results['hits']['hits']: if '[Business Unit]' in hit['_source']: hit['_source']['[Business Unit]'] = hit['_source']['[Business Unit]']['Code']
这种方式无需修改Elasticsearch配置或查询逻辑,适合快速实现需求。
内容的提问来源于stack exchange,提问作者user3866099
相关产品推荐
相关产品推荐

