zoukankan      html  css  js  c++  java
  • e3商城_day07

    一.solr业务域配置

      1.确定数据库中哪些表的哪些字段需要作为业务域,再schame.xml中定义业务域;定义域的同时,有些域可能要进行分词,所以得在schame.xml中配置fieldType元素的中文分析器(域,中文分析器以及分析器的配置文件等都是预先在solr服务器上配置好的)

      2.业务数据导入索引库,有两种方式:

        》借助一个导入数据的第三方插件(在这里由于业务逻辑就不用)

        》通过业务代码查询数据库,返回的数据通过solrj导入到索引库(采用)

        (1)建立e3-search工程,参照e3-content的目录结构创建,并去除掉一些搜索服务中不需要的文件

        (2)查询数据库的操作并不是单表,逆向工程的接口就用不了,自己手动写一个mapper接口,mapper.xml

        (3)查询的商品列表要封装成一个pojo对象,在common的pojo包下创建实体类:SearchItem

          (4)在search-dao书写mapper和mapper.xml

          (5)search-service书写调用mapper的查询接口和导入索引库的接口

        (6)在manager-web下书写新的controller,引用search-service

        (7)dubbo暴露服务和引用服务

    二.搜索系统工程的搭建

      1.根据potal-web的目录结构,创建search-web工程

    三.商品搜索-dao;书写一个方法,参数是query对象,执行query返回封装了商品列表和总记录数的pojo对象

        @Override
        public SearchResult getSearchItemLsitAndRecordCounts(SolrQuery query) throws SolrServerException {
            
            //执行查询
            QueryResponse response = solrServer.query(query);
            
            //得到文档集
            SolrDocumentList docList = response.getResults();
            
            //创建searchResult
            SearchResult searchResult = new SearchResult();
            
            //得到记录数并设置
            long recordCounts = docList.getNumFound();
            
            searchResult.setRecordCounts((int) recordCounts);
            
            //创建List<SearchItem>
            List<SearchItem> itemList = new ArrayList<SearchItem>();
            
            //得到高光的map
            Map<String, Map<String, List<String>>> map = response.getHighlighting();
            
            //遍历文档集,完成数据的转移,得到list
            for (SolrDocument solrDocument : docList) {
                
                SearchItem item = new SearchItem();
                
                item.setId((String) solrDocument.get("id"));
                
                List<String> list = map.get( (String) solrDocument.get("id") ).get("title");
                String title = "";
                
                if( list != null && list.size()>0 ) {
                    //高光
                    title = list.get(0);
                }else {
                    //无高光
                    title = (String) solrDocument.get("title");
                }
                
                item.setTitle(title);
                
                //添加item到itemList
                itemList.add(item);
            }
            
            //设置list
            searchResult.setSearchItemList(itemList);
            
            //返回SearchResult
            return searchResult;
        }

    四.商品搜索-service

    @Service
    public class SearchServiceImpl implements SearchService {
    
        @Autowired
        private SolrDao solrDao;
        
        public SearchResult search(String keyword, Integer page, Integer rows) {
            
            //创建查询对象
            SolrQuery query = new SolrQuery();
            
            //设置查询条件
                //设置查找域
                //设置查找数
                //设置高亮
            
            query.setQuery(keyword);
            //设置默认域
            query.set("df", "keyword");
            
            //若page小于1
            if( page < 1 ) page = 1;
            
            query.setStart( (page -1 ) * rows);
            query.setRows(rows);
            
            //设置高亮
            query.setHighlight(true);
            query.addHighlightField("title");
            query.setHighlightSimplePre("<em>");
            query.setHighlightSimplePost("</em>");
            
            //调用dao,得到SearchResult
            try {
                SearchResult result = solrDao.getSearchItemLsitAndRecordCounts(query);
                
                Integer temp = result.getRecordCounts()/rows;
                
                //总页数
                Integer PageCounts = result.getRecordCounts()%rows==0?temp:temp+1;
                
                //设置总页数
                result.setPageCounts(PageCounts);
                
                //返回SearchResult
                return result;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
    }

    四.商品搜索-controller

    @Controller
    public class SearchController {
    
        @Autowired
        private SearchService searchService;
        
        @RequestMapping("/search")
        public String getSearchItemList(String keyword,
                @RequestParam(defaultValue = "1")Integer page,Model model) {
            
            SearchResult result = searchService.search(keyword, page, 10);
            
            //商品列表
            model.addAttribute("itemList", result.getSearchItemList());
            //总记录数
            model.addAttribute("recordCounts",result.getRecordCounts());
            //总页数
            model.addAttribute("pageCounts",result.getPageCounts());
            
            return "search.jsp";
        }
    }
  • 相关阅读:
    推送(评论,点赞,关注)
    php组成数组
    week6 10 后端backend server和mongoDB通信
    week06 09 NodeJS Server as a RPCclient
    week06 08 postman 测试jsonrpc
    week06 07 创建RPC SERVER 换个镜像安装下载
    week05 06绑定滚动条 去抖动
    week05 05restful api
    week5 04 npm run build
    week5 03 continus loading news
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/13542077.html
Copyright © 2011-2022 走看看