Authored by hugufei

去除一堆无用的排序

... ... @@ -76,6 +76,11 @@ public class SearchSortHelper {
orderValues.add("product_skn:desc");
orderValues.add("product_skn:asc");
// 拼团相关排序
orderValues.add("collage_price:asc");
orderValues.add("collage_price:desc");
orderValues.add("collage_begin_time:asc");
orderValues.add("collage_begin_time:desc");
}
/**
... ... @@ -202,8 +207,6 @@ public class SearchSortHelper {
// 都要添加次要排序条件
private void addDeafultSortBuildSorts(List<SortBuilder<?>> sortBuilders, List<String> filteredFieldNames) {
this.addSortBuildSorts(sortBuilders, filteredFieldNames, ProductIndexEsField.sevendayMoney, SortOrder.DESC);
this.addSortBuildSorts(sortBuilders, filteredFieldNames, ProductIndexEsField.salesNum, SortOrder.DESC);
this.addSortBuildSorts(sortBuilders, filteredFieldNames, ProductIndexEsField.firstShelveTime, SortOrder.DESC);
this.addSortBuildSorts(sortBuilders, filteredFieldNames, ProductIndexEsField.id, SortOrder.DESC);
}
... ...
... ... @@ -13,6 +13,7 @@ import com.yoho.search.core.es.model.SearchParam;
import com.yoho.search.core.es.model.SearchResult;
import com.yoho.search.models.SearchApiResult;
import com.yoho.search.service.helper.SearchParamHelper;
import com.yoho.search.service.helper.SearchSortHelper;
import com.yoho.search.service.index.CollageActivityIndexBaseService;
import com.yoho.search.service.index.CollageProductIndexBaseService;
import com.yoho.search.service.scene.pages.selections.PageSelectionsBrandsService;
... ... @@ -26,6 +27,7 @@ import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
import org.elasticsearch.search.sort.SortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.slf4j.Logger;
... ... @@ -33,6 +35,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.*;
@Service
... ... @@ -52,9 +55,19 @@ public class CollagePageService extends AbstractPageSceneService {
private PageSelectionsService pageSelectionsService;
@Autowired
private PageSelectionsBrandsService pageSelectionsBrandsService;
@Autowired
private SearchSortHelper searchSortHelper;
private Map<String, String> orderTransfer = new HashMap<>();
private List<Integer> collageTopSkn(Map<String, String> paramMap) {
return ConvertUtils.stringToIntList(MapUtils.getString(paramMap, "collageTopSkn", ""), ",");
@PostConstruct
void initorderTransfer() {
orderTransfer.put("sales_price:asc", "collage_price:asc");
orderTransfer.put("sales_price:desc", "collage_price:desc");
orderTransfer.put("shelve_time:asc", "collage_begin_time:asc");
orderTransfer.put("first_shelve_time:asc", "collage_begin_time:asc");
orderTransfer.put("shelve_time:desc", "collage_begin_time:desc");
orderTransfer.put("first_shelve_time:desc", "collage_begin_time:desc");
}
@Override
... ... @@ -66,6 +79,11 @@ public class CollagePageService extends AbstractPageSceneService {
paramMap.put(SearchRequestParams.PARAM_SEARCH_ISLIMITEDBUY, "N");// 不支持限购
paramMap.put(SearchRequestParams.PARAM_SEARCH_ISDESPOSITADVANCE, "N");// 不支持定金预售
paramMap.put(SearchRequestParams.PARAM_SEARCH_ISLIMITTIMEADVANCE, "N");// 不支持定金促销
//排序字段转义
String orderValue = paramMap.get("order");
if (orderValue != null && orderTransfer.containsKey(orderValue)) {
paramMap.put("order", orderTransfer.get(orderValue));
}
}
@Override
... ... @@ -73,34 +91,40 @@ public class CollagePageService extends AbstractPageSceneService {
return SearchPageIdDefine.PAGE_ID_COLLAGE;
}
private JSONObject buildReturnDataMap(long total, int page_size, int page_total, List<Map<String, Object>> list) {
JSONObject dataMap = new JSONObject();
dataMap.put("total", total);
dataMap.put("page_size", page_size);
dataMap.put("page_total", page_total);
dataMap.put("list", list);
return dataMap;
}
private BoolQueryBuilder buildCollageMustFilter(Map<Integer, Map<String, Object>> validCollageActivitys) {
BoolQueryBuilder filter = QueryBuilders.boolQuery();
filter.must(QueryBuilders.termsQuery(ProductIndexEsField.collageActivityIds, validCollageActivitys.keySet()));
return filter;
private boolean buildQueryBuilderWithScoreFirst(SearchParam searchParam, Map<String, String> paramMap) {
//1、优先展示的skn
List<Integer> collageTopSkn = ConvertUtils.stringToIntList(MapUtils.getString(paramMap, "collageTopSkn", ""), ",");
if (collageTopSkn.isEmpty()) {
return false;
}
//2、判断order是否存在
if (!StringUtils.isBlank(MapUtils.getString(paramMap, "order", null))) {
return false;
}
//3、生成FunctionScoreQueryBuilder
QueryBuilder queryBuilder = searchParam.getQuery();
YohoFilterFunctionBuilders yohoFilterFunctionBuilders = new YohoFilterFunctionBuilders();
yohoFilterFunctionBuilders.add(QueryBuilders.termsQuery(ProductIndexEsField.productSkn, collageTopSkn), ScoreFunctionBuilders.weightFactorFunction(1000));
FunctionScoreQueryBuilder functionScoreQueryBuilder = new FunctionScoreQueryBuilder(queryBuilder, yohoFilterFunctionBuilders.getFilterFunctionBuilders());
functionScoreQueryBuilder.boostMode(CombineFunction.SUM);
searchParam.setQuery(functionScoreQueryBuilder);
return true;
}
@Override
public SearchApiResult productList(Map<String, String> paramMap) {
try {
logger.info("[class=CollageService][func=searchList][param={}][begin={}]", paramMap.toString(), System.currentTimeMillis());
logger.info("[class=CollageService][func=productList][param={}]", paramMap.toString());
// 1.构造查询参数
int pageSize = MapUtils.getIntValue(paramMap,"viewNum",10);
int page = MapUtils.getIntValue(paramMap,"page",1);
int pageSize = MapUtils.getIntValue(paramMap, "viewNum", 10);
int page = MapUtils.getIntValue(paramMap, "page", 1);
if (page < 1 || pageSize < 0) {
return new SearchApiResult().setCode(400).setMessage("分页参数错误");
}
this.addParamsToParamMap(paramMap);
logger.info("[class=CollageService][func=addParamsToParamMap][param={}]", paramMap.toString());
//2、查询正在生效的活动ids
//2、查询正在生效的活动ids和mustFilter
Map<Integer, Map<String, Object>> validCollageActivitys = collageActivityIndexBaseService.queryValidActivitys(paramMap);
if (validCollageActivitys.isEmpty()) {
return new SearchApiResult().setData(buildReturnDataMap(0, pageSize, 0, new ArrayList<>())).setMessage("无正在生效的活动");
... ... @@ -109,21 +133,18 @@ public class CollagePageService extends AbstractPageSceneService {
//3、构造Pi的searchParam
SearchParam searchParam = searchParamHelper.buildWithMustFilter(paramMap, mustFilter);
searchParam.setOffset((page - 1) * pageSize);
searchParam.setSize(pageSize > 100 ? 100 : pageSize);
boolean scoreFirst = this.buildQueryBuilderWithScoreFirst(searchParam, paramMap);
//4、优先展示的skn
List<Integer> collageTopSkn = this.collageTopSkn(paramMap);
if (!collageTopSkn.isEmpty()) {
QueryBuilder queryBuilder = searchParam.getQuery();
YohoFilterFunctionBuilders yohoFilterFunctionBuilders = new YohoFilterFunctionBuilders();
yohoFilterFunctionBuilders.add(QueryBuilders.termsQuery(ProductIndexEsField.productSkn, collageTopSkn), ScoreFunctionBuilders.weightFactorFunction(1000));
FunctionScoreQueryBuilder functionScoreQueryBuilder = new FunctionScoreQueryBuilder(queryBuilder, yohoFilterFunctionBuilders.getFilterFunctionBuilders());
functionScoreQueryBuilder.boostMode(CombineFunction.SUM);
searchParam.setQuery(functionScoreQueryBuilder);
//4、设置排序规则
List<SortBuilder<?>> sortBuilders = searchSortHelper.buildSortList(paramMap);
if (scoreFirst) {
sortBuilders.add(0, SortBuilders.scoreSort().order(SortOrder.DESC));
}
//5、按打分+销量排序
searchParam.setSortBuilders(Arrays.asList(SortBuilders.scoreSort().order(SortOrder.DESC), SortBuilders.fieldSort(ProductIndexEsField.salesNum).order(SortOrder.DESC)));
searchParam.setSortBuilders(sortBuilders);
//5、设置分页参数
searchParam.setOffset((page - 1) * pageSize);
searchParam.setSize(pageSize > 100 ? 100 : pageSize);
//6、执行搜索
SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParam);
... ... @@ -182,7 +203,6 @@ public class CollagePageService extends AbstractPageSceneService {
product.put("collage_price", MapUtils.getDoubleValue(collageProductInfo, "collage_price", 0));
product.put("activity_begin_time", MapUtils.getLongValue(collageProductInfo, "activity_begin_time", 0));
product.put("activity_end_time", MapUtils.getLongValue(collageProductInfo, "activity_end_time", 0));
}
//10.构造返回结果
... ... @@ -221,4 +241,20 @@ public class CollagePageService extends AbstractPageSceneService {
}
}
private JSONObject buildReturnDataMap(long total, int page_size, int page_total, List<Map<String, Object>> list) {
JSONObject dataMap = new JSONObject();
dataMap.put("total", total);
dataMap.put("page_size", page_size);
dataMap.put("page_total", page_total);
dataMap.put("list", list);
return dataMap;
}
private BoolQueryBuilder buildCollageMustFilter(Map<Integer, Map<String, Object>> validCollageActivitys) {
BoolQueryBuilder filter = QueryBuilders.boolQuery();
filter.must(QueryBuilders.termsQuery(ProductIndexEsField.collageActivityIds, validCollageActivitys.keySet()));
return filter;
}
}
... ...