问题描述
- 测试代码
@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"}