当我进行没有重音的搜索时,尽管我在映射中设置了法语分析器,但我没有与具有重音的相同单词匹配
这是我的映射:
PUT /test12h31
{
"mappings": {
"proj": {
"properties": {
"movieTitle": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
"analyzer": "french"
}
}
}
}
}
我输入数据:
PUT /test12h31/proj/_search
{
"movieTitle":"Le Retour Du Héros"
}
当我进行搜索时,我没有结果:
POST /test12h31/proj/_search
{
"query": {
"match": {
"movieTitle": "hero"
}
}
}
当我在搜索请求中用“héro”替换“hero”时,我有一个结果。
你能帮我理解会发生什么以及如何忽略口音吗?
答案 0 :(得分:2)
french
分析器不会处理重音,因为您需要包含asciifolding
令牌过滤器。
我建议您修改索引设置和映射,以便重新定义french
分析器以包含asciifolding
令牌过滤器:
PUT /test12h31
{
"settings": {
"analysis": {
"filter": {
"french_elision": {
"type": "elision",
"articles_case": true,
"articles": [
"l", "m", "t", "qu", "n", "s",
"j", "d", "c", "jusqu", "quoiqu",
"lorsqu", "puisqu"
]
},
"french_stop": {
"type": "stop",
"stopwords": "_french_"
},
"french_stemmer": {
"type": "stemmer",
"language": "light_french"
}
},
"analyzer": {
"french": {
"tokenizer": "standard",
"filter": [
"french_elision",
"lowercase",
"asciifolding",
"french_stop",
"french_stemmer"
]
}
}
}
},
"mappings": {
"proj": {
"properties": {
"movieTitle": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
"analyzer": "french"
}
}
}
}
}
}
然后您将获得搜索结果。