問題描述
- 測試代碼
@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"}