Solr4.3之检索建议suggest
原文链接: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里配置的代码:
<searchComponent name="suggest" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">string</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">my_word</str>
<float name="threshold">0.0001</float>
<!-- 使用自定义suggest词库词可以将如下两行的注释取消
<str name="sourceLocation">suggest.txt</str>
<str name="spellcheckIndexDir">spellchecker</str>
-->
<str name="comparatorClass">freq</str>
<str name="buildOnOptimize">true</str>
<str name="buildOnCommit">true</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.count">10</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.extendedResults">false</str>
<str name="spellcheck.collate">true</str>
<!--<str name="spellcheck.build">true</str> -->
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
至此,我们就可以启动solr服务,在UI页面使用/suggest请求,进行测试,下面给出solrj的代码
public List<String> suggest(String word)throws Exception{
List<String> wordList=new ArrayList<String>();
SolrQuery query = new SolrQuery();
query.set("q", "my_word:"+word);//查询的词
query.set("qt", "/suggest");//请求到suggest中
query.set("spellcheck.count", "10");//返回数量
QueryResponse rsp = server.query(query);
// System.out.println("直接命中:"+rsp.getResults().size());
//…上面取结果的代码
SpellCheckResponse re=rsp.getSpellCheckResponse();//获取拼写检查的结果集
if (re != null) {
for(Suggestion s:re.getSuggestions()){
List<String> list=s.getAlternatives();//获取所有 的检索词
for(String spellWord:list){
System.out.println(spellWord);
wordList.add(spellWord);
}
return wordList;//建议词汇
}
// List<Collation> list=re.getCollatedResults();//
String t=re.getFirstSuggestion(word);//获取第一个推荐词
System.out.println("推荐词:"+t);
// for(Collation c:list){
//
// System.out.println("推荐词:"+c.getCollationQueryString());
// }
}
return null;
}
最后,我们就在 WEB项目中,使用ajax+suggest+keyup事件,就可以实现类似百度输入框的功能了
Solr4.3之检索建议suggest的更多相关文章
- Solr6 Suggest(智能提示)
1.介绍 Solr从1.4开始便提供了检查建议,检索建议目前是各大搜索的标配应用,主要作用是避免用户输入错误的搜索词,同时将用户引导到相应的关键词搜索上.通常,我们将其称为搜索联想. 其效果如图所示. ...
- 智能提示(一) Solr (suggest)
电商搜索中要实现这么一块功能,当输入文字时候.下拉框提示.类似于百度搜索 在师出名门的基于lucene的solr搜索引擎中.提供了 拼写检查和智能提示这块功能. 拼写检查就是用来检查用户输入的检索 ...
- Solr调研总结
http://wiki.apache.org/solr/ Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境 ...
- solr教程,值得刚接触搜索开发人员一看
http://blog.csdn.net/awj3584/article/details/16963525 Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍sol ...
- Solr总结
http://www.cnblogs.com/guozk/p/3498831.html Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注 ...
- 【转载】solr教程,值得刚接触搜索开发人员一看
转载:http://blog.csdn.net/awj3584/article/details/16963525 Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍 ...
- Solr调研总结(转)
Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试.两个核心配置文件介绍.中文分词器配置.维护索引 ...
- Solr调研总结(很详细很全面)
Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在 ...
- solr入门教程-较详细
Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在 ...
随机推荐
- Hark的数据结构与算法练习之梳排序
算法说明梳排序是交换排序的一种,它其实也是改自冒泡排序,不同之处是冒泡排序的比较步长恒定为1,而梳排序的比较步长是变化的. 步长需要循环以数组长度除以1.3,到最后大于等于1即可. 光说可能比较抽象, ...
- Open Xml SDK 引文
什么是Open Xml SDK? 什么是Open Xml? 首先,我们得知道,Open Xml为何物? 我们还是给她起个名字——就叫 “开放Xml”,以方便我们中文的阅读习惯.之所以起开放这个名字,因 ...
- HDU 1533 & KM模板
题意 求二分图最小完备匹配. SOL 建个图那么方便的事情是吧...然后边权都是正的(好像根边权也没什么关系),既然要求最小那么把边权取个相反数跑个KM就好了.. CODE: /*========== ...
- c/c++ 关于swap的不同写法
利用模板 template<typename T>inline void swap(T& a, T& b){ T tmp = a; a = b; b = tmp; } 利用 ...
- ARC指南2 - ARC的开启和禁止
要想将非ARC的代码转换为ARC的代码,大概有2种方式: 1.使用Xcode的自动转换工具 2.手动设置某些文件支持ARC 一.Xcode的自动转换工具 Xcode带了一个自动转换工具,可以将旧的源代 ...
- Qt 学习资料
Qter开源社区http://www.qter.org/ [Qt教程], 作者yafeilinux [视频] QT学习之路:从入门到精通 <C++ Qt 编程视频教程>
- ICursor查询后的排序问题
为某表做剔除整合处理,各行相关.起初使用 ICursor pCursor = pTable.Search(null,false); 语句查询,ICursor的第一行并没有指向表的第一行,虽然不是第一行 ...
- android开发事件监听
第一种:匿名内部类作为事件监听器类 大部分时候,事件处理器都没有什么利用价值(可利用代码通常都被抽象成了业务逻辑方法),因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适, ...
- Windows 8.1/2012R2在脱机模式下安装.NET Framework 3.5
Windows 8.1 1. 插入 Windows 8 DVD 或装载 ISO 映像.在E:\sources\sxs文件夹中找到此功能的源.(本例中为E:\用户的用户已在其加载 Windows 8 ...
- hudson安装
Hudson 只是一个持续集成服务器(持续集成工具),要想搭建一套完整的持续集成管理平台, SVN.Maven.Sonar 等工具按需求整合则可. 1. 安装 JDK 并配置环境变量(略) J ...