Преглед на файлове

one keyword maybe contain brand, kind, component and property value, such as "Enesol 20v", blanks are necessary

sunyj преди 8 години
родител
ревизия
18a3c14be2
променени са 1 файла, в които са добавени 20 реда и са изтрити 5 реда
  1. 20 5
      src/main/java/com/uas/search/service/impl/SearchServiceImpl.java

+ 20 - 5
src/main/java/com/uas/search/service/impl/SearchServiceImpl.java

@@ -1127,24 +1127,39 @@ public class SearchServiceImpl implements SearchService {
 	 */
 	private Query setGoodsBoost(String keyword) {
 		BooleanQuery booleanQuery = new BooleanQuery();
-		BooleanQuery componentCodeQuery = SearchUtils.getBooleanQuery(SearchConstants.GOODS_CMP_CODE_FIELD, keyword);
+		BooleanQuery componentCodeQuery = createQuery(SearchConstants.GOODS_CMP_CODE_FIELD, keyword);
 		componentCodeQuery.setBoost(100);
 		booleanQuery.add(componentCodeQuery, BooleanClause.Occur.SHOULD);
-		BooleanQuery brandNameCnQuery = SearchUtils.getBooleanQuery(SearchConstants.GOODS_BR_NAME_CN_FIELD, keyword);
+		BooleanQuery brandNameCnQuery = createQuery(SearchConstants.GOODS_BR_NAME_CN_FIELD, keyword);
 		brandNameCnQuery.setBoost(10);
 		booleanQuery.add(brandNameCnQuery, BooleanClause.Occur.SHOULD);
-		BooleanQuery brandNameEnQuery = SearchUtils.getBooleanQuery(SearchConstants.GOODS_BR_NAME_EN_FIELD, keyword);
+		BooleanQuery brandNameEnQuery = createQuery(SearchConstants.GOODS_BR_NAME_EN_FIELD, keyword);
 		brandNameEnQuery.setBoost(10);
 		booleanQuery.add(brandNameEnQuery, BooleanClause.Occur.SHOULD);
-		BooleanQuery kindNameQuery = SearchUtils.getBooleanQuery(SearchConstants.GOODS_KI_NAME_CN_FIELD, keyword);
+		BooleanQuery kindNameQuery = createQuery(SearchConstants.GOODS_KI_NAME_CN_FIELD, keyword);
 		kindNameQuery.setBoost(1);
 		booleanQuery.add(kindNameQuery, BooleanClause.Occur.SHOULD);
-		BooleanQuery descriptionQuery = SearchUtils.getBooleanQuery(SearchConstants.GOODS_CMP_DESCRIPTION_FIELD, keyword);
+		BooleanQuery descriptionQuery = createQuery(SearchConstants.GOODS_CMP_DESCRIPTION_FIELD, keyword);
 		descriptionQuery.setBoost(1);
 		booleanQuery.add(descriptionQuery, BooleanClause.Occur.SHOULD);
 		return booleanQuery;
 	}
 
+	private BooleanQuery createQuery(String field, String keyword){
+        if (StringUtils.isEmpty(field) || StringUtils.isEmpty(keyword)) {
+            return null;
+        }
+        BooleanQuery booleanQuery = new BooleanQuery();
+        // 根据空格分隔关键词,分隔的词取或的关系
+        String[] array = keyword.split(" ");
+        for(String str : array){
+            if(!StringUtils.isEmpty(str)){
+                booleanQuery.add(SearchUtils.getBooleanQuery(field, str), Occur.SHOULD);
+            }
+        }
+        return booleanQuery;
+    }
+
 	/**
 	 * 过滤
 	 *