最近实现了一个拼音检索
向大家介绍一下
1.用solr suggest自动匹配 在 solrconfig.xml添加这样配置
<searchComponent name="suggest" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">string</str><!--2012-03-27-->
<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">text</str>
<float name="threshold">0.005</float>
<str name="buildOnCommit">true</str>
<str name="comparatorClass">freq</str>
<str name="sourceLocation">../dic/dict.txt</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.onlyMorePopular">true</str>
<str name="spellcheck.count">10</str>
<str name="spellcheck.collate">true</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
二 调用
/**
* <p> 方法名:suggester </p>
* <p> 功能:用于自动搜索,拼音查询查询匹配相近关键字</p>
* <p> 作者:陈佳 </p>
* <p> 编写日期:2011-12-12</p>
* <p> 查询参数:parame </p>
*/
public JSONObject suggester(String preste){
List list=new ArrayList<String>();
String bsString=cp.intercepted(preste);
SolrQuery q = new SolrQuery().setQueryType("/suggest").setQuery(bsString);
QueryResponse queryResponse;
JSONArray arr=new JSONArray();
JSONObject json = new JSONObject();
try {
log.info(q);
queryResponse = ad.solrServer.query(q);
try {
List tags =(List) ((NamedList) ((NamedList) ((NamedList)queryResponse.getResponse().get("spellcheck")).get("suggestions")).get(bsString)).get("suggestion");
for(int i=0;i<tags.size();i++){
JSONObject obj=new JSONObject();
String [] bStrings=tags.get(i).toString().split(" ");
Map<String, String> map= queryCount(bStrings[1].toString());
obj.put("name", bStrings[1]);
obj.put("count",map.get("count"));
arr.put(obj);
}
json.put("flag", "1");
json.put("resp_data", arr);
// json.put("value", preste);
} catch (Exception e) {
json.put("flag", "0");
return json;
}
} catch (Exception e) {
e.printStackTrace();
log.info(e+"Search类中的|suggester()|查询失败");
return json;
}
return json;
}