优化商品索引搜索
This commit is contained in:
parent
d704e2eb55
commit
6d09bd4987
@ -6,6 +6,7 @@ import cn.lili.modules.order.cart.entity.enums.CartTypeEnum;
|
|||||||
import cn.lili.modules.promotion.tools.PromotionTools;
|
import cn.lili.modules.promotion.tools.PromotionTools;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
@ -19,6 +20,7 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class CartSkuVO extends CartBase implements Serializable {
|
public class CartSkuVO extends CartBase implements Serializable {
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,6 +56,9 @@ import java.util.*;
|
|||||||
@Service
|
@Service
|
||||||
public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
|
public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
|
||||||
|
|
||||||
|
// 最小分词匹配数
|
||||||
|
private static final String MINIMUM_SHOULD_MATCH = "1";
|
||||||
|
|
||||||
private static final String ATTR_PATH = "attrList";
|
private static final String ATTR_PATH = "attrList";
|
||||||
private static final String ATTR_VALUE = "attrList.value";
|
private static final String ATTR_VALUE = "attrList.value";
|
||||||
private static final String ATTR_NAME = "attrList.name";
|
private static final String ATTR_NAME = "attrList.name";
|
||||||
@ -540,7 +543,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
|
|||||||
|
|
||||||
FunctionScoreQueryBuilder.FilterFunctionBuilder[] builders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[filterFunctionBuilders.size()];
|
FunctionScoreQueryBuilder.FilterFunctionBuilder[] builders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[filterFunctionBuilders.size()];
|
||||||
filterFunctionBuilders.toArray(builders);
|
filterFunctionBuilders.toArray(builders);
|
||||||
FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(builders)
|
FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(QueryBuilders.matchQuery("goodsName", keyword).operator(Operator.OR).minimumShouldMatch(MINIMUM_SHOULD_MATCH), builders)
|
||||||
.scoreMode(FunctionScoreQuery.ScoreMode.SUM)
|
.scoreMode(FunctionScoreQuery.ScoreMode.SUM)
|
||||||
.setMinScore(2);
|
.setMinScore(2);
|
||||||
//聚合搜索则将结果放入过滤条件
|
//聚合搜索则将结果放入过滤条件
|
||||||
@ -556,7 +559,7 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
|
|||||||
private List<FunctionScoreQueryBuilder.FilterFunctionBuilder> buildKeywordSearch(String keyword) {
|
private List<FunctionScoreQueryBuilder.FilterFunctionBuilder> buildKeywordSearch(String keyword) {
|
||||||
List<FunctionScoreQueryBuilder.FilterFunctionBuilder> filterFunctionBuilders = new ArrayList<>();
|
List<FunctionScoreQueryBuilder.FilterFunctionBuilder> filterFunctionBuilders = new ArrayList<>();
|
||||||
// operator 为 AND 时 需全部分词匹配。为 OR 时 需配置 minimumShouldMatch(最小分词匹配数)不设置默认为1
|
// operator 为 AND 时 需全部分词匹配。为 OR 时 需配置 minimumShouldMatch(最小分词匹配数)不设置默认为1
|
||||||
MatchQueryBuilder goodsNameQuery = QueryBuilders.matchQuery("goodsName", keyword).operator(Operator.OR).minimumShouldMatch("2");
|
MatchQueryBuilder goodsNameQuery = QueryBuilders.matchQuery("goodsName", keyword).operator(Operator.OR).minimumShouldMatch(MINIMUM_SHOULD_MATCH);
|
||||||
//分词匹配
|
//分词匹配
|
||||||
filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(goodsNameQuery,
|
filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(goodsNameQuery,
|
||||||
ScoreFunctionBuilders.weightFactorFunction(10)));
|
ScoreFunctionBuilders.weightFactorFunction(10)));
|
||||||
@ -564,11 +567,11 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService {
|
|||||||
filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.nestedQuery(ATTR_PATH, QueryBuilders.wildcardQuery(ATTR_VALUE, "*" + keyword + "*"), ScoreMode.None),
|
filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.nestedQuery(ATTR_PATH, QueryBuilders.wildcardQuery(ATTR_VALUE, "*" + keyword + "*"), ScoreMode.None),
|
||||||
ScoreFunctionBuilders.weightFactorFunction(8)));
|
ScoreFunctionBuilders.weightFactorFunction(8)));
|
||||||
|
|
||||||
GaussDecayFunctionBuilder skuNoScore = ScoreFunctionBuilders.gaussDecayFunction("skuSource", 50, 10, 50).setWeight(7);
|
GaussDecayFunctionBuilder skuNoScore = ScoreFunctionBuilders.gaussDecayFunction("skuSource", 50, 10, 50).setWeight(2);
|
||||||
FunctionScoreQueryBuilder.FilterFunctionBuilder skuNoBuilder = new FunctionScoreQueryBuilder.FilterFunctionBuilder(goodsNameQuery, skuNoScore);
|
FunctionScoreQueryBuilder.FilterFunctionBuilder skuNoBuilder = new FunctionScoreQueryBuilder.FilterFunctionBuilder(goodsNameQuery, skuNoScore);
|
||||||
filterFunctionBuilders.add(skuNoBuilder);
|
filterFunctionBuilders.add(skuNoBuilder);
|
||||||
|
|
||||||
FieldValueFactorFunctionBuilder buyCountScore = ScoreFunctionBuilders.fieldValueFactorFunction("buyCount").modifier(FieldValueFactorFunction.Modifier.LOG1P).setWeight(6);
|
FieldValueFactorFunctionBuilder buyCountScore = ScoreFunctionBuilders.fieldValueFactorFunction("buyCount").modifier(FieldValueFactorFunction.Modifier.LOG1P).setWeight(3);
|
||||||
FunctionScoreQueryBuilder.FilterFunctionBuilder buyCountBuilder = new FunctionScoreQueryBuilder.FilterFunctionBuilder(goodsNameQuery, buyCountScore);
|
FunctionScoreQueryBuilder.FilterFunctionBuilder buyCountBuilder = new FunctionScoreQueryBuilder.FilterFunctionBuilder(goodsNameQuery, buyCountScore);
|
||||||
filterFunctionBuilders.add(buyCountBuilder);
|
filterFunctionBuilders.add(buyCountBuilder);
|
||||||
return filterFunctionBuilders;
|
return filterFunctionBuilders;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user