elasticsearch - ElasticSearch 重音和无重音词管理
问题描述
我创建了一个索引:
PUT members
{
"settings":{
"number_of_shards":1,
"analysis":{
"analyzer":{
"accentedNames":{
"tokenizer":"standard",
"filter":[
"lowercase",
"asciifolding"
]
},
"standardNames":{
"tokenizer":"standard",
"filter":[
"lowercase"
]
}
}
}
},
"mappings":{
"member":{
"properties":{
"id":{
"type":"text"
},
"name":{
"type":"text",
"analyzer":"standardNames",
"fields":{
"accented":{
"type":"text",
"analyzer":"accentedNames"
}
}
}
}
}
}
}
假设一些文档在这个集合中(编辑):
- {"1", "Maéllys 马克龙"};
- {"2", "Maêllys Alix"};
- {"3", "Maëllys 罗莎"};
- {"4", "Maèllys Alix"};
- {"5", "Maellys du Bois"};
我想得到这样的结果:如果我想获得名为“Maéllys”的文档,我希望将“Maéllys Richard”作为最佳匹配,其他得分相同。
我所做的是使用我的分析器提出这样的要求:
GET members/member/_search
{
"query":{
"multi_match" : {
"query" : "Maéllys",
"fields" : [ "name", "name.accented" ]
}
}
}
“Maéllys Richard”得分最高。文档“Ma(ê|ë|é|è)llys Richard 的分数高于“Maellys Richard”文档。
有人能帮我吗 ?
谢谢。
解决方案
推荐阅读
- apache - AH00558:httpd:在创建 VirtualHost 后无法可靠地确定服务器的完全限定服务器名错误
- ios - 创建独立于 Xcode 编译器版本的 ios Swift 框架
- java - 重新抛出异常或调用 System.exit() 结束程序。最佳做法是什么?
- java - 使用 DataProvider 将 lambdas 作为 testng 参数传递?
- elasticsearch - 获取 query_string 格式错误的查询,应为 [END_OBJECT] 但找到 [FIELD_NAME]
- reactjs - GraphQL,ReactJs - 将参数传递给查询时无法检索数据
- python - 在Django中通过表单上传文件时出错
- ios - SwiftUI 拖放错误“NSInternalInconsistencyException”
- php - 将codeigniter查询转换为sql查询
- bash - bash脚本删除在某个日期之前创建的所有目录