Elasticsearch——为一个字段指定不同的索引和搜索分析器

Elasticsearch - specify different index and search analyzers for one field

我想让一个字段被不同的分析器 my_analyzer_1my_analyzer_2 索引,看起来像:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer_1": {
          "type":"custom",
          "tokenizer": "keyword"
        },
        "my_analyzer_2": {
          "type":"custom",
          "tokenizer": "standard"
        }
      }
    }
  },
  "mappings": {
    "Names": {
      "properties": {
        "name": {
          "type": "string",
          // Is it possible?
          "analyzer": "my_analyzer_1, my_analyzer_2"
        }
      }
    }
  }
}

而搜索时,手动指定使用my_analyzer_1my_analyzer_2

这意味着,对于 fox brown,按字词 fox 搜索。使用 my_analyzer_1 时不会得到 fox brown,因为 fox brown 由于 keyword 分词器而被分析为一个术语。使用 my_analyzer_2 会得到它,因为它被分析为 2 个术语 foxbrown.

Elasticsearch 允许指定 search_analyzer and index_analyzer,但似乎只允许指定单个 search_analyzer 和单个 index_analyzer.

我的需求可以通过 Elasticsearch 实现吗?

(一种解决方法是使用 2 个字段,一个使用 keyword 分词器,另一个使用 standard 分词器)

"name": {
    "type": "string",
    "fields": {
        "analyzed1":   { "type": "string", "analyzer": "analyzer1" },
        "analyzed2":   { "type": "string", "analyzer": "analyzer2" }
    }
}

然后您可以在

上查询
`name.analyzed1` or `name.analyzed2`

取决于你想用analyzer1还是analyzer2

查询

参考: https://www.elastic.co/guide/en/elasticsearch/reference/current/_multi_fields.html