Pārlūkot izejas kodu

将去重调整为kind分词、品牌精准匹配去重

wangyc 7 gadi atpakaļ
vecāks
revīzija
34870a66ec

+ 31 - 29
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个
 	 */
-	private static final int BRAND_PAGE_SIZE = 100;
+	private static final int DUPLICATE_PAGE_SIZE = 100;
 
 	private static Logger logger = LoggerFactory.getLogger(SearchServiceImpl.class);
 
@@ -1698,7 +1698,7 @@ public class SearchServiceImpl implements SearchService {
 			sPage.setFirst(true);
 		}
 		size = size != null && size > 0 ? size : PAGE_SIZE;
-		sPage.setSize(duplicateType.equals(SearchConstants.BRAND) ? BRAND_PAGE_SIZE : size);
+		sPage.setSize(DUPLICATE_PAGE_SIZE);
 
 		DuplicateFilter duplicateFilter = null;
 		if (!StringUtils.isEmpty(duplicateType)) {
@@ -1744,39 +1744,41 @@ public class SearchServiceImpl implements SearchService {
 			}
 
 			List<Object> content = new ArrayList<>();
+            List<Object> results = new ArrayList<>();
 			if (indexName.equals(SearchConstants.GOODS_TABLE_NAME)) {
-				Map<String, List<Object>> map = new HashMap<>();
-				List<Object> allStoreUuids = new ArrayList<>();
 				for (Document document : documents) {
-					allStoreUuids.add(document.get(SearchConstants.GOODS_ST_UUID_FIELD));
-				}
-				// 按店铺分组
-				for (Object object : allStoreUuids) {
-					if (map.get(String.valueOf(object)) == null) {
-						List<Object> storeUuids = new ArrayList<>();
-						storeUuids.add(String.valueOf(object));
-						map.put(String.valueOf(object), storeUuids);
-					} else {
-						map.get(String.valueOf(object)).add(object);
-						totalHits --;
-					}
-				}
-				// 按店铺批次数量排序
-				List<Map.Entry<String, List<Object>>> stuuids = new ArrayList<>(map.entrySet());
-				Collections.sort(stuuids, new Comparator<Map.Entry<String, List<Object>>> () {
-					@Override
-					public int compare(Map.Entry<String, List<Object>> o1, Map.Entry<String, List<Object>> o2) {
-						return o1.getValue().size() - o2.getValue().size();
-					}
-				});
-				for (int i = 0; i < (stuuids.size() < size ?  stuuids.size() : size) ; i ++) {
-					content.add(stuuids.get(i).getKey());
+                    results.add(document.get(SearchConstants.GOODS_ST_UUID_FIELD));
 				}
 			} else if (indexName.equals(SearchConstants.PRODUCTS_PRIVATE_TABLE_NAME)) {
 				for (Document document : documents) {
-					content.add(Long.parseLong(document.get(SearchConstants.PRODUCT_PRIVATE_ENUU_FIELD)));
+                    results.add(Long.parseLong(document.get(SearchConstants.PRODUCT_PRIVATE_ENUU_FIELD)));
 				}
 			}
+
+            Map<String, List<Object>> map = new HashMap<>();
+            // 结果去重
+            for (Object object : results) {
+                if (map.get(String.valueOf(object)) == null) {
+                    List<Object> storeUuids = new ArrayList<>();
+                    storeUuids.add(String.valueOf(object));
+                    map.put(String.valueOf(object), storeUuids);
+                } else {
+                    map.get(String.valueOf(object)).add(object);
+                    totalHits --;
+                }
+            }
+            // 按批次、物料数量排序
+            List<Map.Entry<String, List<Object>>> stuuids = new ArrayList<>(map.entrySet());
+            Collections.sort(stuuids, new Comparator<Map.Entry<String, List<Object>>> () {
+                @Override
+                public int compare(Map.Entry<String, List<Object>> o1, Map.Entry<String, List<Object>> o2) {
+                    return o1.getValue().size() - o2.getValue().size();
+                }
+            });
+            for (int i = 0; i < (stuuids.size() < size ?  stuuids.size() : size) ; i ++) {
+                content.add(stuuids.get(i).getKey());
+            }
+
 			// 设置总元素个数、页数等信息
 			int totalPage = (int) Math.ceil(totalHits / (1.0 * sPage.getSize()));
 			sPage.setTotalPage(totalPage);