|
|
@@ -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");
|
|
|
|
|
|
// 现货卖家
|