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
我们使用 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