(1)后端使用匹配查询和布尔查询 (2)前端使用thymeleaf模板渲染 (3)前端向后端传递map(因为提交的不仅仅是关键字,还有品牌、规格、分类等信息) (4)后端向前端返回map(因为返回的不仅仅是列表,还有商品分类、品牌和规格列表等数据) 1.3 代码实现1.3.1 集成elasticsearch高级客户端(1)qingcheng_service_goods工程pom.xml新增依赖(2)qingcheng_service_goods工程新增工厂类(3)qingcheng_service_goods工程applicationContext-service.xml新增配1.3.2 关键字搜索逻辑 (1)qingcheng_interface工程新增接口 SkuSearchService 服务接口新增方法定义(2)qingcheng_service_goods工程新增服务实现类SkuSearchServiceImpl 实现此方法,实现关键字查询<ul class="yui3-g"> <li class="yui3-u-1-5" th:each="sku:${result.rows}"> <div class="list-wrap"> <div class="p-img"> <a href="item.html" target="_blank"><img th:src="${sku.image}" /></a> </div> <div class="price"> <strong> <em>¥</em> <i th:text="${#numbers.formatDecimal(sku.price/100.0,0,2)}"></i> </strong> </div> <div class="attr"> <em th:text="${sku.name}"></em> </div> <div class="operate"> <a href="success-cart.html" target="_blank" class="sui-btn btn-bordered btn-danger">加入购物车</a> <a href="javascript:void(0);" class="sui-btn btn-bordered">收藏</a> </div> </div> </li></ul> 点击商品分类,按商品分类对结果进行过滤查询,并且在查询条件列表中添加已经选择的商品分类标签,隐藏搜索面板中的商品分类一行。 点击条件标签的“×”,取消该过滤条件 2.2 实现思路(1)商品分类列表的显示使用聚合查询 (2)使用过滤查询//2.2 商品分类列表Aggregations aggregations = searchResponse.getAggregations();Map<String, Aggregation> aggregationMap = aggregations.getAsMap();Terms terms = (Terms) aggregationMap.get("sku_category");List<? extends Terms.Bucket> buckets = terms.getBuckets();List<String> categoryList=new ArrayList();for( Terms.Bucket bucket:buckets ){ categoryList.add(bucket.getKeyAsString());}resultMap.put("categoryList",categoryList);
|