据我在ES文档中读到:
(来源:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/custom-analyzers.html)
从这两个陈述中,我了解到执行了以下步骤:
问题:
我可能有一个char_filter一次转多个字母.
示例:ph - > f.
但是,"PH"不会变成"f",因为"PH"不是映射的一部分.
因此,对"philipp"的分析检索"filipp",而"Philipp"检索"philipp".
使用大写和小写(为了在两种情况下实现相同的结果),char_filter中的映射数将是(字符数)².
示例:ph - > f; Ph - > F; pH - > f; PH - > F.
如果我只有4个映射,我就不会有问题,但如果我需要更多的x²映射,char_filter往往会变得很乱.
索引示例:
{
"settings" : {
"index" : {
"analysis" : {
"analyzer" : {
"default_index" : {
"type" : "custom",
"tokenizer" : "whitespace",
"filter" : [
"lowercase"
],
"char_filter" : [
"misc_simplifications"
]
}
},
"char_filter" : {
"misc_simplifications" : {
"type" : "mapping",
"mappings" : [
"ph=>f","Ph=>F","pH=>f","PH=>F"
]
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
哲学问题:
我明白我可能想要同等对待"ph"和"Ph",但"pH"可能意味着完全不同的东西.但有没有办法在char_filter阶段之前将字符转换为小写?是否有意义?
因为这个大的映射让我觉得我做错了什么,或者我能找到一个更简单(更优雅)的解决方案.
您的步骤顺序是正确的:
然而,CharFilter 的主要目的是清理数据以使标记化更容易。例如,通过删除 XML 标签或用空格字符替换分隔符。
所以 - 我将misc_simplifications作为 TokenFilter 在小写过滤器之后应用。
{
"settings" : {
"index" : {
"analysis" : {
"analyzer" : {
"default_index" : {
"type" : "custom",
"tokenizer" : "whitespace",
"filter" : [
"lowercase",
"misc_simplifications"
]
}
},
"filter" : {
"misc_simplifications" : {
"type" : "pattern_replace",
"pattern": "ph",
"replacement":"f"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意我使用模式替换而不是映射。您还可以修改正则表达式以仅替换标记开头的“ph”。
另外 - 你的映射看起来像是语音替换。我不确定您的要求,但看起来语音标记过滤器可能会帮助您。
| 归档时间: |
|
| 查看次数: |
3434 次 |
| 最近记录: |