首页 文章

在solr中禁用小写字段的小写

提问于
浏览
5

我正在使用solr 3.5并添加了一个自定义字段,它通过在schema.xml中定义以下内容来为文档添加类别 .

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

现在我正在实现一个Search-Web-Client,它应该显示该类别字段索引的所有值 . 我用以下查询做到了:

facet=true&facet.field=category&q=*

结果如下:

<response>
 <lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">45</int>
  <lst name="params">
   <str name="facet.field">category</str>
   <str name="q">*</str>
   <str name="facet">true</str>
  </lst>
 </lst>
 <result name="response" numFound="0" start="0" maxScore="0.0"/>
  <lst name="facet_counts">
  <lst name="facet_queries"/>
  <lst name="facet_fields">
  <lst name="category">
   <int name="category1">0</int>
   <int name="category2">0</int>
   <int name="category3">0</int>
   <int name="category4">0</int>
   <int name="category5">0</int>
  </lst>
 </lst>
 <lst name="facet_dates"/>
  <lst name="facet_ranges"/>
  </lst>
</response>

我的Web客户端显示所有类别的名称,但它们以小写形式编写,但以大写字母存储在索引中 .

<response>
 <result>
  <doc>
   ...
   <str name="category">Category1</str>
   ...
  </doc>
 </result>
</response>
  • 解决方案a:是否可以强制将facet-values名称区分大小写?

  • 解决方案b:是否有另一个查询会给出索引中存储的每个类别值?

1 回答

  • 12

    我怀疑你正在使用 LowerCaseFilterFactory 作为 string 类型的字段 . 在这种情况下,索引值为 category1 ,但存储的值仍然是您提交的原始值, Category1 .

    您应该从 schema.xml 中的 string fieldType定义中删除 LowerCaseFilterFactory ,以获得所需的构面行为 .

    事实上,通常使用特定的copyField作为facet和简单的fieldType,没有 TokenizerFilter 等 .

相关问题