Elasticsearch动态模板,用于匹配多个确切的字段

时间:2017-12-18 13:33:11

标签: templates elasticsearch mapping

我目前正在努力简化Elasticsearch的映射模板文件。实际上,我有几个具有相同结构的Object个字段(例如源和目的地)

有没有办法设置动态模板,以便它可以匹配多个模式?

这是我执行的内容:

POST /_template/mapping-lol
{
  "template": "*-newevents-*",
  "mappings": {
    "log": {
      "dynamic_templates": [
        {
          "system": {
            "match_pattern": "regex",
            "match": "^(source|destination)$",
            "mapping": {
              "properties": {
                "name": {
                  "dynamic": false,
                  "type": "object",
                  "properties": {
                    "first": {
                      "type": "text"
                    },
                    "last": {
                      "type": "text"
                    }
                  }
                },
                "ip": {
                  "type": "ip"
                }
              }
            }
          }
        }
      ],
      "properties": {
        "source": {
          "type": "object",
          "dynamic": true
        },
        "destination": {
          "type": "object",
          "dynamic": true
        }
      }
    }
  }
}

POST /tenant-newevents-1/log
{
  "source": {
    "name": {
      "first": "John",
      "last": "Doe"
    },
    "ip": "1.2.3.4"
  },
  "destination": {
    "name": {
      "first": "Jane",
      "last": "Doe"
    },
    "ip": "3.4.5.6"
  }
}

GET /tenant-newevents-1

以上情况不起作用......

我有很多这些相同的方案来匹配(~20)。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

好的,我发现出了什么问题:必须先将映射到,才能继续进行动态映射。删除映射中的“源”和“目标”方案。

POST /_template/mapping-lol
{
  "template": "*-newevents-*",
  "mappings": {
    "log": {
      "dynamic_templates": [
        {
          "system": {
            "match_pattern": "regex",
            "match": "^(source|destination)$",
            "mapping": {
              "properties": {
                "name": {
                  "dynamic": false,
                  "type": "object",
                  "properties": {
                    "first": {
                      "type": "text"
                    },
                    "last": {
                      "type": "text"
                    }
                  }
                },
                "ip": {
                  "type": "ip"
                }
              }
            }
          }
        }
      ],
      "properties": {}
    }
  }
}