SOLR案例不敏感搜索

时间:2011-11-23 10:06:38

标签: solr case-insensitive

我在SOLR搜索中遇到了问题。
我有这样的数据:
 enter image description here

我使用solr admin使用如下查询查找此数据:

address_s:*Nadi*

并找到了那些数据。但是当我使用这个查询时:

address_s:*nadi*

它没有找到任何东西。
我在谷歌搜索,我找到了一个用以下脚本创建一个字段的答案:

<fieldType name="c_text" 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>

我将这些脚本复制粘贴到schema.xml中,但它仍然无效。我该怎么办?任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:12)

address_s字段应定义为 -

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

如果您使用的是默认的schema.xml,那么这个定义应该在 -

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

将其定义为不执行分析的字符串字段类型。

通配符查询不会进行分析 因此,如果您在索引时应用小写过滤器,则查询address_s:*nadi*将起作用 但是,查询address_s:*Nadi *不会,因为Nadi与索引中的nadi不匹配,您需要在客户端小写查询。

答案 1 :(得分:7)

我用它作为字段类型:

<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>

使用以下方法定义我的字段:

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

结果:我的文档返回右侧的字段(如插入),我可以搜索不区分大小写的字符(使用大写和小写字母)...

版本:Solr 3.6

答案 2 :(得分:5)

您的address_s字段是否在schema.xml中使用此c_text字段类型?

如果您的索引是使用之前的配置创建的,则需要重新索引所有内容以将更改考虑在内。

答案 3 :(得分:1)

我用过这样的东西...... 在schema.xml中我添加了一个新的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>

将新类型分配给您要使其成为案例和字段的字段。空白不敏感 然后,您必须以以下格式构建solr查询:fieldName:(*fieldValue\ *)

答案 4 :(得分:1)

而不是type="string"定义字段type="text_general"(在默认schema.xml中定义)。在eof上它的属性是ignore case=true