elasticsearch - Elasticsearch 索引上的多个分析器

标签 elasticsearch elasticsearch-analyzers elasticsearch-indices

我有一个名称字段索引。
我想在该字段上使用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"
}
}
}
我查询凯瑟琳,并匹配凯瑟琳,凯瑟琳和凯瑟琳
索引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,1,0).",
"s(100000001,2,'William',v,1,0).",
"s(100000001,3,'Wilhelm',v,1,0)."
]
}
},
"analyzer": {
"synonym": {
"filter": [
"synonym"
],
"tokenizer": "whitespace"
}
}
}
我查询比尔并匹配比尔,威廉和威廉

最佳答案

You can use multi-field with multiple analyzers. You can declare sub-fields for the name field, each with a different analyzer.


下面是修改后的索引映射。
索引映射:
{
  "settings": {
    "index": {
      "analysis": {
        "filter": {
          "my_soundex": {
            "type": "phonetic",
            "encoder": "metaphone",
            "replace": false
          },
          "synonym": {
            "format": "wordnet",
            "type": "synonym",
            "synonyms": [
              "s(100000001,1,'Bill',v,1,0).",
              "s(100000001,2,'William',v,1,0).",
              "s(100000001,3,'Wilhelm',v,1,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"
          }
        }
      }
    }
  }
}
然后,您可以在查询中引用namename.content。您的搜索查询将如下所示:
{
  "query": {
    "multi_match": {
      "query": "Bill",
      "fields": [ 
        "name",
        "name.content"
      ],
      "type": "most_fields" 
    }
  }
}

关于elasticsearch - Elasticsearch 索引上的多个分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64449565/

相关文章:

elasticsearch - 在Elasticsearch的一个映射中将不同的语言分析器与ngram Analyzer结合使用

regex - ElasticSearch Analyzer自动完成功能,用于字母数字

elasticsearch - 如何定义桶聚合,其中桶由字段上的任意过滤器定义(相当于 GROUP BY CASE)

c# - 使用 NEST 进行 Elasticsearch 查询不起作用

ubuntu - 为什么 Elasticsearch 在 Ubuntu 16.04 上是手动启动而不是作为服务启动?

elasticsearch - 创建索引 Nest

php - Laravel Scout - 观察关系

elasticsearch - 每个索引的Elasticsearch最大文档数

performance - 在Elasticsearch中删除大索引对性能的影响

mysql - Elasticsearch JDBC River MySQL连接超时