Elasticsearch-具有多字段支持的动态映射

时间:2019-01-16 06:02:12

标签: elasticsearch

是否可以动态添加具有 multi-field 支持的新字段?

我的索引具有仅在建立索引时才知道的属性。因此,这些字段将包含在动态映射中。

但是,当动态添加新字段时,我需要将其映射为text并具有三个子字段:keyworddate(如果它适合{{ 1}})和dynamic_date_formats

有了这三个子字段,我将能够搜索并汇总许多具有最佳性能的查询。

我知道我可以使用具有longnested属性的key字段对这些“动态字段”进行索引“预”映射,因此可以使用这些属性创建value属性三个子字段。但是我不想创建嵌套的键/值字段,因为在对大量文档进行汇总时,它的速度不是很快。

1 个答案:

答案 0 :(得分:1)

我找到了。

Dynamic templates是答案。

非常简单:)

{
  "mappings": {
    "doc": {
      "dynamic_templates": [
        {
         "objs": {
            "match_mapping_type": "object",
            "mapping": {
                "type": "{dynamic_type}"
            }
         }  
        },
        {
          "attrs": {
            "match_mapping_type": "*",
            "mapping": {
              "type": "text",
              "fields": {
                "raw": {
                    "type": "keyword"
                },
                "long": {
                    "type": "long",
                    "ignore_malformed": true
                },
                "double": {
                    "type": "double",
                    "ignore_malformed": true
                },
                "date": {
                    "type": "date",
                    "format": "dd/MM/yyyy||dd/MM/yyyy HH:mm:ss||dd/MM/yyyy HH:mm",
                    "ignore_malformed": true
                }
              }
            }
          }
        }
      ],
      "dynamic": "strict",
      "properties": {
        "fixed": {
            "properties": {
                "aaa": {
                    "type": "text"
                },
                "bbb": {
                    "type": "long"
                },
                "ccc": {
                    "type": "date",
                    "format": "dd/MM/yyyy"
                }
            }
        },
        "dyn": {
            "dynamic": true,
            "properties": {
            }
        }
      }
    }
  }
}