Jelajahi Sumber

通用getDocument增加页码过大处理

wangyc 7 tahun lalu
induk
melakukan
3d24339996

+ 21 - 3
mall-search/src/main/java/com/uas/search/util/SearchUtils.java

@@ -326,9 +326,27 @@ public class SearchUtils {
 				if ((sPage.getPage() - 1) * sPage.getSize() >= totalHits) {
 					sPage.setPage((int) Math.ceil(totalHits / (1.0 * sPage.getSize())));
 					if (sPage.getPage() > 1) {
-						previousTopDocs = sort == null ? indexSearcher.search(query, (sPage.getPage() - 2) * sPage.getSize()) : indexSearcher.search(query, (sPage.getPage() - 2) * sPage.getSize(), sort);
-						ScoreDoc[] previousScoreDocs = previousTopDocs.scoreDocs;
-						topDocs = sort == null ? indexSearcher.searchAfter(previousScoreDocs[previousScoreDocs.length - 1], query, sPage.getSize()) : indexSearcher.searchAfter(previousScoreDocs[previousScoreDocs.length - 1], query, sPage.getSize(), sort);
+						int totalPage = (int) Math.ceil(totalHits / (1.0 * sPage.getSize()));
+						if (totalPage == 0) {
+							sPage.setTotalElement(0);
+							sPage.setTotalPage(0);
+							return sPage;
+						}
+						if (sPage.getPage() > totalPage) {
+							sPage.setPage(totalPage);
+							if (totalPage == 1) {
+								sPage.setFirst(true);
+								topDocs = previousTopDocs;
+							} else {
+								previousTopDocs = sort == null ? indexSearcher.search(query, (sPage.getPage() - 2) * sPage.getSize()) : indexSearcher.search(query, (sPage.getPage() - 2) * sPage.getSize(), sort);
+								ScoreDoc[] previousScoreDocs = previousTopDocs.scoreDocs;
+								topDocs = sort == null ? indexSearcher.searchAfter(previousScoreDocs[previousScoreDocs.length - 1], query, sPage.getSize()) : indexSearcher.searchAfter(previousScoreDocs[previousScoreDocs.length - 1], query, sPage.getSize(), sort);
+							}
+						} else {
+							previousTopDocs = sort == null ? indexSearcher.search(query, (sPage.getPage() - 2) * sPage.getSize()) : indexSearcher.search(query, (sPage.getPage() - 2) * sPage.getSize(), sort);
+							ScoreDoc[] previousScoreDocs = previousTopDocs.scoreDocs;
+							topDocs = sort == null ? indexSearcher.searchAfter(previousScoreDocs[previousScoreDocs.length - 1], query, sPage.getSize()) : indexSearcher.searchAfter(previousScoreDocs[previousScoreDocs.length - 1], query, sPage.getSize(), sort);
+						}
 					} else {
 						sPage.setFirst(true);
 						topDocs = previousTopDocs;