elasticsearch:多个字段的多字段映射

时间:2016-01-18 11:51:39

标签: elasticsearch elasticsearch-mapping elasticsearch-indices

我将有一个包含多个字段的文档。让我们说'title','meta1','meta2','full_body'。 他们每个人我想以几种不同的方式进行索引(原始的,干净的,没有停止词,带状疱疹,同义词等)。因此我会有以下字段:title.stemmingtitle.shinglesmeta1.stemmingmeta1.shingles等。

我是否必须复制粘贴每个字段的映射定义?或者是否可以创建所有索引/分析方法的一个定义,然后仅将其应用于4个顶级字段中的每一个?如果是这样,怎么样?

  mappings: 
    my_type: 
      properties: 
        title: 
          type: string
          fields: 
            shingles: 
              type: string
              analyzer: my_shingle_analyzer
            stemming:
              type: string
              analyzer: my_stemming_analyzer
        meta1:
           ...                   <-- do i have to repeat everything here?
        meta2:
           ...                   <-- and here?
        full_body:
           ...                   <-- and here?

1 个答案:

答案 0 :(得分:1)

在您的情况下,您可以将dynamic templatesmatch_mapping_type设置一起使用,以便您可以对所有字符串字段应用相同的设置:

{
  "mappings": {
    "my_type": {
      "dynamic_templates": [
        {
          "strings": {
            "match_mapping_type": "string",
            "mapping": {
              "type": "string",
              "fields": {
                "shingles": {
                  "type": "string",
                  "analyzer": "my_shingle_analyzer"
                },
                "stemming": {
                  "type": "string",
                  "analyzer": "my_stemming_analyzer"
                }
                , ... other sub-fields and analyzers
              }
            }
          }
        }
      ]
    }
  }
}

因此,无论何时索引字符串字段,都将根据定义的模板创建其映射。您还可以使用match设置来限制到特定字段名称的映射。