拼写检查功能,能在搜索时,提供一个较好用户体验,所以,主流的搜索引擎都有这个功能。
那么什么是拼写检查,其实很好理解,就是你输入的搜索词,可能是你输错了,也有可能在它的检索库里面根本不存在这个词,但是这时候它能给你返回,相似或相近的结果来帮助你校正。
举个例子,假如你在百度里面输入在在线电瓶,可能它的索引库里面就没有,但是它有可能返回在线电影,在线电视,在线观看等等一些词,这些,就用到拼写检查的功能了。
solr是一个基于lucene开发接口实现的成熟的搜索系统,通过不同的控件(Component)实现不同的搜索功能,其中一个SpellCheckComponent实现了拼写检查功能。
要在搜索过程中添加拼写检查功能,必须在solr的solrconfig.xml中配置spellcheck控件,并在相关SearchHandler(select/query等)中添加拼写检查参数配置。
配置如下:
<!-- Spell Check The spell check component can return a list of alternative spelling
suggestions. http://wiki.apache.org/solr/SpellCheckComponent
-->
<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> <!-- 将输入关键词当做text_general类型进行处理 -->
<str name="queryAnalyzerFieldType">text_general</str> <!-- Multiple "Spell Checkers" can be declared and used by this
component
--> <!-- a spellchecker built from a field of the main index -->
<lst name="spellchecker">
<!-- 拼写检查模块名 -->
<str name="name">default</str>
<!-- 对索引中的哪个字段进行拼写检查 -->
<str name="field">text</str>
<!-- 自定义拼写检查,可以用自定义拼写检查类代替默认类 -->
<str name="classname">solr.DirectSolrSpellChecker</str>
<!-- 拼写检查编辑距离, 默认使用internal levenshtein -->
<str name="distanceMeasure">internal</str>
<!-- minimum accuracy needed to be considered a valid spellcheck suggestion -->
<float name="accuracy">0.5</float>
<!-- 最大编辑距离,与输入字符串编辑距离小于等于2的字符串被检索出来作为纠错结果 -->
<int name="maxEdits">2</int>
<!-- 与输入字符串最少有一个字符相等,才能被检索出来 -->
<int name="minPrefix">1</int>
<!-- maximum number of inspections per result. 一次纠错探测最大数量 -->
<int name="maxInspections">5</int>
<!-- 纠错元词最小长度,元词长度小于4不进行纠错 -->
<int name="minQueryLength">4</int>
<!-- maximum threshold of documents a query term can appear to be considered for correction -->
<float name="maxQueryFrequency">0.01</float>
<!-- uncomment this to require suggestions to occur in 1% of the documents
<float name="thresholdTokenFrequency">.01</float>
-->
</lst> <!-- a spellchecker that can break or combine words. 不同实现的拼写检查模块 -->
<lst name="spellchecker">
<str name="name">wordbreak</str>
<str name="classname">solr.WordBreakSolrSpellChecker</str>
<str name="field">text</str>
<str name="combineWords">true</str>
<str name="breakWords">true</str>
<int name="maxChanges">10</int>
</lst> <!-- 使用不同编辑距离的拼写检查模块 -->
<!--
<lst name="spellchecker">
<str name="name">jarowinkler</str>
<str name="field">spell</str>
<str name="classname">solr.DirectSolrSpellChecker</str>
<str name="distanceMeasure">
org.apache.lucene.search.spell.JaroWinklerDistance
</str>
</lst>
--> <!-- a spellchecker that use an alternate comparator comparatorClass be one of:
1. score (default)
2. freq (Frequency first, then score)
3. A fully qualified class name
-->
<!--
<lst name="spellchecker">
<str name="name">freq</str>
<str name="field">lowerfilt</str>
<str name="classname">solr.DirectSolrSpellChecker</str>
<str name="comparatorClass">freq</str>
--> <!-- A spellchecker that reads the list of words from a file -->
<!--
<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>
配置好SpellCheckComponent组件后,需要配置相应的SearchHandler,在正式搜索系统应用中需要配置select和query,自己测试时可以自定义一个,如:spell,配置如下:
<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="df">text</str>
<!-- 下边配置了两个拼写检查子模块,是前边定义好的default和wordbreak,solr会分别用两个模块对输入进行拼写检查,最终将结果整合到一块 -->
<str name="spellcheck.dictionary">default</str>
<str name="spellcheck.dictionary">wordbreak</str>
<str name="spellcheck">on</str>
<!-- 为纠错后的提示词添加额外信息,如在索引中的频率 -->
<str name="spellcheck.extendedResults">true</str>
<!-- 一次纠错返回结果数量 -->
<str name="spellcheck.count">10</str>
<!-- The maximum number of suggestions to return for terms that exist in the index -->
<str name="spellcheck.alternativeTermCount">5</str>
<!-- The maximum number of results the query can return while still triggering spelling suggestions -->
<str name="spellcheck.maxResultsForSuggest">5</str>
<!-- 是否添加校验结果 -->
<str name="spellcheck.collate">true</str>
<!-- 是否添加校验拓展结果 -->
<str name="spellcheck.collateExtendedResults">true</str>
<!-- The maximum # of collation possibilities to try before giving up. -->
<str name="spellcheck.maxCollationTries">10</str>
<!-- 返回校验结果的最大数目 -->
<str name="spellcheck.maxCollations">5</str>
</lst> <!-- 必须将拼写检查控件添加到搜索控件序列中,若无此项则不进行拼写检查 -->
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
在solr中测试如下:
solr拼写检查配置的更多相关文章
-
solr拼写检查代码逻辑
自定义的solr搜索系统作为web应用发布到tomcat后,运行过程中其搜索代码逻辑如下: 用户solr搜索应用发送搜索请求URL,solr应用的org.apache.solr.servlet.Sol ...
-
solr特点四: SpellCheck(拼写检查)
接下来,我将介绍如何向应用程序添加 “您是不是要找……”(拼写检查). 提供拼写建议 Lucene 和 Solr 很久以前就开始提供拼写检查功能了,但直到添加了 SearchComponent架构之后 ...
-
solr入门之solr的拼写检查功能的应用级别尝试
今天主要是收集了些拼写检查方面的资料和 尝试使用一下拼写检查的功能--=遇到了不少问题 拼写检查的四种配置眼下我仅仅算是成功了半个吧 --------------------------------- ...
-
Solr.NET快速入门(四)【相似查询,拼写检查】
相似查询 此功能会返回原始查询结果中返回的每个文档的类似文档列表. 参数通过QueryOptions的MoreLikeThis属性定义. 示例:搜索"apache",为结果中的每个 ...
-
Solr4.3之拼写检查Spellcheck功能
原文地址:http://www.656463.com/article/iaquii.htm 拼写检查功能,能在搜索时提供一个较好用户体验,所以,主流的搜索引擎都有这个功能,在这之前,笔者先简单的说一下 ...
-
1.7.7 Spell Checking -拼写检查
1. SpellCheck SpellCheck组件设计的目的是基于其他,相似,terms来提供内联查询建议.这些建议的依据可以是solr字段中的terms,外部可以创建文本文件, 或者其实lucen ...
-
Solr记录-solr介绍及配置
Solr是一个开源搜索平台,用于构建搜索应用程序. 它建立在Lucene(全文搜索引擎)之上. Solr是企业级的,快速的和高度可扩展的. 使用Solr构建的应用程序非常复杂,可提供高性能. 为了在C ...
-
关闭英文拼写检查,关闭xml验证
http://blog.sina.com.cn/s/blog_70b623e4010173ce.html eclipse里面的许多设置对于国内开发者日常使用不太适用,反而会成为干扰.既然是完全可配置的 ...
-
lucene拼写检查模块
Lucene是Apache发布的开源搜索引擎开发工具包,不仅提供了核心的搜索功能,还提供了许多其他功能插件,例如:拼写检查功能模块. 搜索拼写检查模块实现类在lucene-suggest-x.xx.x ...
随机推荐
-
jQuery倒计时插件
倒计时jQuery插件 引言 最近又换工作了,还不错,我换工作的次数其实有点频繁,2014年7月份毕业,到现在工作已经换了3份了,工资跟刚毕业时候相比也涨了点儿,最近一次换工作我离开了深圳,来到了北京 ...
-
delphi XE Berlin ReadProcessMemory WriteProcessMemory
delphi XE,Berlin [dcc32 Error] Unit9.pas(93): E2033 Types of actual and formal var parameters must ...
-
软件测试作业3--Junit、hamcrest、eclemmat的安装和使用
1. how to install junit, hamcrest and eclemma? 首先下载下来Junit和Hamcrest的jar包,然后新建项目的时候将这两个jar包导入到工程里面就 ...
-
VC 三点 划 曲线
y = ax2+bx+c 条件,三点成一曲线 pointone(x1,y1)//(y1在X柱上,必须为零,如果不为零这个公式要重新求值) pointtwo(x2,y2)// 可以为任意值 pointt ...
-
【风马一族_Python】 安装pip与Numpy
------------------------------------------------------------------------------------------------- 原因 ...
-
16. Linux 文件目录权限
# 文件参数 d:表示是一个目录-:表示这是一个普通的文件l: 表示这是一个符号链接文件,实际上它指向另一个文件b.c:分别表示区块设备和其他的外围设备,是特殊类型的文件s.p:这些文件关系到系统的数 ...
-
Angularjs基础教程
Angularjs-基础教程 一些angualr的基础概念,适合入门. 1.下载 推荐 bower 或 npm 安装. bower install angular bower install angu ...
-
About Feature Scaling and Normalization
在进行数据处理之前,一定要想一想,你的算法是用来做什么,这样才能选择如何对数据进行预处理. 参考网站: http://sebastianraschka.com/Articles/2014_about_ ...
-
JS实现对数器
对数器的概念和使用 对数器一般用于验证你写的算法是否正确,因为自己写的测试用例可能写的考虑不够全面. 0.有一个你想测试的方法a 1.实现一个绝对正确但是时间复杂度不好的方法b 2.实现一个随机样本产 ...
-
postgresql和redis
redis 和postgresql区别以及其优缺点 一刹那者为一念,二十念为一瞬,二十瞬为一弹指,二十弹指为一罗预,二十罗预为一须臾,一日一夜有三十须臾. 那么,经过周密的计算,一瞬间为0.36 秒, ...