Browse Source

将品牌型号筛选改为命中前2000个

wangyc 7 years ago
parent
commit
4230d30e8e

+ 15 - 48
mall-search/src/main/java/com/uas/search/service/impl/SearchServiceImpl.java

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