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