Elasticsearch分页查询的2种实现方式
分页查询有两种实现方式,分别是:
QueryBuilders 包含的一些方法与 AND、OR、NOT 一一对应:
- 一种是使用 Spring Data 自带的分页方案;
- 另一种是 QueryBuilder 自行组织查询条件,再封装进行查询。
Pageable分页
我们首先来看 Spring Data 自带的分页方案,也就是 Pageable 分页,测试代码如下:@Test public void fetchPageCustomers() { Sort sort = new Sort(Sort.Direction.DESC, "address.keyword"); Pageable pageable = PageRequest.of(0, 10, sort); Page<Customer> customers=repository.findByAddress("北京", pageable); System.out.println("Page customers "+customers.getContent().toString()); }上面的示例分页查询地址包含“北京”的客户信息,并且按照地址进行排序,每页显示 10 条。需要注意的是,排序时使用的关键字是 address.keyword,而不是 address,属性后带“.keyword”代表精确匹配。
QueryBuilder分页
除了 Spring Data 自带的 Pageable 分页之外,我们也可以使用 QueryBuilder 来构建分页查询。示例代码如下:@@Test public void fetchPage2Customers() { QueryBuilder customerQuery = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("address", "北京")); Page<Customer> page = repository.search(customerQuery, PageRequest.of(0, 10)); System.out.println("Page customers "+page.getContent().toString()); }使用 QueryBuilder 可以构建多条件查询,再结合 PageRequest,最后调用 search( ) 方法完成分页查询。
QueryBuilders 包含的一些方法与 AND、OR、NOT 一一对应:
- Must(QueryBuilders)对应 AND;
- mustNot(QueryBuilders)对应 NOT;
- should 对应 OR。