1
我使用Elasticsearch
编制了一个网站的索引,该网站有很多名称都有斯堪的纳维亚字符。问题是我们的用户通常使用美式英文键盘,并用最近的英文字母替换这些字符。例如,索引为Tromsø
,但搜索的内容是Tromso
。Elasticsearch符号非英语键盘的同义词
如何添加字符同义词,以便在Elasticsearch
中搜索时原始字符和英文字符相等?
我使用Elasticsearch
编制了一个网站的索引,该网站有很多名称都有斯堪的纳维亚字符。问题是我们的用户通常使用美式英文键盘,并用最近的英文字母替换这些字符。例如,索引为Tromsø
,但搜索的内容是Tromso
。Elasticsearch符号非英语键盘的同义词
如何添加字符同义词,以便在Elasticsearch
中搜索时原始字符和英文字符相等?
可以创建自定义分析,并设置为char filter
像这样
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"char_filter": [
"my_char_filter"
]
}
},
"char_filter": {
"my_char_filter": {
"type": "mapping",
"mappings": [
"ø => o",
"á => a"
]
}
},
"filter": [
"lowercase"
]
}
}
}
在这种情况下,两个Tromsø
和Tromso
会给出相同的输出项。看看有关创建自定义分析器的主题https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-custom-analyzer.html
虽然这确实起作用,但它使搜索区分大小写。当我搜索特罗姆瑟/特罗姆瑟时一切都很好,但是如果我搜索特罗姆瑟/特罗姆瑟,那么我会得到0个结果。在仍然映射字符的情况下,如何保持大小写不敏感? – shiznatix
在这种情况下,您应该将'小写'标记过滤器添加到您的分析器。查看更新的答案。 – Random