Jelajahi Sumber

批次排序

sunyj 8 tahun lalu
induk
melakukan
c89a46e0bc

+ 19 - 1
search-console/src/main/java/com/uas/search/console/controller/SearchController.java

@@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import com.alibaba.druid.util.StringUtils;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.search.console.core.util.ContextUtils;
 import com.uas.search.console.dao.ComponentSimpleInfoDao;
@@ -24,6 +25,8 @@ import com.uas.search.console.model.KindSimpleInfo;
 import com.uas.search.console.service.InnerSearchService;
 import com.uas.search.model.PageParams;
 import com.uas.search.model.PageParams.FilterField;
+import com.uas.search.model.Sort;
+import com.uas.search.model.Sort.Field;
 import com.uas.search.service.SearchService;
 
 /**
@@ -178,7 +181,7 @@ public class SearchController {
 
 	@RequestMapping("/goodsIds")
 	@ResponseBody
-	public Map<String, Object> getGoodsIds(String keyword, Integer page, Integer size, String filters) {
+	public Map<String, Object> getGoodsIds(String keyword, Integer page, Integer size, String filters, String sort) {
 		PageParams pageParams = new PageParams();
 		if (page != null) {
 			pageParams.setPage(page);
@@ -196,6 +199,21 @@ public class SearchController {
 			}
 		}
 		pageParams.setFilters(filtersMap);
+		if (!StringUtils.isEmpty(sort)) {
+			JSONArray jsonArray = JSONObject.parseArray(sort);
+			List<Sort> sorts = new ArrayList<>();
+			for (Object object : jsonArray) {
+				if (object instanceof JSONObject) {
+					JSONObject jsonObject = (JSONObject) object;
+					Field field = Field.valueOf(jsonObject.getString("field"));
+					boolean reverse = jsonObject.getBooleanValue("reverse");
+					sorts.add(new Sort(field, reverse));
+				} else {
+					throw new IllegalArgumentException("排序参数并非json格式");
+				}
+			}
+			pageParams.setSort(sorts);
+		}
 		return searchService.getGoodsIds(keyword, pageParams);
 	}
 

+ 32 - 1
search-console/src/main/java/com/uas/search/console/service/impl/SearchServiceImpl.java

@@ -22,6 +22,7 @@ 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.slf4j.Logger;
@@ -882,7 +883,36 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 			}
 			logger.info(booleanQuery.toString());
 
-			Sort sort = new Sort(SortField.FIELD_SCORE);
+			Sort sort;
+			List<com.uas.search.model.Sort> sorts = pageParams.getSort();
+			if (sorts != null && !CollectionUtils.isEmpty(sorts)) {
+				SortField[] sortFields = new SortField[sorts.size()];
+				int i = 0;
+				for (com.uas.search.model.Sort s : sorts) {
+					switch (s.getField()) {
+					case GO_RESERVE:
+						sortFields[i++] = new SortField(SearchConstants.GOODS_GO_RESERVE_FIELD, Type.DOUBLE,
+								s.isReverse());
+						break;
+					case GO_MINPRICERMB:
+						sortFields[i++] = new SortField(SearchConstants.GOODS_GO_MINPRICERMB_FIELD, Type.DOUBLE,
+								s.isReverse());
+						break;
+					case GO_MINPRICEUSD:
+						sortFields[i++] = new SortField(SearchConstants.GOODS_GO_MINPRICEUSD_FIELD, Type.DOUBLE,
+								s.isReverse());
+						break;
+					case GO_SEARCH:
+						sortFields[i++] = (SortField.FIELD_SCORE);
+						break;
+					default:
+						throw new SearchException("不支持该排序方式:" + s.getField());
+					}
+				}
+				sort = new Sort(sortFields);
+			} else {
+				sort = new Sort(SortField.FIELD_SCORE);
+			}
 
 			TopDocs hits;
 			if (pageParams.getPage() > 1) {// 不是第一页
@@ -906,6 +936,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
 				cmpIds.add(StringUtils.isEmpty(cmpId) ? null : Long.valueOf(cmpId));
 				String goId = document.get(SearchConstants.GOODS_GO_ID_FIELD);
 				goIds.add(StringUtils.isEmpty(goId) ? null : Long.valueOf(goId));
+				System.out.println(cmpId + "\t" + goId + "\t" + scoreDoc.score);
 			}
 			map.put("componentIds", cmpIds);
 			map.put("goodsIds", goIds);

+ 2 - 1
search-console/src/main/webapp/WEB-INF/views/console.html

@@ -16,9 +16,10 @@
 					<li><a target="_blank">search/kinds/电阻</a></li>
 					<li><a target="_blank">search/brandIds/Panasonic</a></li>
 					<li><a target="_blank">search/brands/Panasonic</a></li>
-					<li>search/componentIds?keyword=a&page=1&size=5&filters={"kindId":401,"brandId":45,"reserve":true,"sample_qty":true,"original_qty":true,"inaction_stock_qty":true,"properties":{"275":"92%20dB","781":"Tube"}}</li>
+					<li>search/componentIds?keyword=a&page=1&size=5&filters={"COMPONENT_KINDID":401,"COMPONENT_BRANDID":45,"COMPONENT_HAS_RESERVE":true,"COMPONENT_HAS_SAMPLE":true,"COMPONENT_HAS_ORIGINAL":true,"COMPONENT_HAS_INACTION_STOCK":true,"COMPONENT_PROPERTIES":{"275":"92%20dB","781":"Tube"}}</li>
 					<li><a target="_blank">search/componentIds?keyword=aaa</a></li>
 					<li><a target="_blank">search/components?keyword=aaa</a></li>
+					<li>search/goodsIds?keyword=aaa&page=1&size=8&filter={"GOODS_KINDID":401,"GOODS_BRANDID":45}&sort=[{"field":"GO_RESERVE","reverse":true},{"field":"GO_MINPRICERMB","reverse":true},{"field":"GO_MINPRICEUSD","reverse":true},{"field":"GO_SEARCH"}]</li>
 					<li><a target="_blank">search/goodsIds?keyword=aaa</a></li>
 				</ol>