From 88a684c08d65ee2745ee0c8800dc3210b5604fdb Mon Sep 17 00:00:00 2001 From: macro Date: Mon, 6 Apr 2020 10:33:43 +0800 Subject: [PATCH] Update EsProductServiceImpl.java --- .../service/impl/EsProductServiceImpl.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/mall-search/src/main/java/com/macro/mall/search/service/impl/EsProductServiceImpl.java b/mall-search/src/main/java/com/macro/mall/search/service/impl/EsProductServiceImpl.java index 0008749..761df10 100644 --- a/mall-search/src/main/java/com/macro/mall/search/service/impl/EsProductServiceImpl.java +++ b/mall-search/src/main/java/com/macro/mall/search/service/impl/EsProductServiceImpl.java @@ -178,16 +178,21 @@ public class EsProductServiceImpl implements EsProductService { filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("keywords", keyword), ScoreFunctionBuilders.weightFactorFunction(2))); filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("brandId", brandId), - ScoreFunctionBuilders.weightFactorFunction(10))); + ScoreFunctionBuilders.weightFactorFunction(5))); filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("productCategoryId", productCategoryId), - ScoreFunctionBuilders.weightFactorFunction(6))); + ScoreFunctionBuilders.weightFactorFunction(3))); FunctionScoreQueryBuilder.FilterFunctionBuilder[] builders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[filterFunctionBuilders.size()]; filterFunctionBuilders.toArray(builders); FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(builders) .scoreMode(FunctionScoreQuery.ScoreMode.SUM) .setMinScore(2); + //用于过滤掉相同的商品 + BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder(); + boolQueryBuilder.mustNot(QueryBuilders.termQuery("id",id)); + //构建查询条件 NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder(); builder.withQuery(functionScoreQueryBuilder); + builder.withFilter(boolQueryBuilder); builder.withPageable(pageable); NativeSearchQuery searchQuery = builder.build(); LOGGER.info("DSL:{}", searchQuery.getQuery().toString()); @@ -212,12 +217,12 @@ public class EsProductServiceImpl implements EsProductService { //聚合搜索商品属性,去除type=1的属性 AbstractAggregationBuilder aggregationBuilder = AggregationBuilders.nested("allAttrValues","attrValueList") .subAggregation(AggregationBuilders.filter("productAttrs",QueryBuilders.termQuery("attrValueList.type",1)) - .subAggregation(AggregationBuilders.terms("attrIds") - .field("attrValueList.productAttributeId") - .subAggregation(AggregationBuilders.terms("attrValues") - .field("attrValueList.value")) - .subAggregation(AggregationBuilders.terms("attrNames") - .field("attrValueList.name")))); + .subAggregation(AggregationBuilders.terms("attrIds") + .field("attrValueList.productAttributeId") + .subAggregation(AggregationBuilders.terms("attrValues") + .field("attrValueList.value")) + .subAggregation(AggregationBuilders.terms("attrNames") + .field("attrValueList.name")))); builder.addAggregation(aggregationBuilder); NativeSearchQuery searchQuery = builder.build(); return elasticsearchTemplate.query(searchQuery, response -> {