|
|
@@ -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;
|