Elasticsearch 7.10.2布尔字段查询结果转Yes/No方案咨询
无需修改索引数据的布尔字段转换方案(ES 7.10.2)
方案一:查询时使用脚本字段(Script Fields)
这是ES 7.10.2原生支持的方案,无需修改索引结构或原始数据,仅在查询阶段动态转换字段值。
DSL 查询示例
GET /your_index/_search { "_source": ["your_boolean_field"], // 可选:保留原布尔字段,无需则移除该配置 "script_fields": { "converted_field": { "script": { "source": """ def val = doc['your_boolean_field'].value; if (val == null) { return 'No'; } return val ? 'Yes' : 'No'; """ } } } }
- 逻辑说明:通过
doc['your_boolean_field'].value获取字段值,判断空值后返回对应字符串——true转"Yes",false或空值转"No"。 - 若无需返回原布尔字段,直接删除
_source配置即可;需要同时保留原字段和转换后字段则保留该配置。
Java 客户端代码示例(RestHighLevelClient)
SearchRequest searchRequest = new SearchRequest("your_index"); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); // 可选:指定返回原布尔字段(不需要则注释该行) sourceBuilder.fetchSource(new String[]{"your_boolean_field"}, new String[]{}); // 定义转换脚本并添加脚本字段 Script script = new Script(ScriptType.INLINE, "painless", "def val = doc['your_boolean_field'].value; if (val == null) { return 'No'; } return val ? 'Yes' : 'No';", Collections.emptyMap()); sourceBuilder.scriptField("converted_field", script); searchRequest.source(sourceBuilder); // 执行查询(需确保RestHighLevelClient已正确初始化) SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
补充注意事项
- 脚本中字段名称需与索引中布尔字段名完全一致,ES字段名区分大小写。
- 脚本会自动处理字段不存在的文档,这类场景下返回"No"。
- 脚本字段为查询时动态计算,不会修改索引内的原始数据,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Lalit Chattar
相关产品推荐
相关产品推荐

