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表示不包含