@Test
public void customAdvanceSelect() {
// 构造查询条件
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
// 添加基本的分词条件
queryBuilder.withQuery(QueryBuilders.matchQuery("title", "你的文档"));
// 排序条件(降序)
queryBuilder.withSort(SortBuilders.fieldSort("id").order(SortOrder.ASC));
// 分页条件
queryBuilder.withPageable(PageRequest.of(0, 15));
// 根据条件查询
Page<Article> articlesESEntities = articleRepositories.search(queryBuilder.build());
logger.info("【文章】总条数 = {}", articlesESEntities.getTotalElements());
logger.info("【文章】总页数 = {}", articlesESEntities.getTotalPages());
articlesESEntities.forEach(article -> logger.info("【文章】= {}", JSON.toJSONString(article)));
}
2020-06-12 10:14:16.217 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】总条数 = 99
2020-06-12 10:14:16.218 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】总页数 = 1
2020-06-12 10:14:16.385 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容1","id":1,"title":"新添加的文档1"}
2020-06-12 10:14:16.386 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容2","id":2,"title":"新添加的文档2"}
2020-06-12 10:14:16.387 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容3","id":3,"title":"新添加的文档3"}
2020-06-12 10:14:16.387 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容4","id":4,"title":"新添加的文档4"}
2020-06-12 10:14:16.387 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容5","id":5,"title":"新添加的文档5"}
2020-06-12 10:14:16.388 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容6","id":6,"title":"新添加的文档6"}
2020-06-12 10:14:16.388 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容7","id":7,"title":"新添加的文档7"}
2020-06-12 10:14:16.389 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容8","id":8,"title":"新添加的文档8"}
2020-06-12 10:14:16.389 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容9","id":9,"title":"新添加的文档9"}
2020-06-12 10:14:16.390 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容10","id":10,"title":"新添加的文档10"}
2020-06-12 10:14:16.390 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容11","id":11,"title":"新添加的文档11"}
2020-06-12 10:14:16.391 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容12","id":12,"title":"新添加的文档12"}
2020-06-12 10:14:16.391 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容13","id":13,"title":"新添加的文档13"}
2020-06-12 10:14:16.391 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容14","id":14,"title":"新添加的文档14"}
2020-06-12 10:14:16.391 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容15","id":15,"title":"新添加的文档15"}
可以看到查询到的总数是对的但是,分页后的为1(随意修改分页的size,结果始终为1),明显存在问题。看源码:
public int getTotalPages() { return this.getSize() == 0 ? 1 : (int)Math.ceil((double)this.total / (double)this.getSize()); }
分析应该是获取到的分页size为0导致的问题,可能是由于版本不兼容的问题
修改pom文件
升级springboot的版本:2.0.1.RELEASE升级为2.0.4.RELEASE ,并将 实体类中属性的注解@Field(type = FieldType.Text中的常量首字母大写(Keyword、Date等都一样)
<!-- 修改前 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/>
</parent>
<!-- 修改后 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/>
</parent>
// 修改前
@Id //主键
private Long id;
@Field(type = FieldType.text, index = true, store = true, analyzer = "ik_smart")
private String title; // 标题
@Field(type = FieldType.text, index = true, store = true, analyzer = "ik_smart")
private String content;// 内容
// 修改后
@Id //主键
private Long id;
@Field(type = FieldType.Text, index = true, store = true, analyzer = "ik_smart")
private String title; // 标题
@Field(type = FieldType.Text, index = true, store = true, analyzer = "ik_smart")
private String content;// 内容
结果
2020-06-12 10:14:16.217 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】总条数 = 99
2020-06-12 10:14:16.218 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】总页数 = 7
2020-06-12 10:14:16.385 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容1","id":1,"title":"新添加的文档1"}
2020-06-12 10:14:16.386 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容2","id":2,"title":"新添加的文档2"}
2020-06-12 10:14:16.387 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容3","id":3,"title":"新添加的文档3"}
2020-06-12 10:14:16.387 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容4","id":4,"title":"新添加的文档4"}
2020-06-12 10:14:16.387 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容5","id":5,"title":"新添加的文档5"}
2020-06-12 10:14:16.388 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容6","id":6,"title":"新添加的文档6"}
2020-06-12 10:14:16.388 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容7","id":7,"title":"新添加的文档7"}
2020-06-12 10:14:16.389 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容8","id":8,"title":"新添加的文档8"}
2020-06-12 10:14:16.389 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容9","id":9,"title":"新添加的文档9"}
2020-06-12 10:14:16.390 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容10","id":10,"title":"新添加的文档10"}
2020-06-12 10:14:16.390 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容11","id":11,"title":"新添加的文档11"}
2020-06-12 10:14:16.391 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容12","id":12,"title":"新添加的文档12"}
2020-06-12 10:14:16.391 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容13","id":13,"title":"新添加的文档13"}
2020-06-12 10:14:16.391 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容14","id":14,"title":"新添加的文档14"}
2020-06-12 10:14:16.391 INFO 14604 --- [ main] c.e.t.e.SpringDataElasticSearchTest : 【文章】= {"content":"新添加的文档内容15","id":15,"title":"新添加的文档15"}