当前位置: 代码迷 >> 综合 >> solr 的数据添加到索引库,查询显示高亮
  详细解决方案

solr 的数据添加到索引库,查询显示高亮

热度:30   发布时间:2023-11-17 03:38:08.0

1.添加数据到索引库:

   @RequestMapping(value="/importData")
    @ResponseBody
    public String importData() throws SolrServerException, IOException{
      //  查处表里面的所有的数据
      List<lianxi> lianxiList =    lianxiservice.importData();
      // 创建solrServer 
      SolrServer solrServer = new HttpSolrServer("http://39.105.34.119:8010/solr");
      for(lianxi x : lianxiList){
          // 创建一个solr文档
          SolrInputDocument doc = new SolrInputDocument();
          // id , name_mz , sex , age 必须要放到 schema.xml 中配置  ,如下图

         


          doc.setField("id", x.getId());
          doc.setField("name_mz", x.getName());
          doc.setField("sex", x.getSex());
          doc.setField("age", x.getAge());
          // 将文档添加进去
          solrServer.add(doc);
          // 提交
          solrServer.commit();
      }
      return "success";
    }

 

2 . 查询数据,并且高亮显示:

       @RequestMapping(value="/check")
    public String check(@RequestParam(value="pn",defaultValue="1") Integer pn,Model model,HttpServletRequest request)                           throws Exception{
        String name = null;
        if(request.getParameter("name") != null){  // 前端页面穿过来的关键词
            name = new String(request.getParameter("name").getBytes("iso-8859-1"), "utf-8");
        }
         String url = "http://localhost:8012/lianxi/check?name=" + name;   // 为了构建分页对象使用
         int pageSize = 2; // 每页显示f
         List<lianxi> lianxiList = new ArrayList<lianxi>(); 
         SolrServer solrServer = new HttpSolrServer("http://ip地址:8010/solr");
         SolrQuery solrQuery = new SolrQuery(); // 构建查询对象
         // 关键词 name_mz 必须在 schema.xml 中有配置
         solrQuery.set("q", "name_mz:"+name);
         // 过滤条件
         solrQuery.setStart(pn);  // 从第几条开始查
         solrQuery.setRows(2); // 每一页显示2条
         // 高亮
         solrQuery.setHighlight(true); // 开启高亮
         solrQuery.addHighlightField("name_mz"); //  给哪一个field 加上高亮(样式  字体等)
         solrQuery.setHighlightSimplePre("<span style='color:red'>");
         solrQuery.setHighlightSimplePost("</span>");
         // 排序     age 在 schema.xml 中必须有配置
         solrQuery.addSort("age", ORDER.asc);
         // 执行查询
         QueryResponse response = solrServer.query(solrQuery);
         // 如果有高亮的话取出高亮
         Map<String,Map<String,List<String>>> hightlight =  response.getHighlighting();

         // 下面解释了 取出的高亮的集合的含义
         /* Map K : V    3(id) : Map
            Map K : V    name_mz : List<String>
            List<String> 我的家(列表上面显示的值)*/
         
         // 结果集
         SolrDocumentList solrlist = response.getResults();
         // 发现的条数构建分页
         long num = solrlist.getNumFound(); // 总的条数
         for(SolrDocument solr : solrlist){

             // 取出值 id 在schema.xml 中必须有配置
             String id = (String)solr.get("id");
             

             // 通过 id 取出Map里面的Map ,里面的map再通过 name_mz键取出List集合,list集合的第一个元素就是通过关键词查处       的值
             Map <String,List<String>> map = hightlight.get(id);
             List<String> list = map.get("name_mz");
             

            // 取出值 sex 在schema.xml 中必须有配置
             String sex = (String)solr.get("sex");

            // 取出值 age在schema.xml 中必须有配置
             int age = (Integer) solr.get("age");
             

            // 构建lianxi 对象 
             lianxi lx = new lianxi(id, list.get(0), sex, String.valueOf(age));
             lianxiList.add(lx);
             System.out.println(lx.toString());
         }
         
             // 创建PageBean对象及一系列的参数
            PageBean<lianxi> pageBean = new PageBean<lianxi>(pn, pageSize, (int)num);
            pageBean.setList(lianxiList); // 将数据放到页面
            pageBean.setUrl(url);
            
            // 传到页面
            model.addAttribute("page", pageBean);
            return "listSolr";
    }

  相关解决方案