1、介绍
Solr从1.4开始便提供了检查建议,检索建议目前是各大搜索的标配应用,主要作用是避免用户输入错误的搜索词,同时将用户引导到相应的关键词搜索上。通常,我们将其称为搜索联想。
其效果如图所示。在Solr中,实现该功能的模块叫做suggest。
2、配置
配置manage-schema
<fieldType name&#61;"text_mmseg4j_simple" class&#61;"solr.TextField" positionIncrementGap&#61;"100"><analyzer><tokenizer class&#61;"com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode&#61;"simple"/>analyzer>fieldType><field name&#61;"text" type&#61;"text_mmseg4j_simple" termVectors&#61;"true" indexed&#61;"true" stored&#61;"true"/><field name&#61;"suggestion" type&#61;"text_mmseg4j_simple" indexed&#61;"true" stored&#61;"true" termVectors&#61;"true" multiValued&#61;"true" /><copyField source&#61;"text" dest&#61;"suggestion" />
配置solrconfig.xml
<searchComponent class&#61;"solr.SpellCheckComponent" name&#61;"suggest"><str name&#61;"queryAnalyzerFieldType">text_spellstr><lst name&#61;"spellchecker"><str name&#61;"name">suggeststr><str name&#61;"classname">org.apache.solr.spelling.suggest.Suggesterstr><str name&#61;"lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookupstr><str name&#61;"field">suggestionstr><float name&#61;"threshold">0.0001float><str name&#61;"spellcheckIndexDir">spellcheckerstr><str name&#61;"comparatorClass">freqstr><str name&#61;"buildOnOptimize">truestr>lst>searchComponent><requestHandler class&#61;"org.apache.solr.handler.component.SearchHandler"name&#61;"/suggest"><lst name&#61;"defaults"><str name&#61;"spellcheck">truestr><str name&#61;"spellcheck.dictionary">suggeststr><str name&#61;"spellcheck.onlyMorePopular">truestr><str name&#61;"spellcheck.extendedResults">falsestr><str name&#61;"spellcheck.count">10str><str name&#61;"spellcheck.collate">truestr>lst><arr name&#61;"components"><str>suggeststr>arr>requestHandler><queryConverter name&#61;"phraseQueryConverter" class&#61;"org.apache.solr.spelling.SpellingQueryConverter"/>
3、重启solr&#xff0c;索引数据
4、效果预览
5、java代码查询
private static void getSuggest(String message) throws SolrServerException, IOException{SolrQuery params &#61; new SolrQuery();params.set("qt", "/suggest");
// params.setQuery("中国");
params.setQuery(message);QueryResponse response &#61; null;response &#61; solr.query(params);String suggest &#61; response.toString();suggest &#61; suggest.replace("&#61;",":");System.out.println(suggest);JSONObject obj &#61; new JSONObject(suggest);Stack
JsonToMap(stObj,resultMap);}else {resultMap.put(key, value);}}}