|
|
@@ -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) {
|