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

  

   

原文地址:https://www.cnblogs.com/a198720/p/4350361.html