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

简化物料搜索代码

dongbw преди 7 години
родител
ревизия
af48f1db2e

+ 1 - 1
mall-search/init.sql

@@ -335,7 +335,7 @@ CREATE DEFINER = `root`@`%` TRIGGER `lucene_trade_goods_i` AFTER INSERT ON `trad
     declare v_method_type varchar(6) default 'insert';
     declare v_data_id int;
     declare v_data text default 'goId';
-    declare v_priority int default 0;
+    declare v_priority int default 1;
 
     if new.cmp_uuid is not null then
       set v_data='cmpId';

+ 16 - 34
mall-search/src/main/java/com/uas/search/controller/SearchController.java

@@ -42,57 +42,39 @@ public class SearchController {
 	@Autowired
 	private SearchService searchService;
 
-	private Logger logger = LoggerFactory.getLogger(getClass());
+	/**
+	 * 所有物料
+	 */
+	private static final String ALL_PRODUCTS = "all";
 
 	/**
-	 * 查询所有物料
-	 * @param keyword 关键词
-	 * @param page  页码
-	 * @param size  尺寸
-	 * @param enUU 企业UU
-	 * @param request request
-	 * @return idPage
-	 * @throws IOException 输入异常
+	 * 标准物料
 	 */
-	@RequestMapping("/productIds")
-	@ResponseBody
-	public SPage<Long> searchProductIds(String keyword, Integer page, Integer size, @RequestParam Long enUU,
-												HttpServletRequest request) throws IOException {
-		return searchService.getProductIds(enUU, keyword, page, size);
-	}
+	private static final String STANDARD_PRODUCTS = "standard";
 
 	/**
-	 * 查询标准物料
-	 * @param keyword 关键词
-	 * @param page  页码
-	 * @param size  尺寸
-	 * @param enUU 企业UU
-	 * @param request request
-	 * @return idPage
-	 * @throws IOException 输入异常
+	 * 非标物料
 	 */
-	@RequestMapping("/standardProductIds")
-	@ResponseBody
-	public SPage<Long> searchStandardProductIds(String keyword, Integer page, Integer size, @RequestParam Long enUU,
-									HttpServletRequest request) throws IOException {
-		return searchService.getStandardProductIds(enUU, keyword, page, size);
-	}
+	private static final String NONSTANDARD_PRODUCTS = "nStandard";
+
+	private Logger logger = LoggerFactory.getLogger(getClass());
 
 	/**
-	 * 查询非标准物料
+	 * 查询所有物料
 	 * @param keyword 关键词
 	 * @param page  页码
 	 * @param size  尺寸
 	 * @param enUU 企业UU
+	 * @param type 类型    standard 标准 nStandard 非标  其他为所有
 	 * @param request request
 	 * @return idPage
 	 * @throws IOException 输入异常
 	 */
-	@RequestMapping("/nonStandardProductIds")
+	@RequestMapping("/productIds")
 	@ResponseBody
-	public SPage<Long> searchNonStandardProductIds(String keyword, Integer page, Integer size, @RequestParam Long enUU,
-										  HttpServletRequest request) throws IOException {
-		return searchService.getNonStandardProductIds(enUU, keyword, page, size);
+	public SPage<Long> searchProductIds(String keyword, Integer page, Integer size, Long enUU, String type,
+												HttpServletRequest request) throws IOException {
+		return searchService.getProductIds(enUU, keyword, page, size, type);
 	}
 
 	/**

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

@@ -522,29 +522,17 @@ public interface SearchService {
 	 */
 	public SPage<Object> getObjects(String tableName, String keyword, String field, Boolean tokenized, @NotEmpty("page") Integer page, @NotEmpty("size") Integer size) throws IOException;
 
-	SPage<Long> getProductIds(Long enUU, String keyword, Integer page, Integer size) throws IOException;
-
-	/**
-	 * 查询标准物料
-	 * @param enUU 企业UU
-	 * @param keyword 关键词
-	 * @param page  页码
-	 * @param size  尺寸
-	 * @return idPage
-	 * @throws IOException 输入异常
-	 */
-    SPage<Long> getStandardProductIds(Long enUU, String keyword, Integer page, Integer size) throws IOException;
-
 	/**
-	 * 查询非标准物料
+	 * 查询物料
 	 * @param enUU 企业UU
 	 * @param keyword 关键词
 	 * @param page  页码
 	 * @param size  尺寸
+	 * @param type  all 全部  standard 标准   nStandard 非标
 	 * @return idPage
 	 * @throws IOException 输入异常
 	 */
-	SPage<Long> getNonStandardProductIds(Long enUU, String keyword, Integer page, Integer size) throws IOException;
+	SPage<Long> getProductIds(Long enUU, String keyword, Integer page, Integer size, String type) throws IOException;
 
 	/**
 	 * 根据id获取物料

+ 53 - 88
mall-search/src/main/java/com/uas/search/service/impl/SearchServiceImpl.java

@@ -9,22 +9,49 @@ import com.uas.search.constant.model.PageParams.FilterField;
 import com.uas.search.constant.model.SPage;
 import com.uas.search.grouping.DistinctGroupCollector;
 import com.uas.search.grouping.GoodsGroupCollector;
-import com.uas.search.model.*;
+import com.uas.search.model.Brand;
+import com.uas.search.model.Component;
+import com.uas.search.model.Goods;
+import com.uas.search.model.Kind;
+import com.uas.search.model.PCBGoods;
+import com.uas.search.model.TradeGoods;
+import com.uas.search.model.V_Products;
 import com.uas.search.service.SearchService;
 import com.uas.search.sort.StringFieldComparatorSource;
-import com.uas.search.util.*;
+import com.uas.search.util.CollectionUtils;
+import com.uas.search.util.DocumentToObjectUtils;
+import com.uas.search.util.ObjectToDocumentUtils;
+import com.uas.search.util.SearchUtils;
+import com.uas.search.util.StringUtils;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.Term;
-import org.apache.lucene.search.*;
+import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanClause.Occur;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.NumericRangeQuery;
+import org.apache.lucene.search.PrefixQuery;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.ScoreDoc;
+import org.apache.lucene.search.Sort;
+import org.apache.lucene.search.SortField;
 import org.apache.lucene.search.SortField.Type;
+import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.search.TopDocs;
+import org.apache.lucene.search.TotalHitCountCollector;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
 import java.net.URLDecoder;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import static com.uas.search.constant.model.Sort.Field.PRICE;
 import static com.uas.search.constant.model.Sort.Field.RESERVE;
@@ -43,65 +70,38 @@ public class SearchServiceImpl implements SearchService {
 	 */
 	private static final int SIMILAR_NUM = 20;
 
-	private static Logger logger = LoggerFactory.getLogger(SearchServiceImpl.class);
+	/**
+	 * 所有物料
+	 */
+	private static final String ALL_PRODUCTS = "all";
 
 	/**
-	 * 查询所有物料
-	 *
-	 * @param keyword 关键词
-	 * @param page    页码
-	 * @param size    尺寸
-	 * @return idPage
-	 * @throws IOException 输入异常
+	 * 标准物料
 	 */
-	@Override
-	public SPage<Long> getProductIds(Long enUU, String keyword, Integer page, Integer size) throws IOException {
-		List<Long> ids = new ArrayList<>();
-		SPage<Document> documents = getProductDocuments(enUU, keyword, page, size);
-		SPage<Long> sPage = new SPage<>(documents.getTotalPage(), documents.getTotalElement(), documents.getPage(),
-				documents.getSize(), documents.isFirst(), documents.isLast());
-		for (Document document : documents.getContent()) {
-			ids.add(Long.parseLong(document.get(SearchConstants.PRODUCT_PRIVATE_ID_FIELD)));
-		}
-		sPage.setContent(ids);
-		return sPage;
-	}
+	private static final String STANDARD_PRODUCTS = "standard";
 
 	/**
-	 * 查询标准物料
-	 *
-	 * @param keyword 关键词
-	 * @param page    页码
-	 * @param size    尺寸
-	 * @return idPage
-	 * @throws IOException 输入异常
+	 * 非标物料
 	 */
-	@Override
-	public SPage<Long> getStandardProductIds(Long enUU, String keyword, Integer page, Integer size) throws IOException {
-		List<Long> ids = new ArrayList<>();
-		SPage<Document> documents = getStandardProductDocuments(enUU, keyword, page, size);
-		SPage<Long> sPage = new SPage<>(documents.getTotalPage(), documents.getTotalElement(), documents.getPage(),
-				documents.getSize(), documents.isFirst(), documents.isLast());
-		for (Document document : documents.getContent()) {
-			ids.add(Long.parseLong(document.get(SearchConstants.PRODUCT_PRIVATE_ID_FIELD)));
-		}
-		sPage.setContent(ids);
-		return sPage;
-	}
+	private static final String NONSTANDARD_PRODUCTS = "nStandard";
+
+	private static Logger logger = LoggerFactory.getLogger(SearchServiceImpl.class);
 
 	/**
-	 * 查询非标准物料
+	 * 查询所有物料
 	 *
 	 * @param keyword 关键词
 	 * @param page    页码
 	 * @param size    尺寸
+	 * @param enUU 企业UU
+	 * @param type  all 全部  standard 标准   nStandard 非标
 	 * @return idPage
 	 * @throws IOException 输入异常
 	 */
 	@Override
-	public SPage<Long> getNonStandardProductIds(Long enUU, String keyword, Integer page, Integer size) throws IOException {
+	public SPage<Long> getProductIds(Long enUU, String keyword, Integer page, Integer size, String type) throws IOException {
 		List<Long> ids = new ArrayList<>();
-		SPage<Document> documents = getNonStandardProductDocuments(enUU, keyword, page, size);
+		SPage<Document> documents = getProductDocuments(enUU, keyword, page, size, type);
 		SPage<Long> sPage = new SPage<>(documents.getTotalPage(), documents.getTotalElement(), documents.getPage(),
 				documents.getSize(), documents.isFirst(), documents.isLast());
 		for (Document document : documents.getContent()) {
@@ -111,54 +111,19 @@ public class SearchServiceImpl implements SearchService {
 		return sPage;
 	}
 
-	private SPage<Document> getProductDocuments(Long enUU, String keyword, Integer page, Integer size) throws IOException {
+	private SPage<Document> getProductDocuments(Long enUU, String keyword, Integer page, Integer size, String type) throws IOException {
 //		if (SearchUtils.isKeywordInvalid(keyword)) {
 //			throw new IllegalArgumentException("搜索关键词无效:" + keyword);
 //		}
 		BooleanQuery q1 = new BooleanQuery();
-		q1.add(new TermQuery(new Term(SearchConstants.PRODUCT_PRIVATE_ENUU_FIELD, String.valueOf(enUU))), BooleanClause.Occur.MUST);
-		q1.add(new TermQuery(new Term(SearchConstants.PRODUCT_PRIVATE_B2CENABLED_FIELD, String.valueOf(1))), BooleanClause.Occur.MUST);
-		BooleanQuery booleanQuery = new BooleanQuery();
-		booleanQuery.add(q1, BooleanClause.Occur.MUST);
-		if (!StringUtils.isEmpty(keyword)) {
-			BooleanQuery q2 = new BooleanQuery();
-			q2.add(createQuery(SearchConstants.PRODUCT_PRIVATE_KIND_FIELD, keyword, true,1), BooleanClause.Occur.SHOULD);
-			q2.add(createQuery(SearchConstants.PRODUCT_PRIVATE_PBRANDEN_FIELD, keyword, true,1), BooleanClause.Occur.SHOULD);
-			q2.add(createQuery(SearchConstants.PRODUCT_PRIVATE_PCMPCODE_FIELD, keyword, true,1), BooleanClause.Occur.SHOULD);
-			booleanQuery.add(q2, BooleanClause.Occur.MUST);
+		if (null != enUU) {
+			q1.add(new TermQuery(new Term(SearchConstants.PRODUCT_PRIVATE_ENUU_FIELD, String.valueOf(enUU))), BooleanClause.Occur.MUST);
 		}
-		logger.info(booleanQuery.toString());
-		return SearchUtils.getDocuments(SearchConstants.PRODUCTS_PRIVATE_TABLE_NAME, booleanQuery, new Sort(sortProduct(keyword)), page, size);
-	}
-
-	private SPage<Document> getStandardProductDocuments(Long enUU, String keyword, Integer page, Integer size) throws IOException {
-//		if (SearchUtils.isKeywordInvalid(keyword)) {
-//			throw new IllegalArgumentException("搜索关键词无效:" + keyword);
-//		}
-		BooleanQuery q1 = new BooleanQuery();
-		q1.add(new TermQuery(new Term(SearchConstants.PRODUCT_PRIVATE_ENUU_FIELD, String.valueOf(enUU))), BooleanClause.Occur.MUST);
-		q1.add(new TermQuery(new Term(SearchConstants.PRODUCT_PRIVATE_STANDARD_FIELD, String.valueOf(1))), BooleanClause.Occur.MUST);
-		q1.add(new TermQuery(new Term(SearchConstants.PRODUCT_PRIVATE_B2CENABLED_FIELD, String.valueOf(1))), BooleanClause.Occur.MUST);
-		BooleanQuery booleanQuery = new BooleanQuery();
-		booleanQuery.add(q1, BooleanClause.Occur.MUST);
-		if (!StringUtils.isEmpty(keyword)) {
-			BooleanQuery q2 = new BooleanQuery();
-			q2.add(createQuery(SearchConstants.PRODUCT_PRIVATE_KIND_FIELD, keyword, true,1), BooleanClause.Occur.SHOULD);
-			q2.add(createQuery(SearchConstants.PRODUCT_PRIVATE_PBRANDEN_FIELD, keyword, true,1), BooleanClause.Occur.SHOULD);
-			q2.add(createQuery(SearchConstants.PRODUCT_PRIVATE_PCMPCODE_FIELD, keyword, true,1), BooleanClause.Occur.SHOULD);
-			booleanQuery.add(q2, BooleanClause.Occur.MUST);
+		if (STANDARD_PRODUCTS.equals(type)) {
+			q1.add(new TermQuery(new Term(SearchConstants.PRODUCT_PRIVATE_STANDARD_FIELD, String.valueOf(1))), BooleanClause.Occur.MUST);
+		} else if (NONSTANDARD_PRODUCTS.equals(type)) {
+			q1.add(new TermQuery(new Term(SearchConstants.PRODUCT_PRIVATE_STANDARD_FIELD, String.valueOf(0))), BooleanClause.Occur.MUST);
 		}
-		logger.info(booleanQuery.toString());
-		return SearchUtils.getDocuments(SearchConstants.PRODUCTS_PRIVATE_TABLE_NAME, booleanQuery, new Sort(sortProduct(keyword)), page, size);
-	}
-
-	private SPage<Document> getNonStandardProductDocuments(Long enUU, String keyword, Integer page, Integer size) throws IOException {
-//		if (SearchUtils.isKeywordInvalid(keyword)) {
-//			throw new IllegalArgumentException("搜索关键词无效:" + keyword);
-//		}
-		BooleanQuery q1 = new BooleanQuery();
-		q1.add(new TermQuery(new Term(SearchConstants.PRODUCT_PRIVATE_ENUU_FIELD, String.valueOf(enUU))), BooleanClause.Occur.MUST);
-		q1.add(new TermQuery(new Term(SearchConstants.PRODUCT_PRIVATE_STANDARD_FIELD, String.valueOf(0))), BooleanClause.Occur.MUST);
 		q1.add(new TermQuery(new Term(SearchConstants.PRODUCT_PRIVATE_B2CENABLED_FIELD, String.valueOf(1))), BooleanClause.Occur.MUST);
 		BooleanQuery booleanQuery = new BooleanQuery();
 		booleanQuery.add(q1, BooleanClause.Occur.MUST);