【发布时间】:2016-04-06 09:44:18
【问题描述】:
我们使用 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 返回相关条目。
所以我尝试使用一些特殊字符查询字段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)
【问题讨论】:
-
你能用 SnowballPorterFilterFactory 试试 German2...吗?
-
可以在这里阅读lucene.apache.org/core/5_4_0/analyzers-common/index.html?org/…solr 不是已经使用 German2 了吗?