|
|
@@ -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);
|