...
|
...
|
@@ -7,7 +7,6 @@ import com.yoho.search.models.SortIdInfo; |
|
|
import com.yoho.search.service.scorer.IScorer;
|
|
|
import com.yoho.search.service.scorer.YohoFilterFunctionBuilders;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.elasticsearch.index.query.BoolQueryBuilder;
|
|
|
import org.elasticsearch.index.query.QueryBuilders;
|
|
|
import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
|
...
|
...
|
@@ -21,18 +20,23 @@ public class SearchKeyWordScorer implements IScorer { |
|
|
private List<Integer> ufoBrandIds;
|
|
|
private List<Integer> yohoBrandIds;
|
|
|
private List<SortIdInfo> sortIdInfos;
|
|
|
private List<Integer> sknList;
|
|
|
private Float boost;
|
|
|
|
|
|
public SearchKeyWordScorer(CsSearchKeywordConfig searchKeywordConfig) {
|
|
|
this.productType = searchKeywordConfig.getProductType();
|
|
|
this.ufoBrandIds = ConvertUtils.stringToIntList(searchKeywordConfig.getUfoBrandIds(), ",");
|
|
|
this.yohoBrandIds = ConvertUtils.stringToIntList(searchKeywordConfig.getYohoBrandIds(), ",");
|
|
|
this.sortIdInfos = new ArrayList<>();
|
|
|
if (StringUtils.isBlank(searchKeywordConfig.getSortIds())) {
|
|
|
return;
|
|
|
}
|
|
|
List<String> sortIdInfoStrList = ConvertUtils.stringToStringList(searchKeywordConfig.getSortIds(), ";");
|
|
|
this.sortIdInfos = this.buildSortIdInfoList(searchKeywordConfig.getSortIds());
|
|
|
this.sknList = ConvertUtils.stringToIntList(searchKeywordConfig.getSkns(), ",");
|
|
|
this.boost = searchKeywordConfig.getBoost();
|
|
|
}
|
|
|
|
|
|
private List<SortIdInfo> buildSortIdInfoList(String paramSortIds) {
|
|
|
List<SortIdInfo> tempSortIdInfos = new ArrayList<>();
|
|
|
List<String> sortIdInfoStrList = ConvertUtils.stringToStringList(paramSortIds, ";");
|
|
|
if (CollectionUtils.isEmpty(sortIdInfoStrList)) {
|
|
|
return;
|
|
|
return tempSortIdInfos;
|
|
|
}
|
|
|
for (String sortIdInfoStr : sortIdInfoStrList) {
|
|
|
List<Integer> sortIds = ConvertUtils.stringToIntList(sortIdInfoStr, "-");
|
...
|
...
|
@@ -49,19 +53,22 @@ public class SearchKeyWordScorer implements IScorer { |
|
|
if (sortIds.size() >= 3) {
|
|
|
sortIdInfo.setSmallSortId(sortIds.get(2));
|
|
|
}
|
|
|
sortIdInfos.add(sortIdInfo);
|
|
|
tempSortIdInfos.add(sortIdInfo);
|
|
|
}
|
|
|
return tempSortIdInfos;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void addScorer(YohoFilterFunctionBuilders yohoFilterFunctionBuilders) {
|
|
|
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
|
|
|
|
|
|
//1、过滤商品类型
|
|
|
if (productType == 1) {
|
|
|
boolQueryBuilder.mustNot(QueryBuilders.termQuery(ProductIndexEsField.isUfo, "Y"));
|
|
|
}else if (productType == 2) {
|
|
|
} else if (productType == 2) {
|
|
|
boolQueryBuilder.must(QueryBuilders.termQuery(ProductIndexEsField.isUfo, "Y"));
|
|
|
}
|
|
|
|
|
|
//2、过滤品牌
|
|
|
if (CollectionUtils.isNotEmpty(ufoBrandIds) || CollectionUtils.isNotEmpty(yohoBrandIds)) {
|
|
|
BoolQueryBuilder brandFilters = QueryBuilders.boolQuery();
|
...
|
...
|
@@ -73,6 +80,7 @@ public class SearchKeyWordScorer implements IScorer { |
|
|
}
|
|
|
boolQueryBuilder.must(brandFilters);
|
|
|
}
|
|
|
|
|
|
//3、过滤品类
|
|
|
if (CollectionUtils.isNotEmpty(sortIdInfos)) {
|
|
|
BoolQueryBuilder sortFilters = QueryBuilders.boolQuery();
|
...
|
...
|
@@ -91,6 +99,15 @@ public class SearchKeyWordScorer implements IScorer { |
|
|
}
|
|
|
boolQueryBuilder.must(sortFilters);
|
|
|
}
|
|
|
yohoFilterFunctionBuilders.add(boolQueryBuilder, ScoreFunctionBuilders.weightFactorFunction(100));
|
|
|
|
|
|
//4、过滤skn
|
|
|
if (CollectionUtils.isNotEmpty(sknList)) {
|
|
|
boolQueryBuilder.must(QueryBuilders.termsQuery(ProductIndexEsField.productSkn, sknList));
|
|
|
}
|
|
|
|
|
|
// 5、打分器
|
|
|
if( boolQueryBuilder.hasClauses()){
|
|
|
yohoFilterFunctionBuilders.add(boolQueryBuilder, ScoreFunctionBuilders.weightFactorFunction(boost==null?100:boost));
|
|
|
}
|
|
|
}
|
|
|
} |
...
|
...
|
|