solr检所建议

第一步:solrconfig.xml的配置:

默认是被注释掉的,不需要打开注释,直接复制这里的配置就行。、

<searchComponent name="suggest" class="solr.SpellCheckComponent">    
  <str name="queryAnalyzerFieldType">string</str>    
  <lst name="spellchecker">      
      <str name="name">suggest</str>      
      <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>      
      <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>      
      <str name="field">suggestField</str>    
      <float name="threshold">0.0001</float>  
       
      <str name="comparatorClass">freq</str>    
      <str name="buildOnOptimize">true</str>    
      <str name="buildOnCommit">true</str>        
  </lst>      
</searchComponent>        
   
<requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">      
  <lst name="defaults">      
      <str name="spellcheck">true</str>      
      <str name="spellcheck.dictionary">suggest</str>      
      <str name="spellcheck.count">10</str>      
      <str name="spellcheck.onlyMorePopular">true</str>    
      <str name="spellcheck.extendedResults">false</str>          
      <str name="spellcheck.collate">true</str>    
      <!--<str name="spellcheck.build">true</str>  -->      
  </lst>      
  <arr name="components">      
      <str>suggest</str>      
  </arr>      
</requestHandler>  

注意:去掉第九行的中文,不然可能会启动报错


第二部:修改schema.xml

添加与上面配置的第七行的field(suggestField),这里我是用了copyField,将title拷贝到了suggestField字段

<field name="suggestField" type="string" indexed="true" stored="true" multiValued="true"/>
<copyField source="title" dest="suggestField"/>

第三部:重新索引数据

重新索引你的索引库,将数据全部更新,query全部数据,看结果是否有suggestField这个字段,如果有,就成功了,如果没有,请重复第一和第二步奏。

第四部:java代码测试

public static void main(String[] args) throws Exception {
		List list=suggest("中国");
	}
	
	public static List<String> suggest(String word)throws Exception{  
        
	       List<String>  wordList=new ArrayList<String>();  
	       SolrQuery query = new SolrQuery();  
	       query.set("q", "suggestField:"+word);//查询的词  
	       query.set("qt", "/suggest");//请求到suggest中  
	       query.set("spellcheck.count", "10");//返回数量  
	       QueryResponse   rsp = server.query(query);  
	     //  System.out.println("直接命中:"+rsp.getResults().size());                
	       //…上面取结果的代码  
	       SpellCheckResponse re=rsp.getSpellCheckResponse();//获取拼写检查的结果集  
	         
	       if (re != null) {  
	           for(Suggestion s:re.getSuggestions()){  
	            List<String> list=s.getAlternatives();//获取所有 的检索词  
	            for(String spellWord:list){  
	                System.out.println(spellWord);  
	                wordList.add(spellWord);  
	            }  
	           // return wordList;//建议词汇  
	           }  
	       // List<Collation> list=re.getCollatedResults();//  
	          String t=re.getFirstSuggestion(word);//获取第一个推荐词  
	          System.out.println("推荐词:"+t);  
	       }  
	       return null;
	   }  



以下是我的测试结果,仅供参考
中国出版理论与实务
中国出版通史·清代卷(下)
推荐词:中国出版理论与实务






你可能感兴趣的:(solr检所建议)