Update EsProductServiceImpl.java

This commit is contained in:
macro 2020-04-06 10:33:43 +08:00
parent 5890a3e31e
commit 88a684c08d

View File

@ -178,16 +178,21 @@ public class EsProductServiceImpl implements EsProductService {
filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("keywords", keyword), filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("keywords", keyword),
ScoreFunctionBuilders.weightFactorFunction(2))); ScoreFunctionBuilders.weightFactorFunction(2)));
filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("brandId", brandId), filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("brandId", brandId),
ScoreFunctionBuilders.weightFactorFunction(10))); ScoreFunctionBuilders.weightFactorFunction(5)));
filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("productCategoryId", productCategoryId), filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("productCategoryId", productCategoryId),
ScoreFunctionBuilders.weightFactorFunction(6))); ScoreFunctionBuilders.weightFactorFunction(3)));
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(builders)
.scoreMode(FunctionScoreQuery.ScoreMode.SUM) .scoreMode(FunctionScoreQuery.ScoreMode.SUM)
.setMinScore(2); .setMinScore(2);
//用于过滤掉相同的商品
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
boolQueryBuilder.mustNot(QueryBuilders.termQuery("id",id));
//构建查询条件
NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder(); NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
builder.withQuery(functionScoreQueryBuilder); builder.withQuery(functionScoreQueryBuilder);
builder.withFilter(boolQueryBuilder);
builder.withPageable(pageable); builder.withPageable(pageable);
NativeSearchQuery searchQuery = builder.build(); NativeSearchQuery searchQuery = builder.build();
LOGGER.info("DSL:{}", searchQuery.getQuery().toString()); LOGGER.info("DSL:{}", searchQuery.getQuery().toString());
@ -212,12 +217,12 @@ public class EsProductServiceImpl implements EsProductService {
//聚合搜索商品属性去除type=1的属性 //聚合搜索商品属性去除type=1的属性
AbstractAggregationBuilder aggregationBuilder = AggregationBuilders.nested("allAttrValues","attrValueList") AbstractAggregationBuilder aggregationBuilder = AggregationBuilders.nested("allAttrValues","attrValueList")
.subAggregation(AggregationBuilders.filter("productAttrs",QueryBuilders.termQuery("attrValueList.type",1)) .subAggregation(AggregationBuilders.filter("productAttrs",QueryBuilders.termQuery("attrValueList.type",1))
.subAggregation(AggregationBuilders.terms("attrIds") .subAggregation(AggregationBuilders.terms("attrIds")
.field("attrValueList.productAttributeId") .field("attrValueList.productAttributeId")
.subAggregation(AggregationBuilders.terms("attrValues") .subAggregation(AggregationBuilders.terms("attrValues")
.field("attrValueList.value")) .field("attrValueList.value"))
.subAggregation(AggregationBuilders.terms("attrNames") .subAggregation(AggregationBuilders.terms("attrNames")
.field("attrValueList.name")))); .field("attrValueList.name"))));
builder.addAggregation(aggregationBuilder); builder.addAggregation(aggregationBuilder);
NativeSearchQuery searchQuery = builder.build(); NativeSearchQuery searchQuery = builder.build();
return elasticsearchTemplate.query(searchQuery, response -> { return elasticsearchTemplate.query(searchQuery, response -> {