Bladeren bron

处理翻页错误

wangyc 7 jaren geleden
bovenliggende
commit
b32fe6a210

+ 18 - 9
mall-search/src/main/java/com/uas/search/service/impl/SearchServiceImpl.java

@@ -1723,20 +1723,29 @@ public class SearchServiceImpl implements SearchService {
 					previousTopDocs = indexSearcher.search(query, duplicateFilter, (sPage.getPage() - 1) * sPage.getSize(), sort);
 				}
 				int totalHits = previousTopDocs.totalHits;
-				ScoreDoc[] previousScoreDocs = previousTopDocs.scoreDocs;
+				// 页码过大返回上一页
 				if ((sPage.getPage() - 1) * size >= totalHits) {
-					sPage.setPage(1);
-                    sPage.setFirst(true);
-                    if (sort == null) {
-                        topDocs = duplicateFilter == null ? indexSearcher.search(query, sPage.getSize()) : indexSearcher.search(query, duplicateFilter, sPage.getSize());
+					sPage.setPage((int) Math.ceil(totalHits / (1.0 * sPage.getSize())));
+                    if (sPage.getPage() > 1) {
+                        if (sort == null) {
+                            previousTopDocs = duplicateFilter == null ? indexSearcher.search(query, (((sPage.getPage() - 2) < 1) ? 1 : (sPage.getPage() - 2)) * sPage.getSize()) : indexSearcher.search(query, duplicateFilter, (((sPage.getPage() - 2) < 1) ? 1 : (sPage.getPage() - 2)) * sPage.getSize());
+                        } else {
+                            previousTopDocs = duplicateFilter == null ? indexSearcher.search(query, (((sPage.getPage() - 2) < 1) ? 1 : (sPage.getPage() - 2)) * sPage.getSize(), sort) : indexSearcher.search(query, duplicateFilter, (((sPage.getPage() - 2) < 1) ? 1 : (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 {
-                        topDocs = duplicateFilter == null ? indexSearcher.search(query, sPage.getSize(), sort) : indexSearcher.search(query, duplicateFilter, sPage.getSize(), sort);
+                        sPage.setFirst(true);
+                        if (sort == null) {
+                            topDocs = duplicateFilter == null ? indexSearcher.search(query, sPage.getSize()) : indexSearcher.search(query, duplicateFilter, sPage.getSize());
+                        } else {
+                            topDocs = duplicateFilter == null ? indexSearcher.search(query, sPage.getSize(), sort) : indexSearcher.search(query, duplicateFilter, sPage.getSize(), sort);
+                        }
                     }
 				} else {
-                    topDocs = sort == null ? indexSearcher.searchAfter(previousScoreDocs[previousScoreDocs.length - 1], query, sPage.getSize()) :
-                        indexSearcher.searchAfter(previousScoreDocs[previousScoreDocs.length - 1], query, 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);
 				if (sort == null) {

+ 12 - 6
mall-search/src/main/java/com/uas/search/util/SearchUtils.java

@@ -291,8 +291,6 @@ public class SearchUtils {
 	 *            页码
 	 * @param size
 	 *            页大小
-	 * @param duplicateFeild
-	 * 			  去重字段
 	 * @return
 	 */
 	public static SPage<Document> getDocuments(String tableName, Query query, Sort sort, Integer page, Integer size) throws IOException {
@@ -325,12 +323,20 @@ public class SearchUtils {
 				previousTopDocs = sort == null ? indexSearcher.search(query, (sPage.getPage() - 1) * sPage.getSize()) :
 						indexSearcher.search(query, (sPage.getPage() - 1) * sPage.getSize(), sort);
 				int totalHits = previousTopDocs.totalHits;
-				ScoreDoc[] previousScoreDocs = previousTopDocs.scoreDocs;
 				if ((sPage.getPage() - 1) * sPage.getSize() >= totalHits) {
-					throw new IllegalArgumentException("页码过大:元素总数量为" + 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);
+					} else {
+						sPage.setFirst(true);
+						topDocs = previousTopDocs;
+					}
+				} else {
+					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);
 				}
-				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 = sort == null ? indexSearcher.search(query, sPage.getSize()) : indexSearcher.search(query, sPage.getSize(), sort);