跳到主要内容

结果读取

未指定字段投影的文档查询通过 _DOC 返回原始文档。默认 preRead=true 时,还会展开字段,供实体映射使用。

读取指定字段

_source 指定明确字段名时,结果只包含这些字段,顺序与列表一致;可直接使用标量、列表或 Pairs 读取方法。此方式也适用于 preRead=false

注意

普通字段投影需要读取索引 mapping 的权限。binary 字段可读取为 byte[]datedate_nanos 可读取为 Timestamp。 关闭 doc_values 或使用自定义日期格式时,无法规范化的值按原值返回;需要日期转换时使用 ISO 日期或开启 doc_values

List<String> names = jdbc.queryForList(
"POST /user_info/_search {\"_source\": [\"name\"], \"query\": {\"term\": {\"uid\": ?}}}",
new Object[] { "1001" }, String.class);

通配符、排除式 _source 或未声明字段列表时,保留下面的文档结果形式。

按名称读取字段

文档结果的第一列是 _ID。读取业务字段时指定列名:

List<String> names = jdbc.queryForList(
"POST /user_info/_search {\"query\":{\"term\":{\"uid\": ?}}}",
new Object[] { "1001" },
(rs, rowNum) -> rs.getString("name"));

关闭预读(preRead=false)后,改为读取原始文档,不再依赖展开列:

List<String> documents = jdbc.queryForList(
"POST /user_info/_search {\"size\":10,\"query\":{\"match_all\":{}}}",
(rs, rowNum) -> rs.getString("_DOC"));

读取嵌套对象和数组时,getString() 返回 JSON;显式字段投影的 getObject() 返回 MapList。实体使用对象属性时可配置 JSON 映射。

限制读取量

驱动只读取当前 REST 响应。使用 size 或分页查询限制范围;queryForList 不会自动取完全部搜索页。

JSON 到对象的映射见JSON 字段映射