Solr GermanNormalizationFilter 和特殊字符

Solr GermanNormalizationFilter and special chars

我们使用 Solr 5.4 并将一些文本字段定义为 text_de 以及以下 schema.xml

<fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.StopFilterFactory" words="lang/stopwords_de.txt" format="snowball" ignoreCase="true"/>
      <filter class="solr.GermanNormalizationFilterFactory"/>
      <filter class="solr.GermanLightStemFilterFactory"/>
    </analyzer>
</fieldType>

这是默认配置。我想知道为什么搜索 name:Rosewein 没有结果,但是 name:Roséwein returns 相关条目。 因此,我尝试使用一些特殊字符和启用选项 debugQuery 查询字段 name,结果为:

{
  "responseHeader": {
    "status": 0,
    "QTime": 0,
    "params": {
      "debugQuery": "true",
      "indent": "true",
      "q": "name:ÁÀÂÄÃåĀĂÆæöüßéèêíóú",
      "_": "1459935371889",
      "wt": "json"
    }
  },
  "response": {
    "numFound": 0,
    "start": 0,
    "docs": []
  },
  "debug": {
    "rawquerystring": "name:ÁÀÂÄÃåĀĂÆæöüßéèêíóú",
    "querystring": "name:ÁÀÂÄÃåĀĂÆæöüßéèêíóú",
    "parsedquery": "name:aaaaãåāăææousséèêiou",
    "parsedquery_toString": "name:aaaaãåāăææousséèêiou",
    "explain": {},
    "QParser": "LuceneQParser",
...

查看字段 parsedquery,其中显示并非所有变体都替换为 ASCII 表示。我不能使用 ASCIIFoldingFilterFactory 作为过滤器,因为那样的话德语变音符号可能会丢失,因为在某些情况下它们会从 ü 转换为 ue 等等。

但我不明白的是:为什么 íóúá 转换为 ioua 而不是 é 并保留为 é

还有:有没有一种方法可以将所有这些特殊的人声转换为它们的 ASCII 表示形式,但允许将变音符号转换为 ae Ae ue Ue 等等? (无需重新编译 Solr)

如果您正在寻找自定义字符映射规则,您可以使用MappingCharFilterFactory, which takes a config file with the rules. Techproducts example schema showcases it (commented out, so drops out after first modification). Check mapping-FoldToASCII.txt and mapping-ISOLatin1Accent.txt