wangyc 7 жил өмнө
parent
commit
db73928b27

+ 8 - 6
mall-search/src/main/java/com/uas/search/controller/SearchController.java

@@ -157,14 +157,15 @@ public class SearchController {
 	 * @param keyword 关键词
 	 * @param page 页码
 	 * @param size 页数
+	 * @param storeType 店铺类型
 	 * @param request 请求
 	 * @return
 	 * @throws IOException
 	 */
 	@RequestMapping("/brandsAndSellers")
 	@ResponseBody
-	public SPage<Map<String, Object>> searchBrandAndSellers(@RequestParam String keyword, Integer page, Integer size, HttpServletRequest request) throws IOException {
-		return searchService.getBrandsAndSellers(keyword, page, size);
+	public SPage<Map<String, Object>> searchBrandAndSellers(@RequestParam String keyword, Integer page, Integer size, String storeType, HttpServletRequest request) throws IOException {
+		return searchService.getBrandsAndSellers(keyword, page, size, storeType);
 	}
 
 	/**
@@ -172,14 +173,15 @@ public class SearchController {
 	 * @param keyword 关键词
 	 * @param page 页码
 	 * @param size 页数
+	 * @param storeType 店铺类型
 	 * @param request 请求
 	 * @return
 	 * @throws IOException
 	 */
 	@RequestMapping("/kindsAndSellers")
 	@ResponseBody
-	public Map<String, Object> searchSellersWithKind(@RequestParam String keyword, Integer page, Integer size, HttpServletRequest request) throws IOException {
-		return searchService.getSellersWithKind(keyword, page, size);
+	public Map<String, Object> searchSellersWithKind(@RequestParam String keyword, Integer page, Integer size, String storeType, HttpServletRequest request) throws IOException {
+		return searchService.getSellersWithKind(keyword, page, size, storeType);
 	}
 
 
@@ -365,10 +367,10 @@ public class SearchController {
 
 	@RequestMapping("/goodsIds")
 	@ResponseBody
-	public Map<String, Object> getGoodsIds(String keyword, String params, HttpServletRequest request) throws IOException {
+	public Map<String, Object> getGoodsIds(String keyword, String params, String storeType, HttpServletRequest request) throws IOException {
         long start = System.currentTimeMillis();
         PageParams pageParams = params == null ? null : JSONObject.parseObject(params, PageParams.class);
-        Map<String, Object> goodsIds = searchService.getGoodsIds(keyword, pageParams);
+        Map<String, Object> goodsIds = searchService.getGoodsIds(keyword, pageParams, storeType);
         logger.info(String.format("goodsIds\t%s\t%.3fs", keyword, (System.currentTimeMillis() - start) / 1000.0));
         return goodsIds;
     }

+ 3 - 3
mall-search/src/main/java/com/uas/search/service/SearchService.java

@@ -85,7 +85,7 @@ public interface SearchService {
 	 * @return
 	 * @throws IOException
 	 */
-	SPage<Map<String, Object>> getBrandsAndSellers(String keyword, Integer page, Integer size) throws IOException;
+	SPage<Map<String, Object>> getBrandsAndSellers(String keyword, Integer page, Integer size, String storeType) throws IOException;
 
 	/**
 	 * 根据关键词搜索品牌(精确命中后,提供卖家信息)
@@ -95,7 +95,7 @@ public interface SearchService {
 	 * @return
 	 * @throws IOException
 	 */
-	Map<String, Object> getSellersWithKind(String keyword, Integer page, Integer size) throws IOException;
+	Map<String, Object> getSellersWithKind(String keyword, Integer page, Integer size, String storeType) throws IOException;
 
 	/**
 	 * 根据关键词搜索产品(关键词可能是器件、类目、品牌,甚至可能是类目、品牌的混合)
@@ -351,7 +351,7 @@ public interface SearchService {
 	 *
 	 * @return 器件id、批次id和分页信息
 	 */
-	public Map<String, Object> getGoodsIds(String keyword, PageParams pageParams) throws IOException;
+	public Map<String, Object> getGoodsIds(String keyword, PageParams pageParams, String storeType) throws IOException;
 
 	/**
 	 * 根据关键词搜索批次(关键词可能是器件、类目、品牌)

+ 37 - 9
mall-search/src/main/java/com/uas/search/service/impl/SearchServiceImpl.java

@@ -679,7 +679,7 @@ public class SearchServiceImpl implements SearchService {
 	}
 
 	@Override
-	public SPage<Map<String, Object>> getBrandsAndSellers(String keyword, Integer page, Integer size)
+	public SPage<Map<String, Object>> getBrandsAndSellers(String keyword, Integer page, Integer size, String storeType)
 		throws IOException {
 		List<Map<String, Object>> content = new ArrayList<>();
         Map<String, Object> map = new HashMap<>();
@@ -696,6 +696,10 @@ public class SearchServiceImpl implements SearchService {
             List<String> goodsFeilds = new ArrayList<>();
             goodsFeilds.add(SearchConstants.GOODS_PR_PBRAND_EN_UNTOKENIZED_FIELD);
             goodsFeilds.add(SearchConstants.GOODS_PR_PBRAND_CN_UNTOKENIZED_FIELD);
+            List<String> storeTypes = new ArrayList<>();
+            if (!StringUtils.isEmpty(storeType)) {
+                storeTypes = Arrays.asList(storeType.split(","));
+            }
 
             List<String> productsFeilds = new ArrayList<>();
             productsFeilds.add(SearchConstants.PRODUCT_PRIVATE_PBRAND_CN_FIELD);
@@ -704,7 +708,7 @@ public class SearchServiceImpl implements SearchService {
             keywordFeildsMap.put("products", productsFeilds);
             brandIds.add(documents.getContent().get(0));
             // 获取卖家信息
-            Map<String, SPage<Object>> sellers = querySellers(keyword, keywordFeildsMap, page, size, false, SearchConstants.BRAND);
+            Map<String, SPage<Object>> sellers = querySellers(keyword, keywordFeildsMap, page, size, false, SearchConstants.BRAND, storeTypes);
 			stock = sellers.get("stock");
 			futures = sellers.get("futures");
 
@@ -733,7 +737,7 @@ public class SearchServiceImpl implements SearchService {
 	}
 
 	@Override
-	public Map<String, Object> getSellersWithKind(String keyword, Integer page, Integer size)
+	public Map<String, Object> getSellersWithKind(String keyword, Integer page, Integer size, String storeType)
 		throws IOException {
 		Map<String, Object> map = new HashMap<>();
 		SPage<Object> stock = null;
@@ -748,7 +752,12 @@ public class SearchServiceImpl implements SearchService {
         keywordFeildsMap.put("goods", goodsFeilds);
         keywordFeildsMap.put("products", productsFeilds);
 
-		Map<String, SPage<Object>> sellers = querySellers(keyword, keywordFeildsMap, page, size, true, SearchConstants.KIND);
+        List<String> storeTypes = new ArrayList<>();
+        if (!StringUtils.isEmpty(storeType)) {
+            storeTypes = Arrays.asList(storeType.split(","));
+        }
+
+		Map<String, SPage<Object>> sellers = querySellers(keyword, keywordFeildsMap, page, size, true, SearchConstants.KIND, storeTypes);
 		stock = sellers.get("stock");
 		futures = sellers.get("futures");
 
@@ -1704,7 +1713,7 @@ public class SearchServiceImpl implements SearchService {
 	}
 
 	@Override
-	public Map<String, Object> getGoodsIds(String keyword, PageParams pageParams) throws IOException {
+	public Map<String, Object> getGoodsIds(String keyword, PageParams pageParams, String storeType) throws IOException {
 //		List<String> keywordFields = new ArrayList<>();
 		// 先根据品牌搜索,品牌不存在再搜索型号等
 //		keywordFields.add(SearchConstants.GOODS_BR_NAME_CN_UNTOKENIZED_FIELD);
@@ -1728,12 +1737,16 @@ public class SearchServiceImpl implements SearchService {
         PageParams stockPageParams = new PageParams(pageParams);
         PageParams futuresPageParams = new PageParams(pageParams);
         String productkeyword = new String(keyword);
+        List<String> storeTypes = new ArrayList<>();
+        if (!StringUtils.isEmpty(storeType)) {
+            storeTypes = Arrays.asList(storeType.split(","));
+        }
 		// 现货
-		Map<String, Object> stock = getGoodsIds(keyword, goodsFields, false, pageParams);
+		Map<String, Object> stock = getGoodsIds(keyword, goodsFields, false, pageParams, storeTypes);
 		// 如搜索无结果则分词
 		if (CollectionUtils.isEmpty(stock) || stock.get("content") == null || JSONObject.parseArray(stock.get("content").toString()).isEmpty()) {
 			keyword = recursivelyGetGoodsIds(keyword, goodsFields, true);
-			stock = getGoodsIds(keyword, goodsFields, true, stockPageParams);
+			stock = getGoodsIds(keyword, goodsFields, true, stockPageParams, storeTypes);
 		}
 		// 期货
         PageParams recursivelyPageParams = new PageParams(pageParams);
@@ -1852,7 +1865,7 @@ public class SearchServiceImpl implements SearchService {
 	 * @return
 	 */
 	private Map<String, Object> getGoodsIds(String keyword, List<String> keywordFields, Boolean tokenized,
-			PageParams pageParams) {
+			PageParams pageParams, List<String> storeTypes) {
 		// 因为器件、属性值的数据量远比类目、品牌大得多,而且器件搜索可能还需进行分页,
 		// 所以涉及器件、属性值的搜索,大都不能像类目和品牌一样直接利用SearchUtils.getDocuments方法
 		IndexSearcher indexSearcher = SearchUtils.getIndexSearcher(SearchConstants.GOODS_TABLE_NAME);
@@ -1871,6 +1884,13 @@ public class SearchServiceImpl implements SearchService {
 		try {
 			BooleanQuery booleanQuery = queryGoods(keyword, keywordFields, tokenized);
 			setGoodsFilter(pageParams.getFilters(), booleanQuery);
+            if (!CollectionUtils.isEmpty(storeTypes)) {
+                BooleanQuery typeQuery = new BooleanQuery();
+                for (String type : storeTypes) {
+                    typeQuery.add(new TermQuery(new Term(SearchConstants.GOODS_ST_TYPE_FIELD, type)), Occur.SHOULD);
+                }
+                booleanQuery.add(typeQuery, Occur.MUST);
+            }
 			logger.info(booleanQuery.toString());
 
             Sort sort = sortGoods(keyword, pageParams.getSort());
@@ -2484,7 +2504,7 @@ public class SearchServiceImpl implements SearchService {
 	 * @param duplicate 去重类型
 	 * @return
 	 */
-	private Map<String, SPage<Object>> querySellers(String keyword, Map<String, List<String>> keywordFields, Integer page, Integer size, boolean tokenized, String duplicate) throws IOException {
+	private Map<String, SPage<Object>> querySellers(String keyword, Map<String, List<String>> keywordFields, Integer page, Integer size, boolean tokenized, String duplicate, List<String> storeTypes) throws IOException {
 		if (SearchUtils.isKeywordInvalid(keyword)) {
 			throw new IllegalArgumentException("搜索关键词无效:" + keyword);
 		}
@@ -2497,6 +2517,14 @@ public class SearchServiceImpl implements SearchService {
 		} else {
 			Map<String, BooleanQuery> queryMap = queryKindForSellers(keyword, keywordFields, tokenized);
 			BooleanQuery goodsQuery = queryMap.get("goodsQuery");
+            if (!CollectionUtils.isEmpty(storeTypes)) {
+                BooleanQuery typeQuery = new BooleanQuery();
+                for (String type : storeTypes) {
+                    typeQuery.add(new TermQuery(new Term(SearchConstants.GOODS_ST_TYPE_FIELD, type)), Occur.SHOULD);
+                }
+                goodsQuery.add(typeQuery, Occur.MUST);
+            }
+
 			BooleanQuery productsQuery = queryMap.get("productsQuery");
 
 			// 现货卖家