|
|
@@ -370,10 +370,28 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
|
|
|
}
|
|
|
int totalHits = previousTopDocs.totalHits;
|
|
|
ScoreDoc[] previousScoreDocs = previousTopDocs.scoreDocs;
|
|
|
+ // 搜索结果为空时,返回空集
|
|
|
+ if (totalHits == 0) {
|
|
|
+ sPage.setTotalElement(totalHits);
|
|
|
+ int totalPage = (int) Math.ceil(totalHits / (1.0 * sPage.getSize()));
|
|
|
+ sPage.setTotalPage(totalPage);
|
|
|
+ if (totalPage == sPage.getPage()) {
|
|
|
+ sPage.setLast(true);
|
|
|
+ }
|
|
|
+ sPage.setContent(new ArrayList<ScoreDoc>());
|
|
|
+ return sPage;
|
|
|
+ }
|
|
|
+ // 超出页码数时,返回第1页数据
|
|
|
if ((sPage.getPage() - 1) * sPage.getSize() >= totalHits) {
|
|
|
- throw new SearchException("页码过大:元素总数量为" + totalHits);
|
|
|
+ sPage.setPage(1);
|
|
|
+ sPage.setFirst(true);
|
|
|
+ if (sort != null) {
|
|
|
+ topDocs = indexSearcher.search(booleanQuery, sPage.getSize(), sort);
|
|
|
+ } else {
|
|
|
+ topDocs = indexSearcher.search(booleanQuery, sPage.getSize());
|
|
|
+ }
|
|
|
}
|
|
|
- if (sort != null) {
|
|
|
+ if (sort != null && sPage.getPage() > 1) {
|
|
|
topDocs = indexSearcher.searchAfter(previousScoreDocs[previousScoreDocs.length - 1], booleanQuery,
|
|
|
sPage.getSize(), sort);
|
|
|
} else {
|