Authored by wangnan9279

ufo

@@ -56,4 +56,11 @@ public class UfoProductListController { @@ -56,4 +56,11 @@ public class UfoProductListController {
56 return ufoProductListService.recommendList(paramMap); 56 return ufoProductListService.recommendList(paramMap);
57 } 57 }
58 58
  59 + @RequestMapping(method = RequestMethod.GET, value = "/ufo/suggest")
  60 + @ResponseBody
  61 + public SearchApiResult suggest(HttpServletRequest request) {
  62 + Map<String, String> paramMap = HttpServletRequestUtils.transParamType(request);
  63 + return ufoProductListService.suggest(paramMap);
  64 + }
  65 +
59 } 66 }
@@ -123,6 +123,17 @@ public class UfoSearchQueryHelper extends BaseService { @@ -123,6 +123,17 @@ public class UfoSearchQueryHelper extends BaseService {
123 return queryBuilder; 123 return queryBuilder;
124 } 124 }
125 125
  126 +
  127 + public QueryBuilder constructSuggestQueryBuilder(Map<String, String> paramMap) {
  128 + // 0、处理查询关键字
  129 + String query = SearchKeyWordUtils.getUfoParamKeyword(paramMap, SearchRequestParams.UFOPRODUCTINDEX_SEARCH_QUERY);
  130 + if (StringUtils.isBlank(query)) {
  131 + return QueryBuilders.matchAllQuery();
  132 + }
  133 + WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery(UfoProductIndexEsField.productName_ik, "*" + query + "*");
  134 + return wildcardQueryBuilder;
  135 + }
  136 +
126 /** 137 /**
127 * 构造排序方式 138 * 构造排序方式
128 */ 139 */
@@ -38,6 +38,15 @@ public class UfoProductIndexBaseService { @@ -38,6 +38,15 @@ public class UfoProductIndexBaseService {
38 return results; 38 return results;
39 } 39 }
40 40
  41 +
  42 + public List<Map<String, Object>> buildProductReturnInfoList(List<Map<String, Object>> productEsSourceList) {
  43 + List<Map<String, Object>> results = new ArrayList<Map<String, Object>>();
  44 + for (Map<String, Object> productEsSource : productEsSourceList) {
  45 + results.add(this.getProductMapFromEsSource(productEsSource));
  46 + }
  47 + return results;
  48 + }
  49 +
41 public Map<String, Object> getProductMapFromEsSource(Map<String, Object> map) { 50 public Map<String, Object> getProductMapFromEsSource(Map<String, Object> map) {
42 Map<String, Object> productMap = new HashMap<String, Object>(); 51 Map<String, Object> productMap = new HashMap<String, Object>();
43 productMap.put("id", MapUtils.getIntValue(map, UfoProductIndexEsField.id, 0)); 52 productMap.put("id", MapUtils.getIntValue(map, UfoProductIndexEsField.id, 0));
@@ -47,12 +56,18 @@ public class UfoProductIndexBaseService { @@ -47,12 +56,18 @@ public class UfoProductIndexBaseService {
47 return productMap; 56 return productMap;
48 } 57 }
49 58
50 - public List<Map<String, Object>> buildProductReturnInfoList(List<Map<String, Object>> productEsSourceList) { 59 + public List<Map<String, Object>> buildSuggestReturnInfoList(List<Map<String, Object>> productEsSourceList) {
51 List<Map<String, Object>> results = new ArrayList<Map<String, Object>>(); 60 List<Map<String, Object>> results = new ArrayList<Map<String, Object>>();
52 for (Map<String, Object> productEsSource : productEsSourceList) { 61 for (Map<String, Object> productEsSource : productEsSourceList) {
53 - results.add(this.getProductMapFromEsSource(productEsSource)); 62 + results.add(this.getSuggestFromEsSource(productEsSource));
54 } 63 }
55 return results; 64 return results;
56 } 65 }
57 66
  67 + public Map<String, Object> getSuggestFromEsSource(Map<String, Object> map) {
  68 + Map<String, Object> productMap = new HashMap<String, Object>();
  69 + productMap.put("product_name", MapUtils.getString(map, UfoProductIndexEsField.productName, ""));
  70 + return productMap;
  71 + }
  72 +
58 } 73 }
@@ -146,4 +146,41 @@ public class UfoProductListService { @@ -146,4 +146,41 @@ public class UfoProductListService {
146 } 146 }
147 } 147 }
148 148
  149 + public SearchApiResult suggest(Map<String, String> paramMap) {
  150 + try {
  151 + // 1、参数校验
  152 + int pageSize = StringUtils.isBlank(paramMap.get("viewNum")) ? 10 : Integer.parseInt(paramMap.get("viewNum"));
  153 + if (pageSize < 0) {
  154 + return new SearchApiResult().setCode(400).setMessage("viewNum参数不合法");
  155 + }
  156 + if (pageSize > 100) {
  157 + paramMap.put("viewNum", "100");
  158 + }
  159 + // 2. 构建SearchParam
  160 + SearchParam searchParam = new SearchParam();
  161 + BoolQueryBuilder boolFilter = ufoSearchQueryHelper.constructFilterBuilder(paramMap, null);
  162 + searchParam.setFiter(boolFilter);
  163 + QueryBuilder queryBuilder = ufoSearchQueryHelper.constructSuggestQueryBuilder(paramMap);
  164 + searchParam.setQuery(queryBuilder);
  165 + searchParam.setAggregationBuilders(null);
  166 + searchParam.setSize(pageSize);
  167 + searchParam.setOffset(0);
  168 + // 设置返回的结果
  169 + List<String> includeFields = ufoProductIndexBaseService.getUfoProductIndexIncludeFields();
  170 + searchParam.setIncludeFields(includeFields);
  171 + // 执行搜索
  172 + SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_UFO_PRODUCT_INDEX, searchParam);
  173 + // 构造返回结果
  174 + List<Map<String, Object>> returnInfoList = ufoProductIndexBaseService.buildSuggestReturnInfoList(searchResult.getResultList());
  175 + JSONObject dataMap = new JSONObject();
  176 + dataMap.put("size", pageSize);
  177 + dataMap.put("total", searchResult.getTotalPage());
  178 + dataMap.put("suggest_list", returnInfoList);
  179 + return new SearchApiResult().setData(dataMap);
  180 + } catch (Exception e) {
  181 + logger.error(e.getMessage(), e);
  182 + return new SearchApiResult().setData(null).setCode(500);
  183 + }
  184 + }
  185 +
149 } 186 }