拼写检查功能,能在搜索时,提供一个较好用户体验,所以,主流的搜索引擎都有这个功能。

那么什么是拼写检查,其实很好理解,就是你输入的搜索词,可能是你输错了,也有可能在它的检索库里面根本不存在这个词,但是这时候它能给你返回,相似或相近的结果来帮助你校正。
举个例子,假如你在百度里面输入在在线电瓶,可能它的索引库里面就没有,但是它有可能返回在线电影,在线电视,在线观看等等一些词,这些,就用到拼写检查的功能了。

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拼写检查配置的更多相关文章

  1. solr拼写检查代码逻辑

    自定义的solr搜索系统作为web应用发布到tomcat后,运行过程中其搜索代码逻辑如下: 用户solr搜索应用发送搜索请求URL,solr应用的org.apache.solr.servlet.Sol ...

  2. solr特点四: SpellCheck(拼写检查)

    接下来,我将介绍如何向应用程序添加 “您是不是要找……”(拼写检查). 提供拼写建议 Lucene 和 Solr 很久以前就开始提供拼写检查功能了,但直到添加了 SearchComponent架构之后 ...

  3. solr入门之solr的拼写检查功能的应用级别尝试

    今天主要是收集了些拼写检查方面的资料和 尝试使用一下拼写检查的功能--=遇到了不少问题 拼写检查的四种配置眼下我仅仅算是成功了半个吧 --------------------------------- ...

  4. Solr.NET快速入门(四)【相似查询,拼写检查】

    相似查询 此功能会返回原始查询结果中返回的每个文档的类似文档列表. 参数通过QueryOptions的MoreLikeThis属性定义. 示例:搜索"apache",为结果中的每个 ...

  5. Solr4.3之拼写检查Spellcheck功能

    原文地址:http://www.656463.com/article/iaquii.htm 拼写检查功能,能在搜索时提供一个较好用户体验,所以,主流的搜索引擎都有这个功能,在这之前,笔者先简单的说一下 ...

  6. 1.7.7 Spell Checking -拼写检查

    1. SpellCheck SpellCheck组件设计的目的是基于其他,相似,terms来提供内联查询建议.这些建议的依据可以是solr字段中的terms,外部可以创建文本文件, 或者其实lucen ...

  7. Solr记录-solr介绍及配置

    Solr是一个开源搜索平台,用于构建搜索应用程序. 它建立在Lucene(全文搜索引擎)之上. Solr是企业级的,快速的和高度可扩展的. 使用Solr构建的应用程序非常复杂,可提供高性能. 为了在C ...

  8. 关闭英文拼写检查,关闭xml验证

    http://blog.sina.com.cn/s/blog_70b623e4010173ce.html eclipse里面的许多设置对于国内开发者日常使用不太适用,反而会成为干扰.既然是完全可配置的 ...

  9. lucene拼写检查模块

    Lucene是Apache发布的开源搜索引擎开发工具包,不仅提供了核心的搜索功能,还提供了许多其他功能插件,例如:拼写检查功能模块. 搜索拼写检查模块实现类在lucene-suggest-x.xx.x ...

随机推荐

  1. XDocument和XmlDocument的区别

    刚开始使用Xml的时候,没有注意到XDocument和XmlDocument的区别,后来发现两者还是有一些不同的. XDocument和XmlDocument都可以用来操作XML文档,XDocumen ...

  2. Visual studio 2008 的语法高亮插件 NShader

    前段时间一直在使用matlab,今天需要使用vs2008,而用惯了matlab,习惯了其中一项选中变量高亮的设置,突然回来使用VS,感到各种不适应,顿时想到了一个词:矫情 呵呵,于是在网上找各种插件, ...

  3. 账户管理命令 useradd、groupadd

    内容提要: 1. 掌握用户的 增/删/改 命令 2. 掌握组的 增/删/改 命令 组管理 1)groupadd groupadd 用于添加组账号.格式如下: groupadd [-g GID] GRO ...

  4. DLL程序的创建步骤和測试程序

    首先,创建DLL程序 然后,加入一个导出类 比如: //Test.h #pragma once class AFX_EXT_CLASS Test { public:  Test(void);  ~Te ...

  5. vs2008试用期到期解决办法

    vs2008试用期结束之后,     在“控制面板”中启动“添加删除程序”,      选中Vs2008,点击“更改.删除”,      在出现的维护模式对话框中, 选择下一步,输入下面的CD-Key ...

  6. 安卓扫码:简单的ZXing使用记录

    ZXing是Google提供的条形码.二维码等的生成.解析的库.最近工作需求去研究了一下,主要是研究怎么扫描二维码(QRCode).网上教程也不少,但大多看了不明所以,甚至看了半天都不知道解码到底从哪 ...

  7. Upgrade to Python 2.7.9 on CentOS5.5

    1. Install python2.7 #cd /tmp #wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz --no-ch ...

  8. 1247 排排站 USACO(查分+hash)

    /* 暴力查分 n*n */ #include<cstdio> #include<cstring> #include<iostream> #define maxn ...

  9. LINQ的基本用法

    1.var q =from c in db.Customers select c.ContactName; 这个语句只是一个声明或者一个描述,并没有真正把数据取出来,只有当你需要该数据的时候,它才会执 ...

  10. 正则表达式中/i,/g,/m的作用

    一./i (ignorCase)忽略大小写,注意仅是忽略大小写,并不忽略全半角. 二./g (globle)全文查找出现的所有匹配字符 三./m 1.(mutiple)多行查找2.m 影响 ^.$.3 ...