2016-03-08 51 views
0

我正在使用solr 5.3
我的字符串是: - Anirudh,Ani,Aniket
当我输入“Ani”时,它确实给了我所有上面的字符串。
但是当我输入“ket”时,它不会给出任何结果。
预计: - “Aniket”。
使用solr suggestor搜索中间或后缀字符串?


solrconfig.xml中

<searchComponent name="suggest" class="solr.SuggestComponent"> 
     <lst name="suggester"> 
      <str name="name">mySuggester</str> 
      <str name="lookupImpl">FreeTextLookupFactory</str> 
      <str name="dictionaryImpl">DocumentDictionaryFactory</str> 
      <str name="field">name</str> 
      <!-- <str name="weightField">price</str> --> 
      <str name="suggestAnalyzerFieldType">key_lower_case</str> 
      <str name="buildOnStartup">false</str> 
     </lst> 
    </searchComponent> 

    <requestHandler name="/suggest" class="solr.SearchHandler" 
     startup="lazy"> 
     <lst name="defaults"> 
      <str name="suggest">true</str> 
      <str name="suggest.count">10</str> 
     </lst> 
     <arr name="components"> 
      <str>suggest</str> 
     </arr> 
    </requestHandler> 


Schema.xml的: -

<schema name='history' version='1.1'> 
     <types> 
       <fieldtype name='string' class='solr.StrField' /> 
       <fieldtype name='long' class='solr.TrieLongField' /> 

       <fieldType name="key_lower_case" class="solr.TextField" 
         sortMissingLast="true" omitNorms="true"> 
         <analyzer> 
           <tokenizer class="solr.KeywordTokenizerFactory"/> 
           <filter class="solr.LowerCaseFilterFactory" /> 
         </analyzer> 
       </fieldType> 
     </types> 

     <fields> 
       <field name='id' type='long' required='true' /> 
       <field name="_version_" type="long" indexed="true" stored="true"/> 
       <field name='user_id' type='string'/> 
       <field name='jsons' type='string' multiValued='true' /> 
       <field name="row_type" type='string'/> 
       <field name='name' type='key_lower_case' indexed="true" stored="true" required='true'/> 
       <field name='composite_row-type_name' type='string'/> 
       <dynamicField name='*_string' type='string' multiValued='true' indexed='true' stored='true'/> 
     </fields> 
     <uniqueKey>composite_row-type_name</uniqueKey> 
     <solrQueryParser defaultOperator='OR' /> 
</schema> 


欢迎您提出建议和意见。 在此先感谢。

回答

1

您可以在schema.xml中修改您的字段类型。使用下面的“key_lower_case”fieldType作为您想要执行搜索的字段。

完成schema.xml更改后,您需要重新启动服务器并重新索引数据。

<fieldType name="key_lower_case" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="10"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
    </analyzer> 
</fieldType> 

您已经添加了您的字段。

<field name='name' type='key_lower_case' indexed="true" stored="true" required='true'/> 

帮助NGramTokenizerFactory可以实现以下令牌

对于输入文字:"abhijit"

令牌genereted为:

ab, abh, abhi, abhiji, abhijit, bh, bhi, bhij... etc