【Solr4.7.0学习笔记】系列之一:ik智能分词(需要导入lucene4.7jar包)

来源:互联网 发布:b站小学生知乎 编辑:程序博客网 时间:2024/06/05 09:22
/**
      * ik分词
      * @param userName
      * @param i
      * @return
      */
     public List<UserInfo> searchUserInfoList(String userName,int i){
           //智能分词-----------------------
          CharTermAttribute ta= null;   
          String params= "";
           try {              
              IKAnalyzer analyzer = new IKAnalyzer();        
               //使用智能分词
              analyzer.setUseSmart( true);
              TokenStream Stream = analyzer.tokenStream("sName" , new StringReader(userName));          
               ta=Stream.addAttribute(CharTermAttribute. class);
              Stream.reset();              
               for (;Stream.incrementToken(); ) {              
                    //userName +="sName:"+ ta+"+";//不可以
                    //userName +="sName:"+ ta+" ";//可以
                   params += "sName:"+ta+" OR " ;                
              }
              Stream.end();
          } catch (IOException e1) {            
              e1.printStackTrace();
          }
           //-----------------------------end
          List<UserInfo> list= new ArrayList<UserInfo>();
          UserInfo user= null;
          HttpSolrServer server=SolrServer.getInstance ().getServer ();
          SolrQuery query= new SolrQuery();      
          String para= "";
           if(params != null){
               if (params.lastIndexOf("OR" ) != -1)
                   params= params.substring(0,params.lastIndexOf("OR" ));
              para=params;
          }    
          query.addSort( "sNo",ORDER.asc );       
           //query.setQuery("sName:"+userName);
          query.set( "q",para);//说明:set比setQuery的范围大一些,如果是 ik分词建议用set
         query.setStart(i); //设置"其实位置":表示从结果集的第几条数据开始显示。默认下标是0开始
         query.setRows(10); //设置每页显示的行数        
         //设置高亮显示---------------------
         query.setHighlight( true);//开启高亮功能       
         query.addHighlightField( "sName");//高亮字段
         query.setHighlightSimplePre( "<font color=\"red\">"); //渲染标签
         query.setHighlightSimplePost( "</font>"); //渲染标签
         QueryResponse response;
         try {
          response=server.query(query);              
          SolrDocumentList dlist=response.getResults();      
           //第一个Map的键是文档的ID,第二个Map的键是高亮显示的字段名 
          Map<String, Map<String, List<String>>> map = response.getHighlighting();     
           for(int j=0;j<dlist.size();j++){
               user= new UserInfo();
               SolrDocument d=dlist.get(j); //获取每一个document            
               String sName2=  this.toString (( map.get(((Integer)d.get("sNo" )).toString())).get("sName")) ;             
               user.setSname(sName2);            
               list.add(user);
          }
         } catch (SolrServerException e) {           
              e.printStackTrace();
          }      
           return list;
     }
效果:
 
 
1 0
原创粉丝点击