原文链接: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. CodeForces 300C --数论

    A - A Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  2. HyperLink控件

    设置链接 NavigateUrl 填写链接 text 属性 为显示内容

  3. Xamarin Anroid开发教程之Anroid开发工具及应用介绍

    Xamarin Anroid开发教程之Anroid开发工具及应用介绍 Xamarin开发Anroid应用介绍 如今智能手机已经盛行了好几年,而针对这些智能手机的软件开发也变得异常火热.但是在Andro ...

  4. ASP.NET MVC 模型和数据对象映射实践

    在使用 MVC 开发项目的过程中遇到了个问题,就是模型和数据实体之间的如何快捷的转换?是不是可以像 Entity Framework 的那样 EntityTypeConfiguration,或者只需要 ...

  5. BZOJ3838 : [Pa2013]Raper

    将选取的$A$看成左括号,$B$看成右括号,那么答案是一个合法的括号序列. 那么只要重复取出$k$对价值最小的左右括号,保证每时每刻都是一个合法的括号序列即可. 将$($看成$1$,$)$看成$-1$ ...

  6. HDU 1533 & KM模板

    题意 求二分图最小完备匹配. SOL 建个图那么方便的事情是吧...然后边权都是正的(好像根边权也没什么关系),既然要求最小那么把边权取个相反数跑个KM就好了.. CODE: /*========== ...

  7. 【wikioi】1690 开关灯(线段树)

    http://wikioi.com/problem/1690/ 这题可不能算是水题了.. 在线段树中,我只想到了lazy改变,但是没想到lazy变后size怎么变,我的策略变成了lazy为0时size ...

  8. [BZOJ 3759]Hungergame

    Nim游戏获胜的条件是所有石子的异或和为0 如果先手要获胜,那么一定是打开了一个异或和为0的极大子集 什么是极大子集呢? 就是无论后手打开任何子集的箱子,都不能再使此时打开的箱子异或和为0. 容易证明 ...

  9. shell函数

    1. 定义 : func() { } 或 function func() { } 2.参数 func 1 2 3 4 可在函数中直接调$1来使用,>=10的用${n}

  10. 五、Pillar数据管理中心

    Pillar是数据管理中心. Pillar在saltstack中主要作用是存储和定义一些配置管理中需要的信息(比如:软件版本,用户名,密码等) 修改pillar相关配置文件: [root@super6 ...