【ElasticSearch】ElasticSearch查询指定的字段
ElasticSearch查询过滤掉指定的字段
普通查询
普通查询的查询结果包含索引中所有的字段
Kibana DSL
GET index_user_latest/_search { "query": { "match_all": {} } }
结果如下
"_source" : { "dbId" : 111111, "userId" : 1111, "nnNumber" : 222222, "nickName" : "香气袭人的热带鱼", "countryCode" : 86, "telNum" : "188888888888" }
过滤查询
过滤查询的查询结果包含指定的字段(通过_source.includes属性控制) 以及 或需要排除的字段 通过(_source.excludes控制)
Kibana DSL:
获取指定的字段
GET index_user_latest/_search { "_source": { "includes":["dbId","userId"] }, "query": { "match_all": {} } }
结果如下
"_source" : { "dbId" : 111111, "userId" : 1111 }
排除指定的字段,其他字段保留
GET index_user_latest/_search { "_source": { "excludes": ["nickName"] }, "query": { "match_all": {} } }
结果如下
"_source" : { "dbId" : 111111, "userId" : 1111, "nnNumber" : 222222, "countryCode" : 86, "telNum" : "188888888888" }
注意如果include 和 exclude同时使用,则会互相影响
JavaAPI
通过withSourceFilter去控制
源码如下
public class FetchSourceFilter implements SourceFilter { private final String[] includes; //需要被查询的字段 private final String[] excludes; //不需要被查询的字段(被过滤的子字段) public FetchSourceFilter(final String[] includes, final String[] excludes) { this.includes = includes; this.excludes = excludes; } @Override public String[] getIncludes() { return includes; } @Override public String[] getExcludes() { return excludes; } }
示例代码如下
这里使用的是spring-data-elasticsearch客户端
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder() .withSourceFilter(new FetchSourceFilter(new String[]{"dbId","userId"},new String[0])) .withQuery(builder) .withPageable(PageRequest.of(request.getPageNo() - 1, request.getPageSize())); NativeSearchQuery queryBuilder = nativeSearchQueryBuilder.build(); Page<UserEs> esPage = this.userRepository.search(queryBuilder);

浙公网安备 33010602011771号