Authored by wangnan

shops支持搜索全球购店铺 fix

... ... @@ -200,6 +200,7 @@ public class ShopsServiceImpl extends BaseService implements IShopsService, Appl
}
}
@Override
public SearchApiResult searchShopsNew(Map<String, String> paramMap) {
try {
... ... @@ -207,6 +208,7 @@ public class ShopsServiceImpl extends BaseService implements IShopsService, Appl
// 1、参数校验
String keyword = paramMap.get(SearchRequestParams.PARAM_SEARCH_SHOPS_KEYWORD);
keyword = keyword.toLowerCase();
if (StringUtils.isBlank(keyword)) {
return new SearchApiResult().setCode(400).setMessage("keyword不能为空!");
}
... ... @@ -223,6 +225,21 @@ public class ShopsServiceImpl extends BaseService implements IShopsService, Appl
}
}
//tbl判断
SearchApiResult searchApiResult = searchTbl(paramMap,keyword);
JSONObject returnMap = new JSONObject();
if (searchApiResult.getData() != null) {
Map<String, Object> shopInfoMap = (Map<String, Object>) searchApiResult.getData();
JSONObject shopDataMap = new JSONObject();
Integer shopIdNumber = Integer.valueOf(shopInfoMap.get("shopsId").toString());
shopDataMap.put("brand_id", shopIdNumber * (-1));
shopDataMap.put("brand_name", shopInfoMap.get("shopName") == null ? "" : shopInfoMap.get("shopName"));
shopDataMap.put("brand_logo", shopInfoMap.get("shopLogo") == null ? "" : shopInfoMap.get("shopLogo"));
returnMap.put("tblBrand", shopDataMap);
return searchApiResult.setData(returnMap);
}
// 2、配置keyword的查询字段以及权重设置
MultiMatchQueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(keyword);
queryBuilder.operator(MatchQueryBuilder.Operator.OR);
... ... @@ -236,12 +253,10 @@ public class ShopsServiceImpl extends BaseService implements IShopsService, Appl
searchParam.setFiter(boolFilterForShops);
searchParam.setQuery(queryBuilder);
searchParam.setSize(5);
final String indexName = ISearchConstants.INDEX_NAME_SHOPS;
SearchApiResult searchApiResult = new SearchApiResult().setMessage("shops info");
// 4、先从缓存里取数据
JSONObject returnMap = searchCacheService.getJSONObjectFromCache(indexName, searchParam);
returnMap = searchCacheService.getJSONObjectFromCache(indexName, searchParam);
if (returnMap != null) {
CACHE_MATCH_REQUEST.info("match cache , url is :/shops.json?" + HttpServletRequestUtils.genParamString(paramMap));
return searchApiResult.setData(returnMap);
... ... @@ -249,6 +264,9 @@ public class ShopsServiceImpl extends BaseService implements IShopsService, Appl
// 5、根据searchParam查询ES
returnMap = new JSONObject();
returnMap.put("shop", null);
returnMap.put("brand", null);
returnMap.put("tblBrand", null);
SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_SHOPS, searchParam);
List<String> shopIds = new ArrayList<String>();
Map<String, Map<String, Object>> shopInfoMap = new HashMap<String, Map<String, Object>>();
... ... @@ -266,13 +284,21 @@ public class ShopsServiceImpl extends BaseService implements IShopsService, Appl
if (!StringUtils.isBlank(shopId)) {
JSONObject shopDataMap = new JSONObject();
Map<String, Object> map = shopInfoMap.get(shopId);
shopDataMap.put("shop_id", map.get("shopsId"));
shopDataMap.put("shop_name", map.get("shopName") == null ? "" : map.get("shopName"));
shopDataMap.put("shop_logo", map.get("shopLogo") == null ? "" : map.get("shopLogo"));
shopDataMap.put("shop_domain", map.get("shopDomain") == null ? "" : map.get("shopDomain"));
shopDataMap.put("shop_type", map.get("shopsType") == null ? "" : map.get("shopsType"));
returnMap.put("shop", shopDataMap);
returnMap.put("brand", null);
Integer shopIdNumber = Integer.valueOf(map.get("shopsId").toString());
//全球购店铺的id是负数
if (shopIdNumber < 0) {
shopDataMap.put("brand_id", shopIdNumber * (-1));
shopDataMap.put("brand_name", map.get("shopName") == null ? "" : map.get("shopName"));
shopDataMap.put("brand_logo", map.get("shopLogo") == null ? "" : map.get("shopLogo"));
returnMap.put("tblBrand", shopDataMap);
} else {
shopDataMap.put("shop_id", map.get("shopsId"));
shopDataMap.put("shop_name", map.get("shopName") == null ? "" : map.get("shopName"));
shopDataMap.put("shop_logo", map.get("shopLogo") == null ? "" : map.get("shopLogo"));
shopDataMap.put("shop_domain", map.get("shopDomain") == null ? "" : map.get("shopDomain"));
shopDataMap.put("shop_type", map.get("shopsType") == null ? "" : map.get("shopsType"));
returnMap.put("shop", shopDataMap);
}
} else {
// 再去查品牌
returnMap = searchBrand(paramMap);
... ... @@ -284,6 +310,44 @@ public class ShopsServiceImpl extends BaseService implements IShopsService, Appl
}
}
/**
* shopsNew中搜索是否有匹配的全球购店铺,如果有直接返回。
* @param paramMap
* @param keyword
* @return
*/
private SearchApiResult searchTbl(Map<String, String> paramMap, String keyword) {
try {
SearchApiResult searchApiResult = new SearchApiResult().setMessage("shops info");
// 1、配置keyword的查询字段以及权重设置
MultiMatchQueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(keyword);
queryBuilder.operator(MatchQueryBuilder.Operator.AND);
queryBuilder.field("shopName.shopName_fullMatch");
// 2、构建SearchParam
SearchParam searchParam = new SearchParam();
BoolQueryBuilder boolFilterForShops = this.constructShopsFilterBuilder(paramMap);
searchParam.setFiter(boolFilterForShops);
searchParam.setQuery(queryBuilder);
searchParam.setSize(5);
//3、配置sort
List<SortBuilder> sortBuilders = new ArrayList<SortBuilder>();
sortBuilders.add(SortBuilders.fieldSort("isGlobal").order(SortOrder.ASC));
searchParam.setSortBuilders(sortBuilders);
SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_SHOPS, searchParam);
if (searchResult != null && searchResult.getResultList() != null && !searchResult.getResultList().isEmpty()) {
List<Map<String, Object>> result = searchResult.getResultList();
Map<String, Object> shopInfo = result.get(0);
String isGlobal = shopInfo.get("isGlobal").toString();
if (isGlobal.equals("Y")) {
return searchApiResult.setData(shopInfo);
}
}
return new SearchApiResult();
} catch (Exception e) {
return SearchApiResultUtils.errorSearchApiResult("searchTbl", paramMap, e);
}
}
private Map<String, Object> getGroupShopResponseMap(MultiBucketsAggregation aggregation, int size) {
Iterator<? extends Bucket> itAgg = aggregation.getBuckets().iterator();
Map<String, Object> dataMap = new HashMap<String, Object>();
... ... @@ -336,20 +400,18 @@ public class ShopsServiceImpl extends BaseService implements IShopsService, Appl
* @param paramMap
* @return
*/
private JSONObject searchBrand(Map<String, String> paramMap) {
SearchApiResult searchApiResult = this.searchShops(paramMap);
JSONObject returnMap = new JSONObject();
returnMap.put("shop", null);
returnMap.put("brand", null);
returnMap.put("tblBrand", null);
if (searchApiResult != null && searchApiResult.getData() != null) {
JSONObject brandDataMap = (JSONObject) searchApiResult.getData();
returnMap.put("shop", null);
if (!brandDataMap.isEmpty()) {
returnMap.put("brand", brandDataMap);
} else {
returnMap.put("brand", null);
}
} else {// 店铺和品牌都没有结果
returnMap.put("shop", null);
returnMap.put("brand", null);
}
return returnMap;
}
... ...