0

I am using solr 3.6. (sorry to say!) and having a hard time implementing autosuggest and spellcheck simultaneously. I am using Suggester for autosuggest and do not want to use IndexBasedSpellChecker for spell checking. Is it possible to configure autosuggest and spellcheck in a single request handler ??

For example: if I search for 'blan', solr suggests 'blanket' and retrieve search results. However if I type 'blantet' or 'blanpet', I get 0 results and no suggestions or spelling corrections. I just need spell correction from 'blantet' to 'blanket' so that I can show 'Did you mean ?' on my page.

Using standard parser.

Thanks in advance.

sgrover
  • 41
  • 4

1 Answers1

0

Not sure about version 3.6, but following configurations working for me on higher version 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>

Local solr instance example : Letter n is missing in davider Query :

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>
Dev Gosain
  • 690
  • 8
  • 15