【问题标题】:solr spellcheckersolr 拼写检查器
【发布时间】:2010-11-01 12:32:45
【问题描述】:

我已经根据此处给出的 fieldType 实现了 solr 拼写检查器: http://wiki.apache.org/solr/SpellCheckingAnalysis 将对供应商名称进行拼写检查,其中应提供与输入的搜索词相关的建议。 我已将 copyField 用于上述类型的 vendorName 字段,即 textSpell 我的一些查询得到了奇怪的整理结果。 例如 1) maccys 没有给我任何结果,因为 maccy's 给了我想要的结果,即 macy's。我比较了使用 text 和 textSpell 字段类型为 maccys 和 maccy 完成的文本分析(管理工具),两者都将 macy 作为最终结果。那么为什么拼写检查器没有返回结果呢?

2) khols 给了我 'shoes' 整理的结果,而正确的结果 'kohls' 是在 (shoes & stores) 之后的第三个建议。

onlyMorePopular 标志为 false,准确度默认为 0.5

提前感谢您的帮助。在进一步调试方面,我有点迷失了。

【问题讨论】:

    标签: solr spell-checking


    【解决方案1】:

    尽管我们有大量可用数据,但拼写检查器产生奇怪的结果时也遇到了同样的问题。我不知道如何更好地调试它,但我可以告诉你我们做了什么:

    1. 我们使用的是文本字段,没有空格或标准标记器!如果你有更少的数据来索引“hello rabbit”和“rabbit hello”,你也可以添加一个 shingle 过滤器,但这会更加炸毁拼写检查索引

       <fieldType name="txtspell" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
          <analyzer>
              <tokenizer class="solr.KeywordTokenizerFactory"/>
              <filter class="solr.LowerCaseFilterFactory"/>
              <filter class="solr.TrimFilterFactory" />
              <filter class="solr.PatternReplaceFilterFactory"
              pattern="[\-\.\/\(\),]" replacement=""  replace="all"/>
          <filter class="solr.StopFilterFactory" ignoreCase="true" words="spellstopwords.txt"/>                       
              <!-- we don't want duplicates for one doc -->
              <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
           </analyzer>
       </fieldType>
      
    2. 如果您真的需要排序规则,那么(如果您不使用 shingle 过滤器,您将需要它)您可以使用树干中的 solr,您可以在其中指定 maxCollat​​ionTries=1 以确保返回的更正会产生一些命中

    3. 我们使用 spellcheck.accuracy=0.7(并且 onlyMorePopular=false)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多