You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:22:07