第一步: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;
}
以下是我的测试结果,仅供参考
中国出版理论与实务
中国出版通史·清代卷(下)
推荐词:中国出版理论与实务