A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不太想网名 初级黑马   /  2019-8-14 14:47  /  747 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

(1)qingcheng_interface工程新增接口  SkuSearchService  服务接口新增方法定义

    public interface SkuSearchService {
   
        public Map search(Map<String,String> searchMap);
   
    }

(2)qingcheng_service_goods工程新增服务实现类SkuSearchServiceImpl  实现此方法,实现关键字查询

    @Service
    public class SkuSearchServiceImpl implements SkuSearchService {
   
        @Autowired
        private RestHighLevelClient restHighLevelClient;
   
        public Map search(Map<String,String> searchMap) {
   
            //1.封装查询请求
            SearchRequest searchRequest=new SearchRequest("sku");
            searchRequest.types("doc"); //设置查询的类型
   
            SearchSourceBuilder searchSourceBuilder=new SearchSourceBuilder();
   
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();//布尔查询构建器
   
            //1.1 关键字搜索
            MatchQueryBuilder matchQueryBuilder= QueryBuilders.matchQuery("name",searchMap.get("keywords"));
            boolQueryBuilder.must(matchQueryBuilder);
   
            searchSourceBuilder.query(boolQueryBuilder);
            searchRequest.source(searchSourceBuilder);
   
   
            //2.封装查询结果
            Map resultMap=new HashMap();
            try {
                SearchResponse searchResponse  = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
                SearchHits searchHits = searchResponse.getHits();
                long totalHits = searchHits.getTotalHits();
                System.out.println("记录数:"+totalHits);
                SearchHit[] hits = searchHits.getHits();
   
                //2.1 商品列表
                List<Map<String,Object>> resultList=new ArrayList<Map<String, Object>>();
                for(SearchHit hit:hits){
                    Map<String, Object> skuMap = hit.getSourceAsMap();
                    resultList.add(skuMap);
                }
                resultMap.put("rows",resultList);
   
            } catch (IOException e) {
                e.printStackTrace();
            }
            return resultMap;
        }
   
    }

(3)qingcheng_web_portal工程新增类

    @Controller
    public class SearchController {
   
        @Reference
        private SkuSearchService skuSearchService;
   
        @GetMapping("/search")
        public String search(Model model, @RequestParam Map<String, String> searchMap) throws Exception {
            //字符集处理
            searchMap = WebUtil.convertCharsetToUTF8(searchMap);
            //远程调用接口
            Map result = skuSearchService.search(searchMap);        
            model.addAttribute("result", result);
            return "search";
        }
    }

WebUtil类是工具类,用于字符集转码,资源中提供

1.3.3 模板构建

(1)qingcheng_web_portal工程新增模板,将资源\静态原型\网站前台\search.htm拷贝到WEB-INF下,并进行以下修改

    <html xmlns:th="http://www.thymeleaf.org">

遍历查询结果

    <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>

测试  浏览器输入 http://localhost:9102/search.do?keywords=手机

(2)修改index.html的关键字搜索表单

    <form action="/search.do" class="sui-form form-inline">
            <!--searchAutoComplete-->
            <div class="input-append">
                    <input type="text" name="keywords" id="autocomplete" class="input-error input-xxlarge" />
                    <button class="sui-btn btn-xlarge btn-danger" >搜索</button>
            </div>
    </form>

修改search.html的关键字搜索表单,内容同上

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马