`
lzzy_alex
  • 浏览: 30160 次
社区版块
存档分类
最新评论

Solr SpellCheck 应用

    博客分类:
  • Solr
 
阅读更多

文章目标

通过对各类型的SpellCheck组件学习,完成项目拼写检查功能。本文使用基于拼写词典的实现方式,solr版本为5.3.0。

 

SpellCheck 简述

拼写检查是对用户错误输入,响应正确的检查建议。比如输入:周杰轮,响应:你是不是想找 周杰伦 ? Solr的拼写检查大致可分为两类,基于词典与基于Solr索引。

 

基于词典的拼写检查

FileBasedSpellChecker是基于外部,自定义的拼写文件(spelling.txt)作为拼写词典,通过 n-gram与Levenshtein distance算法,生成独立的拼写索引文件,与Solr主索引无关。配置方式也非常简单,可分为以下两个步骤:

 

一:配置拼写组件(solrconfig.xml):

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
  <lst name="spellchecker">
   <str name="classname">solr.FileBasedSpellChecker</str>
   <str name="name">file</str>
   <!--词典文件(solr.home/conf/spellings.txt),为演示先在文件中添加”周杰伦”-->
   <str name="sourceLocation">spellings.txt</str>
   <str name="characterEncoding">UTF-8</str>
   <!--基于spellings.txt文件生成的拼写索引目录-->
   <str name="spellcheckIndexDir">./spellcheckerFile</str>
  </lst>
</searchComponent>

 

二:将组件添加requestHandler中:

<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
 <lst name="defaults">
    <str name="spellcheck.dictionary">file</str>
    <str name="spellcheck.count">10</str>
  </lst>
  <arr name="last-components">
    <str>spellcheck</str>
  </arr>
</requestHandler>

访问  core1/spell?spellcheck=true&spellcheck.build=true&spellcheck.q=周杰轮

Note: 参数spellcheck.build=true代表马上生成拼写索引,该操作会基于spelling.txt文件生成词典索引,是需要消耗时间的,所以正常的拼写请求不应该用它。

<lst name="spellcheck">
  <lst name="suggestions">
   <lst name="周杰轮">
    <int name="numFound">1</int>
    <int name="startOffset">0</int>
    <int name="endOffset">3</int>
    <arr name="suggestion">
     <str>周杰伦</str>
    </arr>
   </lst>
  </lst>
</lst>

 

基于索引的拼写检查

基于Solr索引(Terms)生成相关的拼写检查建议,不依赖外部拼写文件,拼写建议也可以与索引同步更新。实现方式有以下两种:

 

IndexBasedSpellCheck

 

基于当前Solr索引,生成一份并行的拼写索引。可使用CopyField将Solr索引中的某些域(如Title, Body)连接起来,构成一个拼写建议域。

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
  <lst name="spellchecker">
   <str name="classname">solr.IndexBasedSpellChecker</str>
   <str name="spellcheckIndexDir">./spellchecker</str>
   <str name="field">content</str>
   <str name="buildOnCommit">true</str>
  </lst>
</searchComponent>

classname:                    实现类名称,缺省就是solr.IndexBasedSpellChecker

spellcheckIndexDir:      拼写索引所在目录

field:                             索引中的拼写建议域, 应避免使用过多的语言处理(近义词,提干)

buildOnCommit:          是否将Solr索引的每次commit更新到拼写索引中

组件配置完成后,与上例一样,将它添加到requestHandler中就可以使用了。

 

DirectSolrSpellChecker

直接使用Solr 索引做拼写建议,从而避免在使用IndexBasedSpellChecker时对拼写索引的重复构建,确保拼写建议总是最新的。

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
  <lst name="spellchecker">
   <str name="name">default</str>
   <str name="field">content</str>
   <str name="classname">solr.DirectSolrSpellChecker</str>
   <str name="distanceMeasure">internal</str>
   <float name="accuracy">0.5</float>
   <int name="maxEdits">2</int>
   <int name="minPrefix">1</int>
   <int name="maxInspections">5</int>
   <int name="minQueryLength">4</int>
   <float name="maxQueryFrequency">0.01</float>
   <float name="thresholdTokenFrequency">.01</float>
  </lst>
</searchComponent>

field:拼写建议域,应避免使用过多的语言处理(近义词,提干),通常使用CopyFiled实现

distanceMeasure:匹配的度量标准,internal表示采用编辑距离(Levenshtein)描述匹配程度,编辑距离越小,两个串的相似度越大。

accuracy:因为是共用Solr索引,为避免SpellCheck与正常用户查询冲突而导致性能问题,使用accuracy设置有效建议的临界值,保证冲突发生时对拼写检查的访问频度。

maxEdits:最大编辑(容错)距离,即可接受的错字拼写范围,值只能是1或2(因为很少有人会连续打错2个以上的字),缺省是2。

minPrefix:Terms应该共享的最小字符个数,只有满足条件的Term才会被列入建议范围。

maxInspections:对可能命中的结果进行校验的最大数目,缺省是5条。

minQueryLength:最小查询长度,小于则不触发查询请求,缺省是4。

maxQueryFrequency:约束Term至少应该在N篇文档中出现,才有资格成为建议目标。可以使用百分比(如 .01,1%),或数值(如4)。

thresholdTokenFrequency:Term在文档集中出现的的最少次数,只有满足条件的Term才会列入建议范围。可以使用百分比或绝对数值表示。

 

Warm: 测试中对已分词(Tokenizer by mmseg4j)的中文域做拼写检查效果并不理想,只有使用原生态的域(type=string)才能出现拼写效果,可这样有违初衷,尤其在使用copyfield对长文本域(如描述)关联时。如果大家有解决的方法,请告知。

 

参阅资料

编辑距离http://baike.baidu.com/view/2020247.html

apache-solr-ref-guide-5.3.pdf

分享到:
评论

相关推荐

    solr开发应用教程

    Solr是Apache软件基金会的一个开源项目,是一款强大的全文搜索引擎,被广泛应用于企业级搜索解决方案。在本教程中,我们将深入探讨Solr 3.5版本的开发应用,重点关注其实战应用,以帮助开发者更好地理解和利用这个...

    SOLR的应用教程

    **SOLR应用教程** **一、概述** 1.1 企业搜索引擎方案选型 在为企业选择搜索引擎解决方案时,需要考虑的关键因素包括处理能力、可扩展性、易用性、性能以及对特定业务需求的支持。Solr作为一种开源的企业级搜索...

    solr简单应用操作的代码部分

    在本教程中,我们将探讨Solr的基本应用操作,特别关注代码部分。 首先,我们要了解Solr的工作原理。Solr利用Lucene库进行索引和搜索,通过HTTP协议提供服务,支持JSON、XML等多种数据交换格式。一个典型的Solr应用...

    开源企业搜索引擎SOLR的 应用教程

    ### 开源企业搜索引擎SOLR的应用教程 #### 一、概述 **1.1 企业搜索引擎方案选型** 随着互联网的发展以及用户对于信息检索需求的增长,企业级搜索引擎成为了提升用户体验的关键技术之一。针对不同的应用场景,有...

    Solr3.5开发应用指导

    ### Solr3.5开发应用指导 #### 一、概述 **1.1 企业搜索引擎方案选型** 在选择企业搜索引擎方案时,考虑到多种因素,包括但不限于开发成本、可维护性和后期扩展性等。常见的几种方案包括: 1. **基于Lucene自行...

    开源企业搜索引擎SOLR的应用教程

    Apache Solr 是一款广泛应用于企业的开源全文搜索引擎,它基于 Java 开发,并且依赖于高性能的文本分析库 Apache Lucene。本教程将深入讲解 Solr 的应用及其核心概念,帮助读者理解如何有效地使用 Solr 构建高效的...

    Solr 样例应用程序:j-solr1.zip

    Solr 提供了强大的全文检索、命中高亮、拼写检查、相关性排序等功能,广泛应用于网站、电子商务、企业内部文档搜索等多个场景。 "j-solr1.zip"这个压缩包文件,很可能是Solr的一个特定版本或者样例集合,用于帮助...

    开源企业搜索引擎SOLR的应用教程.pdf

    本文档是一个关于如何应用Apache Solr的企业教程,涵盖了安装配置、应用模式、定制索引和搜索服务、性能调优以及故障排查等多个方面。 首先,文档介绍了Solr的基本概念和特性,强调了Solr对Lucene的扩展以及支持的...

    solr简单应用操作 (一)

    solr的简单应用和讲解操作,看书和查资料完成的。

    solr3.5配置及应用

    ### Solr 3.5配置及应用知识点详解 #### 一、Solr简介 - **定义**:Apache Solr是一款高性能、开源的搜索服务器。它使用Java语言开发,并且主要基于HTTP协议和Apache Lucene技术实现。 - **数据模型**:在Solr中,...

    开源企业搜索引擎Solr的应用教程.doc

    【开源企业搜索引擎Solr的应用教程】 企业搜索引擎是现代数字化企业不可或缺的一部分,它们为用户提供高效、准确的信息检索体验。在各种搜索引擎方案中,Apache Solr因其强大的功能和优秀的可扩展性,已经成为众多...

    开源企业搜索引擎solr的应用教程

    《开源企业搜索引擎Solr的应用教程》 在当今信息爆炸的时代,高效、精准的搜索成为企业的核心竞争力之一。开源的企业搜索引擎Solr,凭借其强大的功能和灵活性,成为了许多组织的首选解决方案。本教程将深入探讨Solr...

    solr企业应用

    ### Solr企业应用知识点解析 #### 一、企业搜索引擎方案选型 在现代企业中,搜索引擎不仅是提升用户体验的重要工具,也是提升工作效率的关键因素之一。针对门户社区中的搜索引擎需求,本节详细介绍了四种不同的...

    开源企业搜索引擎SOLR的应用教程.doc

    可以看一下,加深了解.开源企业搜索引擎SOLR的应用教程,配合源程序有助于你们的使用。

    solr4.4部署、维护、调优

    Solr 是一个基于 Lucene 的全文检索服务器,用于构建高效、可扩展的搜索应用。在本文中,我们将探讨如何在 Linux 环境下部署、维护和调优 Solr 4.4 版本。 首先,为了运行 Solr,我们需要先安装 Java 开发工具包...

Global site tag (gtag.js) - Google Analytics