拼写检查功能,能在搜索时,提供一个较好用户体验,所以,主流的搜索引擎都有这个功能。在这之前,笔者先简单的说一下什么是拼写检查,其实很好理解,就是你输入的搜索词,可能是你输错了,也有可能在它的检索库里面根本不存在这个词,但是这时候它能给你返回,相似或相近的结果来帮助你校正。
举个例子,假如你在百度里面输入在在线电瓶,可能它的索引库里面就没有,但是它有可能返回在线电影,在线电视,在线观看等等一些词,这些,就用到拼写检查的功能了。
solr作为一种开源的搜索服务器,对拼写检查,也提供了良好的支持,那么下面笔者就来讲下关于solr4.3的拼写检查的配置,在这之前先说明一点,作为拼写检查用,为了提高校正的准确率,一般对校正的词,不要进行分词,所以用string就好了,拼写检查的配置主要是在solrconfig.xml里面配置.
1,拼写组件SpellCheckComponent配置
2,在SearchHandler /select里面配置
3,在SearchHandler /spell里面配置
按照上面3来,就可以快速配置好拼写检查功能了,其实笔者上面写的4步,其实只配置2,3步就可以了,另外的第4步用默认值就可以了,在这里把它写出来,只是让大家有个认识
拼写组件SpellCheckComponent它其实是核心的东西,在他的里面可以配置1至多个拼写检查器,启动的时候所有的检查器都会加载,这次笔者主要介绍的有2个拼写检查器,一个是默认的只对主索引做拼写校正,另外一个是自定义加载spellings.txt拼写检查库,带拼写校正索引库的检查器,其他的检查器各位道友想要使用的话就自己去看wiki了。
Java代码
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<!-- 查询分析器,如果不指定的话,默认会使用field字段类型的分词器 -->
<str name="queryAnalyzerFieldType">string</str>
<!-- 默认的校正器,只对主索引库管用 -->
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">my_word</str>
<str name="classname">solr.DirectSolrSpellChecker</str>
<str name="distanceMeasure">internal</str>
<float name="accuracy">0.7</float>
<int name="maxEdits">1</int>
<int name="minPrefix">1</int>
<int name="maxInspections">5</int>
<int name="minQueryLength">4</int>
<float name="maxQueryFrequency">0.01</float>
</lst>
<!-- 读取拼写检查库的索引进行校正可以,使用默认配置,取消注释即可 -->
<lst name="spellchecker">
<str name="classname">solr.FileBasedSpellChecker</str>
<str name="name">file</str>
<str name="sourceLocation">spellings.txt</str>
<str name="characterEncoding">UTF-8</str>
<str name="spellcheckIndexDir">spellcheckerFile</str>
</lst>
</searchComponent>
对于上面的代码,虽然可以加载多个校正器,但是在拼写检查时,只能指定特定的一个进行校正,那么为什么要配置多个校正检查器呢? 笔者个人感觉这个主要是方便在程序运行可以动态切换校正器。
在spellings.txt里面自定义的拼写检查词,注意编码的格式一定是要UTF-8无BOM的格式,这里面的词,会在solr服务启动时,自动创建spellcheckerFile文件夹并把内容加载到
Java代码
F:\eclipse10tomcat\webapps\solr\solr_home\collections\collection1\data\spellcheckerFile
索引起来。
SearchHandler /select这个检索请求里面的配置很重要,拼写检查是否启用就是在这里面配置,
Java代码
<requestHandler name="/select" class="solr.SearchHandler">
<!-- default values for query parameters can be specified, these
will be overridden by parameters in the request
-->
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">text</str>
</lst>
<!-- 这行代码非常重要,如果没有这行,拼写检查,是不起作用的-->
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
SearchHandler /spell组件使用默认配置即可
Java代码
<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="df">text</str>
<str name="spellcheck.dictionary">direct</str>
<str name="spellcheck">on</str>
<str name="spellcheck.extendedResults">true</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.collateExtendedResults">true</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
至此,拼写检查功能已经配置完毕,可以用solr的UI页面进行主索引测试,也可以用spellCheckFile里面的副索引,测试,但是,一次只能使用一种校正方法
下面给出solrj代码
Java代码
public List<String> spellcheck(String word){
List<String> wordList=new ArrayList<String>();
SolrQuery query = new SolrQuery();
//query.set("q","name:ac");
//query.set("qt", "/spell");
//默认是主索引
query.set("q", "my_word:"+word+"");
query.set("qt", "/select");
//query.set("spellcheck.build", "true");//遇到新的检查词,会自动添加到索引里面
//query.set("spellcheck.dictionary", "file");//使用副索引,checkSpellFile里面的进行使用
query.set("spellcheck", "true");
query.set("spellcheck.count", Integer.MAX_VALUE);
// params.set("spellcheck.build", "true");
try {
QueryResponse rsp = server.query(query);
System.out.println("直接命中:"+rsp.getResults().size());
SolrDocumentList ss=rsp.getResults();
for(SolrDocument doc:ss){
System.out.println(doc.get("my_word"));
}
//…上面取结果的代码
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);
}
}
// for(Collation s: spellCheckResponse.getCollatedResults()){
// System.out.println(s.toString());
// }
}
return wordList;
} catch (SolrServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
最后,笔者关于拼写检查还有一个问题没有搞清楚,就是使用spellings.txt里面的自定义词,检索时只能检索出长度大于2的词,希望各位看到此篇文章的读者也测试一下,找一下解决方法。
http://qindongliang1922.iteye.com/blog/1900192
相关推荐
Solr4.3是Apache Solr的一个早期版本,它是一个基于Lucene的全文搜索服务器,提供了高可配置、可扩展的搜索和分析功能。Solr4.3源代码的获取通常是为了深入理解其内部工作原理,进行定制开发或优化。在你提供的信息...
在你提供的资料中,"solr4.3源代码二"显然是Solr 4.3版本的源代码包,这将包含Solr的核心组件和相关配置。通过SVN下载的源代码表明,你可以追踪代码的历史版本,这对于理解和解决潜在问题非常有帮助。 首先,我们来...
solr4.3 分词器 把IKAnalyzer.jar放到solr\WEB-INF\lib下。
ik-analyzer-5.01-for solr4.3.jar
最新版solr4.3的IK分词器,中文分词效果良好!对付一般的大众分词没有问题
最高版本的 solr 中文分词配置 , 小弟已经测试过了 里面的 jar 要到各官网上下载
ik4solr4.3(不再维护,未来可能删除:请去 ) solr4.3的ik分词器(改了一些smart分词算法。使用maven编译),隔壁有我写的包 支持从solr自己的环境中获取自定义词典(使用solr的ResourceLoader,只需要把字典文件...
solr4.3.0中所有的jar包,稳定,快速搜索引擎
solr4.3相关的jar包,包含httpclient-4.3.4.jar、httpcore-4.3.2.jar、httpmime-4.3.1.jar、IKAnalyzer2012.jar、slf4j-api-1.6.6.jar、slf4j-log4j12-1.6.6.jar、solr-solrj-4.3.0.jar、zookeeper-3.4.5.jar等
tomcat7下实现solr4.3的部署与配置,配置中文服务器。通过solrj实现索引的创建,修改,删除,查询。并实现httpclienct创建、修改索引,检索信息等。
- **拼写纠正**:利用SpellChecker组件提供拼写建议。 - **高亮显示**:突出显示查询结果中的关键词。 - **近实时搜索**(NRT):在数据更新后,几乎立即反映在搜索结果中。 7. **优化与性能** - **缓存机制**...
同时,你可以利用Solr的 faceting(分面搜索)、highlighting(高亮显示)、spell checking(拼写检查)等功能来提高用户体验。此外,Solr还支持实时添加和更新文档,以及高效的近实时搜索。 在部署和使用Solr时,...
5. **Spell Checking(拼写检查)**:Solr内置了拼写检查器,能自动纠正用户的搜索输入,提高搜索命中率。 6. **XML/JSON等多格式支持**:Solr支持多种数据导入方式,如XML、CSV、JSON等,方便不同来源的数据集成。...
9. **拼写纠错**:Solr内置了拼写检查功能,当用户输入错误的关键词时,系统可以提供正确的建议。 10. **地理空间搜索**:Solr支持地理空间搜索,可以基于地理位置进行范围查询和距离排序。 11. **XML/JSON API**...
Lucene,作为Apache软件基金会下的一个开源全文检索库,为Java开发者提供了强大的文本搜索功能。其核心功能包括文档的索引、搜索以及相关性排序。Lucene 4.3.0是该库的一个重要版本,它在前代的基础上进行了多项优化...
这些jar包在特定场景下会发挥重要作用,例如solr-clustering.jar提供了集群和导航功能,solr-spellcheck.jar支持拼写检查。 对于描述中提到的"版本统一",这意味着所有的jar包应为同一版本的Solr发布。这是因为不同...
【课程大纲】第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之...
【课程大纲】第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之...
Solr的核心功能是提供高效的全文检索、命中高亮、拼写检查、分类、 faceting(分面导航)和更多其他高级功能。它基于Lucene库,提供了更易用的API和配置方式,使得开发者可以快速搭建搜索引擎。 华为FusionInsight ...
Solr在其之上添加了更多高级特性,如 faceting(分面搜索),highlighting(高亮显示),以及更复杂的查询语法。 4. **配置文件**:压缩包中的配置文件包括`solrconfig.xml`和`schema.xml`。`solrconfig.xml`定义了...