弹性搜索中忽略阿拉伯变音符号
Arabic diacritics ignoring in elasticsearch
我有一个案例,我想使用 elasticsearch 作为漂亮 long HTML Arabic text 的文本搜索引擎.
除了带有变音符号的单词外,搜索效果很好,似乎无法识别它们。
例如:
这句话:' ووَهوُلّ عوْدٍ'(这是存储在数据库中的)
与此完全相同:'وهكذا في كل عود'(这是用户输入的搜索内容)
除了添加的变音符号外,它完全相同,变音符号在计算机中作为单独的字符处理(但只是在其他字符之上呈现)。
我想知道是否有办法让搜索忽略所有变音符号。
我正在考虑的第一个方法是,是否有办法告诉 elasticsearch 在索引时完全忽略变音符号(有点像停用词?)。
如果不是,是否适合在文档 (text_normalized) 中添加另一个字段,我在将其添加到 elasticsearch 之前手动删除变音符号,这样效率高吗?
要解决您的问题,您可以使用 arabic_normalization 标记过滤器,它会在索引之前从文本中删除变音符号。您需要定义一个自定义分析器,您的分析器应该如下所示:
"analyzer": {
"rebuilt_arabic": {
"tokenizer": "standard",
"filter": [
"lowercase",
"decimal_digit",
"arabic_stop",
"arabic_normalization",
"arabic_keywords",
"arabic_stemmer"
]
}
}
分析器API检查:
GET /_analyze
{
"tokenizer" : "standard",
"filter" : ["arabic_normalization"],
"text" : "وَهَكَذَا في كُلّ عَقْدٍ"
}
分析器的结果:
{
"tokens" : [
{
"token" : "وهكذا",
"start_offset" : 0,
"end_offset" : 9,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "في",
"start_offset" : 10,
"end_offset" : 12,
"type" : "<ALPHANUM>",
"position" : 1
},
{
"token" : "كل",
"start_offset" : 13,
"end_offset" : 17,
"type" : "<ALPHANUM>",
"position" : 2
},
{
"token" : "عقد",
"start_offset" : 18,
"end_offset" : 24,
"type" : "<ALPHANUM>",
"position" : 3
}
]
}
如您所见,变音符号已被删除。有关详细信息,您可以查看 here.
我有一个案例,我想使用 elasticsearch 作为漂亮 long HTML Arabic text 的文本搜索引擎.
除了带有变音符号的单词外,搜索效果很好,似乎无法识别它们。
例如:
这句话:' ووَهوُلّ عوْدٍ'(这是存储在数据库中的)
与此完全相同:'وهكذا في كل عود'(这是用户输入的搜索内容)
除了添加的变音符号外,它完全相同,变音符号在计算机中作为单独的字符处理(但只是在其他字符之上呈现)。
我想知道是否有办法让搜索忽略所有变音符号。
我正在考虑的第一个方法是,是否有办法告诉 elasticsearch 在索引时完全忽略变音符号(有点像停用词?)。
如果不是,是否适合在文档 (text_normalized) 中添加另一个字段,我在将其添加到 elasticsearch 之前手动删除变音符号,这样效率高吗?
要解决您的问题,您可以使用 arabic_normalization 标记过滤器,它会在索引之前从文本中删除变音符号。您需要定义一个自定义分析器,您的分析器应该如下所示:
"analyzer": {
"rebuilt_arabic": {
"tokenizer": "standard",
"filter": [
"lowercase",
"decimal_digit",
"arabic_stop",
"arabic_normalization",
"arabic_keywords",
"arabic_stemmer"
]
}
}
分析器API检查:
GET /_analyze
{
"tokenizer" : "standard",
"filter" : ["arabic_normalization"],
"text" : "وَهَكَذَا في كُلّ عَقْدٍ"
}
分析器的结果:
{
"tokens" : [
{
"token" : "وهكذا",
"start_offset" : 0,
"end_offset" : 9,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "في",
"start_offset" : 10,
"end_offset" : 12,
"type" : "<ALPHANUM>",
"position" : 1
},
{
"token" : "كل",
"start_offset" : 13,
"end_offset" : 17,
"type" : "<ALPHANUM>",
"position" : 2
},
{
"token" : "عقد",
"start_offset" : 18,
"end_offset" : 24,
"type" : "<ALPHANUM>",
"position" : 3
}
]
}
如您所见,变音符号已被删除。有关详细信息,您可以查看 here.