用于 Faceting 和 Filter 查询的不区分大小写的 Solr 查询

Case In-Sensitive Solr Query for Faceting & Filter Query

我正在使用 Solr 为我们的电子商务应用程序提供分面功能。它已按照此处所述的标准方式实施 https://wiki.apache.org/solr/SimpleFacetParameters#Tagging_and_excluding_Filters

在应用程序方面,我们使用 Solr 返回的方面来提供 UI 上的过滤体验,并且使用这些方面作为参数构建 URL。然后使用这些参数将 fq 的分面参数进一步传递到 Solr 中。

这很好用,除了我们的 URL 区分大小写,因为当我们更改为小写时,facet 查询不再有效并给我们未定义的字段错误。

克服此问题的一种解决方案是将所有方面都索引为小案例。但是由于这些方面是从 Solr 方面结果本身构建的,因此我们也可以在小情况下获得结果。然后在前端,我们松开原来的外壳,它不能由 CSS 管理,至于很多方面我们需要保留外壳,比如 RAM 应该显示为 RAM 而不是 Ram 或 ram。同样,microSD 需要显示为 microSD 而不是 Microsd 或 microsd。

我们在这里看到https://wiki.apache.org/solr/SimpleFacetParameters#Tagging_and_excluding_Filters因为请求是在小案例中提出的

q=mainquery&fq=status:public&fq=**doctype:pdf**&facet=on&**facet.field=doctype**

但结果以正确的大小写显示

=== Document Type ===
  [ ] Word (42)
  [x] PDF  (96)
  [ ] Excel(11)
  [ ] HTML (63)

对我们来说,这些请求不起作用,并给我们错误作为未定义的字段!

我们是不是做错了什么,所以 Solr 在发出请求时区分大小写,而不是按照这个帮助文档?还是Solr帮助文档本身有错误?

那是(非常)旧的、无人维护的 wiki 页面,不是一个不错的参考。使用当前的参考文档。该图只是作为 UI 如何呈现的示例,您在过滤时仍然必须使用正确索引的版本。

Solr 中的所有内容都区分大小写,faceting 不是特例。

您可以通过使用一个单独的字段用于过滤(带有小写过滤器的 keywordtokenizer)和一个用于显示(string/keywordtokenizer 没有小写过滤器)来解决这个问题。