0

我有一个问题,我试图搜索一个字段,就像 modelnumbers:"ModeL SX4"我没有得到数据一样。我试图使大小写不敏感的字段如下所示:

<arr name="modelnumbers">
<str>Model sX4</str>
</arr>

尝试了所有可能的解决方案,例如在我的 schema.xml 中添加以下内容:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true" >
   <analyzer type="index">
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
      <filter class="solr.LowerCaseFilterFactory" ignoreCase="true"/>
      <filter class="solr.PorterStemFilterFactory"/>
      <filter class="solr.StopFilterFactory"  ignoreCase="true"/>
   </analyzer>

   <analyzer type="query">

      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
      <filter class="solr.LowerCaseFilterFactory" ignoreCase="true"/>
      <filter class="solr.StopFilterFactory"  ignoreCase="true"/>
      <filter class="solr.PorterStemFilterFactory"/>
   </analyzer>
</fieldType>

并将其与以下字段一起使用:

 <field name="modelnumbers" type="text"   indexed="true"  stored="true"  multiValued="true" />

多次重新发布我的数据。不工作。如果我搜索“model sX4”,它可以工作,但任何其他修改,如“ModelL SX4”,都失败了。结果没有一致性。如果我尝试搜索“24aAB3”,另一个字段看起来像:“24AAB3”。这也行不通。

请帮忙。

4

1 回答 1

1

您的问题位于 WordDelimiterFilterFactory 中。因为它将“ModelL SX4”拆分为“ModeL SX 4”或类似的东西。所以把 LowerCaseFilterFactory 放在 tokenizer 之后就可以了。

于 2012-04-19T10:51:20.180 回答