SOLR Case Insensitive Search

a 夏天 提交于 2019-11-28 23:20:06

The address_s field should be defined as -

<field name="address_s" type="c_text" indexed="true" stored="true"/>

If you are using the default schema.xml, this defination should come before -

<dynamicField name="*_s"  type="string"  indexed="true"  stored="true"/>

which defines it as a string field type with no analysis performed.

Wildcard queries does not undergo analysis.
So if you apply lower case filter at index time query address_s:*nadi* would work.
However, query address_s:*Nadi* would not, as Nadi will not match nadi in index and you would need to lower case the queries at client side.

I've used this as field type:

<fieldType name="string" class="solr.TextField">
  <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>

And defined my fields using:

<field name="address" type="string" indexed="true" stored="true"/>

The result: My document returns the fields in the right case (like inserted) and I can search case-insensitive (using both upper- and lowercase letters)...

Version: Solr 3.6

Does your address_s field use this c_text field type in your schema.xml?

If your index has been created with the previous configuration, you need to re-index everything to take the changes into account.

I have used something like this ... In schema.xml i 've put a new fieldType

<fieldType name="newType" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ReversedWildcardFilterFactory" />
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ReversedWildcardFilterFactory" />
      </analyzer>
 </fieldType>

Assign the new type to the field that you want to make it case & whitespace insensitive Then you have to construct the solr query in the form : fieldName:(*fieldValue\ *)

Shimon Benattar

instead of type="string" define the field type="text_general" (as defined in the default schema.xml). On eof its property is ignore case=true

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!