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

时间:2016-03-13 04:52:20

标签: elasticsearch stringtokenizer

我想让一个字段由不同的分析器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 brownkeyword令牌分析而被分析为一个字词。使用my_analyzer_2时会获得它,因为它被分析为2个术语foxbrown

Elasticsearch允许指定search_analyzerindex_analyzer,但似乎只允许指定单个search_analyzer和单个index_analyzer。

Elasticsearch可以满足我的要求吗?

(一种解决方法是使用2个字段,一个使用keyword标记符,另一个使用standard标记生成器

1 个答案:

答案 0 :(得分:2)

"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