【问题标题】:Solr Autosuggest & Spell checkSolr 自动提示和拼写检查
【发布时间】:2017-10-16 07:32:33
【问题描述】:

我正在使用 solr 3.6。 (很抱歉!)并且很难同时实现自动建议和拼写检查。我正在使用 Suggester 进行自动建议,并且不想使用 IndexBasedSpellChecker 进行拼写检查。是否可以在单个请求处理程序中配置自动建议和拼写检查?

例如:如果我搜索“blan”,solr 会建议“blanket”并检索搜索结果。但是,如果我输入“blanpet”或“blanpet”,我会得到 0 个结果并且没有建议或拼写更正。我只需要从“blanet”到“blanket”的拼写更正,这样我就可以显示“你是说吗?”在我的页面上。

使用标准解析器。

提前致谢。

【问题讨论】:

  • 发布自动建议和拼写检查组件的 solr 配置定义。
  • @sgrover 你有什么办法吗?我认为这是 Solr 中缺少的功能!

标签: search solr relevance


【解决方案1】:

不确定 3.6 版,但以下配置适用于我在更高版本 6 上。

Solr-config.xml:

<searchComponent name="spellchecktest" 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>  
    <str name="payloadField">address</str>
  </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">true</str>
    <int name="maxChanges">10</int>
    <int name="minBreakLength">2</int>
  </lst>
</searchComponent>

<requestHandler name="/selectCheck" class="solr.SearchHandler">

    <lst name="defaults">
      <str name="echoParams">explicit</str>
      <int name="rows">10</int>
      <str name="df">name</str>
        <str name="spellcheck">on</str>                          
        <str name="spellcheck.extendedResults">false</str>        
        <str name="spellcheck.count">5</str>                      
        <str name="spellcheck.alternativeTermCount">2</str>      
        <str name="spellcheck.maxResultsForSuggest">5</str>      
        <str name="spellcheck.collate">true</str>                
        <str name="spellcheck.collateExtendedResults">true</str>  
        <str name="spellcheck.maxCollationTries">5</str>          
        <str name="spellcheck.maxCollations">3</str>      
    </lst>
    <arr name="last-components">
    <str>spellchecktest</str>            
  </arr>

  </requestHandler>

Schema.xml

<field name="name" type="text"  indexed="true"  stored="true" multiValued="false"/>
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>

      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>

      </analyzer>
    </fieldType>

本地 solr 实例示例:davider 中缺少字母 n 查询:

http://localhost:8983/solr/basic/selectCheck?q=davider

<response>
   <lst name="responseHeader">
      <int name="status">0</int>
      <int name="QTime">40</int>
      <lst name="params">
         <str name="q">davider</str>
      </lst>
   </lst>
   <result name="response" numFound="0" start="0" />
   <lst name="spellcheck">
      <lst name="suggestions">
         <lst name="davider">
            <int name="numFound">1</int>
            <int name="startOffset">0</int>
            <int name="endOffset">7</int>
            <arr name="suggestion">
               <str>davinder</str>
            </arr>
         </lst>
      </lst>
      <lst name="collations">
         <lst name="collation">
            <str name="collationQuery">davinder</str>
            <int name="hits">1</int>
            <lst name="misspellingsAndCorrections">
               <str name="davider">davinder</str>
            </lst>
         </lst>
      </lst>
   </lst>
</response>

【讨论】:

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