ES基础查询

ES查询

QueryBuilders

  • QueryBuilders是es中的查询条件构造器,用来生成一些QueryBuilder的查询类,如常用的TermQueryBuilder(精确匹配)、IdsQueryBuilder(根据ID查询)、BoolQueryBuilder(布尔查询)、MatchAllQueryBuilder(全匹配查询)、WildcardQueryBuilder(通配符查询)等等

  • QueryBuilders的部分代码如下:

  • /**
     * A static factory for simple "import static" usage.
     */
    public abstract class QueryBuilders {
    
        /**
         * A query that matches on all documents.
         */
        public static MatchAllQueryBuilder matchAllQuery() {
            return new MatchAllQueryBuilder();
        }
    
        /**
         * Creates a match query with type "BOOLEAN" for the provided field name and text.
         *
         * @param name The field name.
         * @param text The query text (to be analyzed).
         */
        public static MatchQueryBuilder matchQuery(String name, Object text) {
            return new MatchQueryBuilder(name, text);
        }
        ......
    }
    
  • 使用举例:MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();

  • 在这里插入图片描述

  • 上述的这些QueryBuilder的查询类均实现了QueryBuilder接口

  • 这样不管是用原生的ES API还是使用 ES的Repository进行查询,只要封装相应的查询类然后传入参数就可以了。

  • 之前已经写过ES API的各种QueryBuilder查询了,这里不再重复。

NativeSearchQuery

  • NativeSearchQuery是一个原生的查询条件类,用来和ES的一些原生查询方法进行搭配,实现一些比较复杂的查询。

  • 在这里插入图片描述

  • NativeSearchQuery由NativeSearchQueryBuilder条件构造类生成,可以调用NativeSearchQueryBuilder的方法添加相应的查询条件,最终通过build()方法返回一个NativeSearchQuery的实体类。

  • 在这里插入图片描述

withQuery

  • withQuery函数支持参数类型为QueryBuilder的实现类,用于组装相应的查询条件类

  • 函数原型:

  • public NativeSearchQueryBuilder withQuery(QueryBuilder queryBuilder) {
       this.queryBuilder = queryBuilder;
       return this;
    }
    
  • 使用:

  • NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.boolQuery()
                        .should(QueryBuilders.termQuery("title", "开发"))
                        .should(QueryBuilders.termQuery("title", "青春"))
                        .mustNot(QueryBuilders.termQuery("title", "潮头"))
                )
                .withSort(SortBuilders.fieldSort("id").order(SortOrder.DESC))
                .withPageable(PageRequest.of(0, 50))
                .build();
    

withSort

  • withSort函数作用是将查询结果进行排序

  • 函数原型:

  • public NativeSearchQueryBuilder withSort(SortBuilder sortBuilder) {
       this.sortBuilders.add(sortBuilder);
       return this;
    }
    
  • SortBuilder抽象类的实现类由SortBuilders类生成,

  • 使用:

  • NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.boolQuery()
                        .should(QueryBuilders.termQuery("title", "开发"))
                        .should(QueryBuilders.termQuery("title", "青春"))
                        .mustNot(QueryBuilders.termQuery("title", "潮头"))
                )
                .withSort(SortBuilders.fieldSort("id").order(SortOrder.DESC))
                .withPageable(PageRequest.of(0, 50))
                .build();
    
  • fieldSort指定排序的字段名,order是SortBuilder实现类中的方法,指定排序顺序。

  • withSort可指定多个。

withPageable

  • withPageable用于分页查询

  • 函数原型:

  • public NativeSearchQueryBuilder withPageable(Pageable pageable) {
       this.pageable = pageable;
       return this;
    }
    
  • 参数Pageable接口实现类可由PageRequest.of()函数生成

在这里插入图片描述

  • PageRequest常用函数:

  • public static PageRequest of(int page, int size) {
       return of(page, size, Sort.unsorted());
    }
    public static PageRequest of(int page, int size, Sort sort) {
    		return new PageRequest(page, size, sort);
    }
    
  • 使用:

  • NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
    // 查询语句,分页
    nativeSearchQueryBuilder.withPageable(PageRequest.of(startPage - 1, pageSize));
    

withSourceFilter

  • withSourceFilter的作用是用来指定返回哪些字段

  • 函数原型:

  • public NativeSearchQueryBuilder withSourceFilter(SourceFilter sourceFilter) {
             this.sourceFilter = sourceFilter;
             return this;
    }
    
  • 参数为SourceFilter接口的实现类,SourceFilter只有一个实现类FetchSourceFilter

  • /**
     * SourceFilter implementation for providing includes and excludes.
     *
     * @Author Jon Tsiros
     */
    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;
       }
    }
    
  • 构造函数的初始化需要两个String类型的数组,includes表示返回需要包含哪些字段,excludes表示不包含

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值