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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不太想网名 初级黑马   /  2019-8-14 14:46  /  940 人查看  /  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 个回复

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