1、介绍

    Solr从1.4开始便提供了检查建议,检索建议目前是各大搜索的标配应用,主要作用是避免用户输入错误的搜索词,同时将用户引导到相应的关键词搜索上。通常,我们将其称为搜索联想。

  其效果如图所示。在Solr中,实现该功能的模块叫做suggest。

    

  2、配置

    配置manage-schema

<fieldType name="text_mmseg4j_simple" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple"/>
</analyzer>
</fieldType>
<field name="text" type="text_mmseg4j_simple" termVectors="true" indexed="true" stored="true"/>
<field name="suggestion" type="text_mmseg4j_simple" indexed="true" stored="true" termVectors="true" multiValued="true" />
<copyField source="text" dest="suggestion" />

  配置solrconfig.xml

 <searchComponent class="solr.SpellCheckComponent" name="suggest">
<str name="queryAnalyzerFieldType">text_spell</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">suggestion</str>
<!-- the indexed field to derive suggestions from -->
<float name="threshold">0.0001</float>
<str name="spellcheckIndexDir">spellchecker</str>
<str name="comparatorClass">freq</str>
<str name="buildOnOptimize">true</str>
<!--<str name="buildOnCommit">true</str>-->
</lst>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler"
name="/suggest">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.extendedResults">false</str>
<str name="spellcheck.count">10</str>
<str name="spellcheck.collate">true</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler> <queryConverter name="phraseQueryConverter" class="org.apache.solr.spelling.SpellingQueryConverter"/>

  3、重启solr,索引数据

     

  4、效果预览

    

  5、java代码查询

 private static void getSuggest(String message) throws SolrServerException, IOException{
SolrQuery params = new SolrQuery();
params.set("qt", "/suggest");
// params.setQuery("中国");
params.setQuery(message);
QueryResponse response = null;
response = solr.query(params);
String suggest = response.toString();
suggest = suggest.replace("=",":"); System.out.println(suggest);
JSONObject obj = new JSONObject(suggest);
Stack<JSONObject> stObj = new Stack<JSONObject>();
stObj.push(obj);
Map<String, Object> resultMap =new HashMap<String, Object>();
JsonToMap(stObj,resultMap);
if(resultMap.containsKey("suggestion")){
System.out.println("suggestion:"+resultMap.get("suggestion"));
}
} /**
* @Author:sks
* @Description:把json对象数据存储在map以键值对的形式存储,只存储叶节点
* @Date:
*/
private static void JsonToMap(Stack<JSONObject> stObj,Map<String, Object> resultMap) throws SolrServerException, IOException{ if(stObj == null && stObj.pop() == null){
return ;
}
JSONObject json = stObj.pop();
Iterator it = json.keys();
while(it.hasNext()){
String key = (String) it.next();
//得到value的值
Object value = json.get(key);
//System.out.println(value);
if(value instanceof JSONObject)
{
stObj.push((JSONObject)value);
//递归遍历
JsonToMap(stObj,resultMap);
}
else {
resultMap.put(key, value);
}
}
}

最新文章

  1. [异常解决] ubuntukylin16.04 LTS中关于flash安装和使用不了的问题解决
  2. [转]C# 使用Nlog记录日志到数据库
  3. Java 实现批量重命名,亲测可用(精简版)
  4. webapp之meta
  5. 30 algorithm questions study
  6. mysql参数sql_log_bin
  7. R语言---热图的制作
  8. Java——String.split()函数
  9. ASP.NET 开发学习视频教程大全(共800集)
  10. jquery的queue方法
  11. PHP 调用asp.net Web Services服务问题总结
  12. jQuery插件制作
  13. .NET+Ajax+ashx 实现Echarts图表动态交互
  14. qt中控件的使用函数
  15. 壁虎书1 The Machine Learning Landscape
  16. springcloud第二步:发布服务提供者
  17. Jenkins强制语言设置
  18. fcn训练及预测tgs数据集
  19. java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration] with root cause
  20. PHP日历的算法

热门文章

  1. gpio子系统和pinctrl子系统(上)
  2. Jmeter4.0启动闪退问题解决方案
  3. 动态加载ajax 腾讯视频评论
  4. docker从零开始 存储(二)volumes 挂载
  5. centos内核参数调优
  6. 杀掉MYSQL死锁进程
  7. nginx [error] open() &quot;/usr/local/nginx/logs/nginx.pid&quot; failed的解决
  8. 一分钟了解ruby中的单测
  9. magento 搬家
  10. 安装mezzanine时报:storing debug log for failure【已解决】