2017-04-08 65 views
1

我使用Elasticsearch編制了一個網站的索引,該網站有很多名稱都有斯堪的納維亞字符。問題是我們的用戶通常使用美式英文鍵盤,並用最近的英文字母替換這些字符。例如,索引爲Tromsø,但搜索的內容是TromsoElasticsearch符號非英語鍵盤的同義詞

如何添加字符同義詞,以便在Elasticsearch中搜索時原始字符和英文字符相等?

回答

0

可以創建自定義分析,並設置爲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

雖然這確實起作用,但它使搜索區分大小寫。當我搜索特羅姆瑟/特羅姆瑟時一切都很好,但是如果我搜索特羅姆瑟/特羅姆瑟,那麼我會得到0個結果。在仍然映射字符的情況下,如何保持大小寫不敏感? – shiznatix

+0

在這種情況下,您應該將'小寫'標記過濾器添加到您的分析器。查看更新的答案。 – Random