【问题标题】:Wrong spell-check suggestions by SolrSolr 错误的拼写检查建议
【发布时间】:2013-06-17 12:53:33
【问题描述】:

使用 Solr 4.1 处理 Spell Suggest。

我们正确配置了它,Solr 提供术语和整理建议。但是,我们注意到,如果我们再次搜索建议的单词/collat​​e,很多时候都没有任何结果。

例如,我们搜索术语“confort”但没有得到任何结果,有两个建议“comfort”和“convert”。第一个术语包含结果.. 但是第二个术语没有带来任何结果,而是建议了另外两个术语,因此术语“convert”没有提供以下建议的结果 - “connect”和“ 内容”。在这里,我们还发现“connect”几乎没有结果,但“content”没有任何结果,并提供以下建议......即“connect”和“大陆”。在这里我们还发现“continent”没有任何结果,它建议“connect”。

许多搜索词甚至整理都会发生同样的情况。我们不知道是什么原因造成的?我们可以关闭这些没有任何结果的建议吗?

我的 Solr 配置

<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
    <lst name="defaults">
      <str name="df">Name</str>
      <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>
      <str name="spellcheck.alternativeTermCount">5</str>
      <str name="spellcheck.maxResultsForSuggest">5</str>       
      <str name="spellcheck.collate">true</str>
      <str name="spellcheck.collateExtendedResults">true</str>  
      <str name="spellcheck.maxCollationTries">10</str>
      <str name="spellcheck.maxCollations">5</str>         
    </lst>
    <arr name="last-components">
      <str>spellcheck</str>
    </arr>
</requestHandler>

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

<lst name="spellchecker">
  <str name="name">wordbreak</str>
  <str name="classname">solr.WordBreakSolrSpellChecker</str>      
  <str name="field">Name</str>
  <str name="combineWords">true</str>
  <str name="breakWords">false</str>
  <int name="maxChanges">10</int>     
</lst>
</searchComponent> 

我的架构:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.LowerCaseFilterFactory"/>   
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

<field name="Name" type="text" indexed="true" stored="true"  required="false" />

我的查询:http://localhost:8983/solr/mycore/spell?q=confort&amp;spellcheck=true&amp;Collate=true&amp;spellcheck.extendedResults=true

结果:

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">16</int>
  </lst>
  <result name="response" numFound="0" start="0"/>
  <lst name="spellcheck">
    <lst name="suggestions">
      <lst name="confort">
        <int name="numFound">2</int>
        <int name="startOffset">0</int>
        <int name="endOffset">7</int>
        <int name="origFreq">0</int>
        <arr name="suggestion">
          <lst>
            <str name="word">comfort</str>
            <int name="freq">6</int>
          </lst>
          <lst>
            <str name="word">convert</str>
            <int name="freq">2</int>
          </lst>
        </arr>
      </lst>
      <bool name="correctlySpelled">false</bool>
    </lst></lst>
  </response>

【问题讨论】:

  • 您的建议器是否配置为从字段索引或字典中获取建议?
  • @Junaid 我已经更新了配置详细信息的问题。请看一看。此外,我们还收到了 Index 的建议。
  • 我有点困惑。您说当您搜索舒适时,Solr 返回 0 个结果,但建议舒适和转换。现在,舒适为您提供结果,但转换没有,而是为您提供连接和内容作为建议。我的理解正确吗?
  • @Junaid 是的,你是对的。
  • 在 synonyms.txt 中有convert、content和continue吗?如果是,那么它们是什么。

标签: solr full-text-search solr4


【解决方案1】:

您搜索的字词和启用的拼写检查是否相同?他们是否进行相同的分析?
一个原因可能是字段不同,因此所提供的字段建议在正在搜索的字段中不存在。
此外,可能是字段分析不同,因此拼写建议和搜索不匹配。

【讨论】:

    【解决方案2】:

    您在评论中说,您从 index 获得建议,但您的配置没有。

    <str name="classname">solr.DirectSolrSpellChecker</str>
    

    把上面改成这个

    <str name="classname">solr.IndexBasedSpellChecker</str>
    

    【讨论】:

    • solr.IndexBasedSpellChecker 不工作。它抛出错误 - java.lang.Float 不能转换为 java.lang.String
    • 我也收到错误消息“java.lang.Float cannot be cast to java.lang.String”...请详细说明您的答案....
    猜你喜欢
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多