zoukankan      html  css  js  c++  java
  • 1.7.7 Spell Checking -拼写检查

    1.拼写检查

       SpellCheck旨在提供一个内联的基于其他,相似,terms的提示.这些提示的基础可以是solr字段中的terms,可以是外部创建要给文本文件,也可以是其他Lucene索引文件.

     1.1 配置SpellCheckComponent组件

      在solrconfig.xml文件中定义.这里有三个拼写检查方法:

      IndexBasedSpellChecker

       IndexBasedSpellChecker使用solr索引为基础,作为拼写检查的并行索引.它要求定义一个基础字段用于索引terms;一个常用的方法就是从一些字段中复制terms(如title,body等)到另外一个创建的需要使用SpellChecker的字段.

      这时一个在solrconfig.xml中配置IndexBasedSpellChecker的简单例子:

    <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 定义了SpellCheckComponent的实现.这里是solr.IndexBasedSpellChecker.定义classname是可选的,如果没有定义,默认IndexBasedSpellChecker.

      spellcheckIndexDir定义了保存SpellCheck索引的目录位置.field定义了用于拼写检查的源字段(schem.xml中定义).当选择一个字段用于spellcheck索引时,最好避免使用一个大量处理的字段以获得更精确的结果.

      buildOnCommit定义了是否在每次提交(也就是每次新的文档添加到索引的时候)时建立拼写检查索引.这是个可选的选项,如果设置为false,可以被忽略.

     DirectSolrSpellChecker

      DirectSolrSpellChecker从solr索引中使用terms,不需要建立一个并行的索引.这个拼写检查的好处就是不用定期的建立拼写检查的索引,也意味着terms总是索引中最新的.

    下面是solrconfig.xml中的配置: 

    <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
        <lst name="spellchecker">
            <str name="name">default</str>
            <str name="field">name</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>

       当选择一个字段用于拼写检查查询时,你需要选择一个相对分析少的字段(特别是分析,如词干提取).注意你需要指定一个字段用于拼写建议.像IndexBasedSpellChecker那样,你也许需要复制字段(如title,body等)的数据到一个专门用于提供SpellCheck的字段.

       许多参数涉及到这个拼写检查器如何如term的提示查询索引.distanceMeasure定义了拼写检查查询的度量标准.参数值"internal"使用了默认的Levenshtein度量标准.

      因为这个拼写检查查询的是主索引,所以你需要限制一下查询频率以避免主查询冲突.accuracy(准确度)设置定义了一个有效建议的临界值.然而maxEdits定于了允许改变term的最大数量.因为大多数拼写错误是1个字母脱离(off).设置为1将会减少可能建议的数量(默认为2),这个值只能是1或者是2.minPrefix定义了terms应该共享的最小字符数,

    设置为1,意思就是拼写检查将会以这个相同的字母开始.

      maxInspections参数定义了在返回结果之前,检查(review)的最大可能匹配的数量.默认时5.

      minQueryLength:定义了在建议提供之前,查询中最少有多少个字符,默认是4.

      maxQueryFrequency:the maximum threshold for the number of documents a term must appear in before being considered as a suggestion.它可以是要给百分数如(.01 或者 1% ),或者是一个绝对值(如4).一个低的阀值适合于小的索引.

      tresholdTokenFrequency:sets the minimum number of documents a term must appear in(term必须出现的最小文档数),也可以用文档数或者绝对值表达.

     FileBasedSpellChecker

      FileBasedSpellChecker使用一个外部文件作为拼写检查字典.如果使用solr作为一个拼写服务,或者拼写建议不需要基于实际的索引中的term.这种情况下比较适合使用这个拼写检查器.在sorlconfig.xml中配置如下:

    <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
        <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>

      这里不同的是使用sourceLocation来定义terms文件的位置.使用characterEncoding来定义terms文件的编码.

      在上面的例子中,name被用来命名spellchecker的具体定义.在要给solrconfig.xml中可以共存多个定义.当它们在schem.xml中被定义时,name有助于区分它们.如果仅仅只有要给spellcheker被定义,不需要要求定义name.

      WordBreakSolrSpellChecker

        WordBreakSolrSpellChecker

      

       

  • 相关阅读:
    day7 面向对象 静态方法 类方法 属性方法 类的特殊成员方法 元类 反射 异常处理
    day6 面向对象 封装 继承 多态 类与实例在内存中的关系 经典类和新式类
    day5 time datetime random os sys shutil json pickle shelve xml configparser hashlib subprocess logging re正则 python计算器
    kafka常用操作命令
    linux基础
    django学习1——初识web应用程序
    mysql数据库(三)——pymysql模块
    mysql数据库(二)——表的查询
    mysql数据库(一)
    Python常用模块——re模块
  • 原文地址:https://www.cnblogs.com/a198720/p/4350361.html
Copyright © 2011-2022 走看看