如何解决弹性搜索索引上的多个分析器
我有一个带有Name字段的索引。 我想在该字段上使用soundex分析器和同义词分析器。
我想在一个索引中同时实现这两者。这有可能吗? 请帮助我的专家在那里
索引1
{
"settings": {
"index": {
"number_of_shards": "1","provided_name": "phonetic_sample","creation_date": "1603097131476","analysis": {
"filter": {
"my_soundex": {
"replace": "false","type": "phonetic","encoder": "soundex"
}
},"analyzer": {
"my_analyzer": {
"filter": [
"lowercase","my_soundex"
],"tokenizer": "standard"
}
}
}
我查询Catherine并匹配Catherine,Katherine和Kathryn
索引2
{
"settings": {
"index": {
"number_of_shards": "1","provided_name": "phonetic_synonym","creation_date": "1603121439096","analysis": {
"filter": {
"synonym": {
"format": "wordnet","type": "synonym","synonyms": [
"s(100000001,1,'Bill',v,0).","s(100000001,2,'William',3,'Wilhelm',0)."
]
}
},"analyzer": {
"synonym": {
"filter": [
"synonym"
],"tokenizer": "whitespace"
}
}
}
我查询比尔并匹配比尔,威廉和威廉
解决方法
您可以使用multi-field with multiple analyzers。您可以声明
name
字段的每个子字段,每个子字段都有一个不同的分析器。
下面是修改后的索引映射。
索引映射:
{
"settings": {
"index": {
"analysis": {
"filter": {
"my_soundex": {
"type": "phonetic","encoder": "metaphone","replace": false
},"synonym": {
"format": "wordnet","type": "synonym","synonyms": [
"s(100000001,1,'Bill',v,0).","s(100000001,2,'William',3,'Wilhelm',0)."
]
}
},"analyzer": {
"synonym": {
"filter": [
"synonym"
],"tokenizer": "whitespace"
},"my_analyzer": {
"filter": [
"lowercase","my_soundex"
],"tokenizer": "standard"
}
}
}
}
},"mappings": {
"properties": {
"name": {
"type": "text","analzyer": "synonym","search_analyzer": "synonym","fields": {
"content": {
"type": "text","analyzer": "my_analyzer","search_analyzer": "my_analyzer"
}
}
}
}
}
}
然后,您可以在查询中引用name
和name.content
。您的搜索查询将如下所示:
{
"query": {
"multi_match": {
"query": "Bill","fields": [
"name","name.content"
],"type": "most_fields"
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。