2017-04-08 70 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