diff --git a/framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java b/framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java index 564d0ecd..2f0759d6 100644 --- a/framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java +++ b/framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java @@ -44,4 +44,7 @@ public class EsGoodsSearchDTO { @ApiModelProperty(hidden = true) private Map> notShowCol = new HashMap<>(); + @ApiModelProperty("当前商品skuId,根据当前浏览的商品信息来给用户推荐可能喜欢的商品") + private String currentGoodsId; + } diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java index 620d3bd8..e77d5bce 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java @@ -363,6 +363,9 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { //对查询条件进行处理 this.commonSearch(filterBuilder, searchDTO); + //智能推荐 + this.recommended(filterBuilder,searchDTO); + //未上架的商品不显示 filterBuilder.must(QueryBuilders.matchQuery("marketEnable", GoodsStatusEnum.UPPER.name())); //待审核和审核不通过的商品不显示 @@ -401,6 +404,36 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { return nativeSearchQueryBuilder; } + /** + * 商品推荐 + * @param filterBuilder + * @param searchDTO + */ + private void recommended(BoolQueryBuilder filterBuilder, EsGoodsSearchDTO searchDTO) { + EsGoodsIndex currentGoodsIndice = null; + if(CharSequenceUtil.isNotEmpty(searchDTO.getCurrentGoodsId())){ + //查询当前商品的信息 + NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder(); + NativeSearchQuery build = searchQueryBuilder.build(); + build.setIds(Arrays.asList(searchDTO.getCurrentGoodsId())); + List esGoodsIndices = restTemplate.multiGet(build, EsGoodsIndex.class, restTemplate.getIndexCoordinatesFor(EsGoodsIndex.class)); + if(esGoodsIndices==null || esGoodsIndices.size()<1){ + return; + } + currentGoodsIndice = esGoodsIndices.get(0); + } + //推荐相同分类的商品 + String categoryPath = currentGoodsIndice.getCategoryPath(); + if(CharSequenceUtil.isNotEmpty(categoryPath)){ + //匹配二级分类 + String substring = categoryPath.substring(0, categoryPath.lastIndexOf(",")); + filterBuilder.must(QueryBuilders.wildcardQuery("categoryPath",substring+"*")); + } + + //排除当前商品 + filterBuilder.mustNot(QueryBuilders.matchQuery("id",searchDTO.getCurrentGoodsId())); + } + /** * 查询属性处理 *