Prechádzať zdrojové kódy

增加在售商品品牌联想词

wangyc 7 rokov pred
rodič
commit
f055ba8211

+ 18 - 13
mall-search/src/main/java/com/uas/search/service/impl/SearchServiceImpl.java

@@ -54,6 +54,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
+import java.util.stream.Collectors;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.sandbox.queries.DuplicateFilter;
@@ -1461,6 +1462,9 @@ public class SearchServiceImpl implements SearchService {
         } finally {
             releaseIndexSearcher(indexSearcher);
         }
+        if (goods.size() > size) {
+            goods = goods.stream().limit(size).collect(Collectors.toSet());
+        }
         return goods;
     }
 
@@ -1490,7 +1494,10 @@ public class SearchServiceImpl implements SearchService {
                 new DistinctGroupCollector.CollectField(GOODS_BR_NAME_EN_UNTOKENIZED_FIELD, GOODS_BR_NAME_EN_UNTOKENIZED_FIELD)
             };
             DistinctGroupCollector collector = new DistinctGroupCollector(GOODS_BR_NAME_EN_UNTOKENIZED_FIELD, collectFields);
-            booleanQuery.add(new TermQuery(new Term(GOODS_BR_NAME_EN_UNTOKENIZED_FIELD, keyword.toLowerCase())), Occur.MUST);
+            BooleanQuery nameQuery = new BooleanQuery();
+            nameQuery.add(new TermQuery(new Term(GOODS_BR_NAME_EN_UNTOKENIZED_FIELD, keyword.toLowerCase())), Occur.SHOULD);
+            nameQuery.add(new TermQuery(new Term(GOODS_BR_NAME_CN_UNTOKENIZED_FIELD, keyword.toLowerCase())), Occur.SHOULD);
+            booleanQuery.add(nameQuery, Occur.MUST);
             indexSearcher.search(booleanQuery, collector);
             goods.addAll(collector.getCollectValues());
 
@@ -1499,26 +1506,21 @@ public class SearchServiceImpl implements SearchService {
             if (!CollectionUtils.isEmpty(storeTypes)) {
                 filter(storeTypes, SearchConstants.GOODS_ST_TYPE_FIELD, booleanQueryPre);
             }
-            booleanQueryPre.add(new PrefixQuery(new Term(GOODS_BR_NAME_CN_UNTOKENIZED_FIELD, keyword.toLowerCase())), Occur.MUST);
-            booleanQueryPre.add(new PrefixQuery(new Term(GOODS_BR_NAME_EN_UNTOKENIZED_FIELD, keyword.toLowerCase())), Occur.MUST);
+            BooleanQuery namePreQuery = new BooleanQuery();
+            namePreQuery.add(new PrefixQuery(new Term(GOODS_BR_NAME_EN_UNTOKENIZED_FIELD, keyword.toLowerCase())), Occur.SHOULD);
+            namePreQuery.add(new PrefixQuery(new Term(GOODS_BR_NAME_CN_UNTOKENIZED_FIELD, keyword.toLowerCase())), Occur.SHOULD);
+            booleanQueryPre.add(namePreQuery, Occur.MUST);
             logger.info(booleanQueryPre.toString());
             indexSearcher.search(booleanQueryPre, collector);
             goods.addAll(collector.getCollectValues());
-
-//            BooleanQuery booleanQueryPre = new BooleanQuery();
-//            if (!CollectionUtils.isEmpty(storeTypes)) {
-//                filter(storeTypes, SearchConstants.GOODS_ST_TYPE_FIELD, booleanQueryPre);
-//            }
-//            booleanQueryPre.add(SearchUtils.getBooleanQuery(SearchConstants.GOODS_BR_NAME_CN_FIELD, keyword.toLowerCase()), Occur.SHOULD);
-//            booleanQueryPre.add(SearchUtils.getBooleanQuery(SearchConstants.GOODS_BR_NAME_EN_FIELD, keyword.toLowerCase()), Occur.SHOULD);
-//            logger.info(booleanQueryPre.toString());
-//            indexSearcher.search(booleanQueryPre, collector);
-//            goods.addAll(collector.getCollectValues());
         } catch (IOException e) {
             logger.error("", e);
         } finally {
             releaseIndexSearcher(indexSearcher);
         }
+        if (goods.size() > size) {
+            goods = goods.stream().limit(size).collect(Collectors.toSet());
+        }
         return goods;
     }
 
@@ -1566,6 +1568,9 @@ public class SearchServiceImpl implements SearchService {
         } finally {
             releaseIndexSearcher(indexSearcher);
         }
+        if (goods.size() > size) {
+            goods = goods.stream().limit(size).collect(Collectors.toSet());
+        }
         return goods;
     }