|
|
@@ -105,9 +105,9 @@ public class SearchServiceImpl implements SearchService {
|
|
|
private static final int PAGE_SIZE = 20;
|
|
|
|
|
|
/**
|
|
|
- * 品牌、类目分词可能重复,品牌每页取100个
|
|
|
+ * 品牌、类目分词可能重复,取前2000个
|
|
|
*/
|
|
|
- private static final int DUPLICATE_PAGE_SIZE = 100;
|
|
|
+ private static final int DUPLICATE_PAGE_SIZE = 2000;
|
|
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(SearchServiceImpl.class);
|
|
|
|
|
|
@@ -1700,7 +1700,7 @@ public class SearchServiceImpl implements SearchService {
|
|
|
sPage.setFirst(true);
|
|
|
}
|
|
|
size = size != null && size > 0 ? size : PAGE_SIZE;
|
|
|
- sPage.setSize(DUPLICATE_PAGE_SIZE);
|
|
|
+ sPage.setSize(size);
|
|
|
|
|
|
DuplicateFilter duplicateFilter = null;
|
|
|
if (!StringUtils.isEmpty(duplicateType)) {
|
|
|
@@ -1714,49 +1714,13 @@ public class SearchServiceImpl implements SearchService {
|
|
|
IndexSearcher indexSearcher = SearchUtils.getIndexSearcher(indexName);
|
|
|
TopDocs topDocs;
|
|
|
try {
|
|
|
- // 如果页码不为1
|
|
|
- if (sPage.getPage() > 1) {
|
|
|
- TopDocs previousTopDocs;
|
|
|
- if (sort == null) {
|
|
|
- previousTopDocs = duplicateFilter == null ? indexSearcher.search(query, (sPage.getPage() - 1) * sPage.getSize()) : indexSearcher.search(query, duplicateFilter, (sPage.getPage() - 1) * sPage.getSize());
|
|
|
- } else {
|
|
|
- previousTopDocs = indexSearcher.search(query, duplicateFilter, (sPage.getPage() - 1) * sPage.getSize(), sort);
|
|
|
- }
|
|
|
- int totalHits = previousTopDocs.totalHits;
|
|
|
- // 页码过大返回上一页
|
|
|
- if ((sPage.getPage() - 1) * size >= totalHits) {
|
|
|
- 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 {
|
|
|
- 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 {
|
|
|
- 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) {
|
|
|
- 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);
|
|
|
- }
|
|
|
- }
|
|
|
+ if (sort == null) {
|
|
|
+ topDocs = duplicateFilter == null ? indexSearcher.search(query, DUPLICATE_PAGE_SIZE) : indexSearcher.search(query, duplicateFilter, DUPLICATE_PAGE_SIZE);
|
|
|
+ } else {
|
|
|
+ topDocs = duplicateFilter == null ? indexSearcher.search(query, DUPLICATE_PAGE_SIZE, sort) : indexSearcher.search(query, duplicateFilter, DUPLICATE_PAGE_SIZE, sort);
|
|
|
+ }
|
|
|
|
|
|
int totalHits = topDocs.totalHits;
|
|
|
-
|
|
|
List<Document> documents = new ArrayList<>();
|
|
|
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
|
|
|
documents.add(indexSearcher.doc(scoreDoc.doc));
|
|
|
@@ -1794,13 +1758,16 @@ public class SearchServiceImpl implements SearchService {
|
|
|
return o1.getValue().size() - o2.getValue().size();
|
|
|
}
|
|
|
});
|
|
|
- for (int i = 0 ; i < (stuuids.size() < size ? stuuids.size() : size) ; i ++) {
|
|
|
+
|
|
|
+ // 设置总元素个数、页数等信息
|
|
|
+ int totalPage = (int) Math.ceil(totalHits / (1.0 * sPage.getSize()));
|
|
|
+ sPage.setTotalPage(totalPage);
|
|
|
+ int filterPage = sPage.getPage() < totalPage ? sPage.getPage() : totalPage;
|
|
|
+ sPage.setPage(filterPage);
|
|
|
+ for (int i = (filterPage - 1) * size; i < stuuids.size() ; i ++) {
|
|
|
content.add(stuuids.get(i).getKey());
|
|
|
}
|
|
|
|
|
|
- // 设置总元素个数、页数等信息
|
|
|
- int totalPage = (int) Math.ceil(totalHits / (1.0 * sPage.getSize()));
|
|
|
- sPage.setTotalPage(totalPage);
|
|
|
if (totalPage == sPage.getPage()) {
|
|
|
sPage.setLast(true);
|
|
|
}
|