原文链接:http://www.656463.com/article/Efm26v.htm

很多才学solr的人,都容易把solr spellcheck和solr suggest混淆,误以为他们是一样的,其实不然,他们的侧重点是不一样的,拼写检查spellcheck就是用来检查用户输入的检索内容是否存在,如果不存在,则给用户提示相近,或相似的东西,而检索建议则是用户输入某个检索条件后,会立即友好的给出一系列提示内容,并推荐首个出现的相似的词,作为推荐词。如果这个条件相关的东西一个都没有,则不会提示,所以某种意义上来说,可以在用户输入检索条件时使用suggest,而在点击完搜索时,使用拼写检查,二者结合会给用户带来比较好的用户体验。

检索建议(suggest)是依附于拼写检查组件实现的功能,所以呢spellcheck这个组件很重要,拼写检查可以作为一个功能,单独使用,但是suggest功能就不可以,必须的在拼写检查组件存在的时候可以用,否则再启动tomcat时,会报一个未知的SpellCheck组件异常。

下面进入正题,suggest的配置相对简单,主要也是有两种形式,第一种只能用主索引库里面存在的建议词,作为提示。第二种使用自定义的建议词库作为建议词,自定义的建议词文本,放在跟solrconfig.xml同一级目录下即可

F:\tomcat\webapps\solr\solr_home\collections\collection1\conf\suggest.txt

下面给出suggest在solrconfig.xml里配置的代码:

  1. <searchComponent name="suggest" class="solr.SpellCheckComponent">

  2. <str name="queryAnalyzerFieldType">string</str>

  3. <lst name="spellchecker">

  4. <str name="name">suggest</str>

  5. <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>

  6. <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>

  7. <str name="field">my_word</str>

  8. <float name="threshold">0.0001</float>

  9. <!-- 使用自定义suggest词库词可以将如下两行的注释取消

  10. <str name="sourceLocation">suggest.txt</str>

  11. <str name="spellcheckIndexDir">spellchecker</str>

  12. -->

  13. <str name="comparatorClass">freq</str>

  14. <str name="buildOnOptimize">true</str>

  15. <str name="buildOnCommit">true</str>

  16. </lst>

  17. </searchComponent>

  18. <requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">

  19. <lst name="defaults">

  20. <str name="spellcheck">true</str>

  21. <str name="spellcheck.dictionary">suggest</str>

  22. <str name="spellcheck.count">10</str>

  23. <str name="spellcheck.onlyMorePopular">true</str>

  24. <str name="spellcheck.extendedResults">false</str>

  25. <str name="spellcheck.collate">true</str>

  26. <!--<str name="spellcheck.build">true</str> -->

  27. </lst>

  28. <arr name="components">

  29. <str>suggest</str>

  30. </arr>

  31. </requestHandler>

至此,我们就可以启动solr服务,在UI页面使用/suggest请求,进行测试,下面给出solrj的代码

  1. public List<String> suggest(String word)throws Exception{

  2. List<String>  wordList=new ArrayList<String>();

  3. SolrQuery query = new SolrQuery();

  4. query.set("q", "my_word:"+word);//查询的词

  5. query.set("qt", "/suggest");//请求到suggest中

  6. query.set("spellcheck.count", "10");//返回数量

  7. QueryResponse   rsp = server.query(query);

  8. //  System.out.println("直接命中:"+rsp.getResults().size());

  9. //…上面取结果的代码

  10. SpellCheckResponse re=rsp.getSpellCheckResponse();//获取拼写检查的结果集

  11. if (re != null) {

  12. for(Suggestion s:re.getSuggestions()){

  13. List<String> list=s.getAlternatives();//获取所有 的检索词

  14. for(String spellWord:list){

  15. System.out.println(spellWord);

  16. wordList.add(spellWord);

  17. }

  18. return wordList;//建议词汇

  19. }

  20. // List<Collation> list=re.getCollatedResults();//

  21. String t=re.getFirstSuggestion(word);//获取第一个推荐词

  22. System.out.println("推荐词:"+t);

  23. //       for(Collation c:list){

  24. //

  25. //           System.out.println("推荐词:"+c.getCollationQueryString());

  26. //       }

  27. }

  28. return null;

  29. }

最后,我们就在 WEB项目中,使用ajax+suggest+keyup事件,就可以实现类似百度输入框的功能了

Solr4.3之检索建议suggest的更多相关文章

  1. Solr6 Suggest(智能提示)

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

  2. 智能提示(一) Solr (suggest)

    电商搜索中要实现这么一块功能,当输入文字时候.下拉框提示.类似于百度搜索 在师出名门的基于lucene的solr搜索引擎中.提供了 拼写检查和智能提示这块功能.   拼写检查就是用来检查用户输入的检索 ...

  3. Solr调研总结

    http://wiki.apache.org/solr/ Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境 ...

  4. solr教程,值得刚接触搜索开发人员一看

    http://blog.csdn.net/awj3584/article/details/16963525 Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍sol ...

  5. Solr总结

    http://www.cnblogs.com/guozk/p/3498831.html Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注 ...

  6. 【转载】solr教程,值得刚接触搜索开发人员一看

    转载:http://blog.csdn.net/awj3584/article/details/16963525 Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍 ...

  7. Solr调研总结(转)

    Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试.两个核心配置文件介绍.中文分词器配置.维护索引 ...

  8. Solr调研总结(很详细很全面)

    Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在 ...

  9. solr入门教程-较详细

    Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在 ...

随机推荐

  1. div垂直居中 css div盒子上下垂直居中

    div垂直居中 css div盒子上下垂直居中,让DIV盒子在任何浏览器中任何分辨率的显示屏浏览器中处于水平居中和上下垂直居中. div垂直居中常用于单个盒子,如一个页面里只有一个登录布局,使用div ...

  2. 前端JSON使用总结

    JSON: JavaScript Object Notation(JavaScript 对象表示法)的简称. 1. 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaS ...

  3. 找规律/数位DP HDOJ 4722 Good Numbers

    题目传送门 /* 找规律/数位DP:我做的时候差一点做出来了,只是不知道最后的 is_one () http://www.cnblogs.com/crazyapple/p/3315436.html 数 ...

  4. POJ1699 Best Sequence(AC自动机+状压DP)

    题目,求包含所有的给定的n个DNA片段的序列的最短长度. AC自动机上的DP题. dp[S][u]表示已经包含的DNA片段集合为S,且当前后缀状态是自动机第u个结点的最短长度 dp[0][0]=0 我 ...

  5. 详解Adorner Layer(zz)

    首先,千万不要觉得Adorner离你很远,因为最简单的WPF界面也会用到Adorner.在WPF中,下面的几个很常见的功能,都是用Adorner实现的.     1. 光标(caret)     2. ...

  6. BZOJ4342 : CF348 Pilgrims

    可以发现,每个特殊点可以贡献的部分在树上是一条链. 设三元组(v,x,y)表示路径长度,需要更新的端点,与当前点的lca为y. 对于每个节点x,通过两遍树形DP可以求出: d[x]:x到x子树内的某个 ...

  7. POJ 3661 (线性DP)

    题目链接: http://poj.org/problem?id=3661 题目大意:牛跑步.有N分钟,M疲劳值.每分钟跑的距离不同.每分钟可以选择跑步或是休息.一旦休息了必须休息到疲劳值为0.0疲劳值 ...

  8. [转]单例模式——C++实现自动释放单例类的实例

    [转]单例模式——C++实现自动释放单例类的实例 http://www.cnblogs.com/wxxweb/archive/2011/04/15/2017088.html http://blog.s ...

  9. AspNetPager常用属性及一些样式(本文摘自网络,作者:x123jing)

    AlwaysShow 总是显示分页控件,即使要分页的数据只有一页 AlwaysShowFirsLastPageNumbr 是否总是显示第一页和最后一页数字页索引按钮 BackImageUrl 面板的背 ...

  10. MySQL 服务器的加快运行速度有哪些方法?

    关于 MySQL 调优 有 3 种方法可以加快 MySQL 服务器的运行速度,效率从低到高依次为: 替换有问题的硬件.对 MySQL 进程的设置进行调优. 对查询进行优化. 替换有问题的硬件通常是我们 ...