【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);

 



posted @ 2022-07-26 20:25  听风是雨  阅读(3215)  评论(0)    收藏  举报
/* 看板娘 */