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。
ICP备案:
公安联网备案: