0

text_de我们使用 Solr 5.4 并使用以下 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返回相关条目。因此,我尝试name使用一些特殊字符和启用选项查询字段debugQuery,结果是:

{
  "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)

4

1 回答 1

1

如果您正在寻找自定义字符映射规则,您可以使用MappingCharFilterFactory,它采用带有规则的配置文件。Techproducts 示例架构展示了它(已注释掉,因此在第一次修改后退出)。检查mapping-FoldToASCII.txtmapping-ISOLatin1Accent.txt

于 2016-04-08T23:45:12.320 回答