Showing
4 changed files
with
72 additions
and
2 deletions
@@ -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 | } |
-
Please register or login to post a comment