【问题标题】:ElasticSearch - what is the difference between an index template and an index patternElasticSearch - 索引模板和索引模式有什么区别
【发布时间】:2018-08-21 08:10:48
【问题描述】:

我在这里阅读了对我的问题的解释:

https://discuss.elastic.co/t/whats-the-differece-between-index-pattern-and-index-template/54948

但是,我仍然不明白其中的区别。定义索引PATTERN时,完全不影响索引创建吗?另外,如果我创建了一个索引但它没有相应的索引模式会发生什么?如何查看用于索引模式的映射,以便知道如何使用 Mapping API 对其进行更新?

顺便说一句,文档说您可以通过单击“设置”然后单击“索引”选项卡来管理索引模式。我正在查看 Kibana,但没有看到任何设置选项卡。我可以通过管理选项卡查看索引模式,但那里看不到任何设置选项卡

【问题讨论】:

    标签: elasticsearch kibana


    【解决方案1】:

    index template 是一个 ES 功能,用于在匹配名称模式时触发创建新索引。例如,假设我们创建了以下索引模板:

    PUT _template/template_1
    {
      "index_patterns": ["foo*"],
      "settings": {
        "number_of_shards": 1
      },
      "mappings": {
        ...
      }
    }
    

    如您所见,只要我们想要在名为(例如)foo-44 的索引中索引文档并且该索引不存在,那么 ES 将按顺序使用该模板(设置 + 映射)自动创建foo-44 索引。

    您可以随时更新索引模板,只需像上面一样简单地放置一个新的设置/映射定义。

    index pattern(不要与您在上面看到的 index-patterns 属性混淆,这是两个完全不同的东西)是 Kibana 的一个功能,用于告诉 Kibana 什么构成索引(所有字段、它们的类型、 ETC)。如果不创建索引模式,在 Kibana 中什么都不会发生,您可以在 Management > Index Patterns 中执行此操作。

    在 ES 中创建索引不会在 Kibana 中创建任何索引模式。同样,在 Kibana 中创建索引模式不会在 ES 中创建任何索引。

    Kibana 需要索引模式的原因是因为它需要存储索引映射中可用的不同类型的信息。例如,假设您使用以下映射创建索引:

    PUT my_index
    {
      "mappings": {
        "doc": {
          "properties": {
            "timestamp": {
              "type": "date"
            },
            "name": {
              "type": "text"
            }
          }
        }
      }
    }
    

    那么你将在 Kibana 中创建的相应索引模式将具有以下内容:

    GET .kibana/doc/index-pattern:16a98050-a53f-11e8-82ab-af0d48c6ddd8
    {
      "type": "index-pattern",
      "updated_at": "2018-08-21T12:38:22.509Z",
      "index-pattern": {
        "title": "my_index*",
        "timeFieldName": "timestamp",
        "fields": """[{"name":"_id","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":false},{"name":"_index","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":false},{"name":"_score","type":"number","count":0,"scripted":false,"searchable":false,"aggregatable":false,"readFromDocValues":false},{"name":"_source","type":"_source","count":0,"scripted":false,"searchable":false,"aggregatable":false,"readFromDocValues":false},{"name":"_type","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":false},{"name":"name","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"timestamp","type":"date","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":true}]"""
      }
    }
    

    如您所见,Kibana 还存储时间戳字段,即索引模式的名称(可以跨越多个索引)。它还为您定义的每个字段存储各种属性,例如,对于 name 字段,索引模式包含 Kibana 需要知道的以下信息:

      {
        "name": "name",
        "type": "string",
        "count": 0,
        "scripted": false,
        "searchable": true,
        "aggregatable": false,
        "readFromDocValues": false
      },
    

    【讨论】:

    • 为什么 Kibana 甚至需要索引模式?不能只读取索引并显示吗?
    • 当我问到索引模式是否影响索引创建时,我的意思是你是否可以像模板一样使用它,因为它们也对应于名称模式?
    • 查看我的更新答案。基本上,索引模板和索引模式是两种不同的野兽,前者允许创建一个索引,而前者可以跨越多个索引
    • 我们还没有解决这个问题 --> Kibana 如何应用映射?它是完全查看索引映射,还是只考虑索引模式映射?索引映射与 Kibana 索引模式映射的优先规则是什么?何时应用映射 - 在查询时、显示时?总之,这两种映射有什么关系?
    • @Banoona Kibana 索引模式中可用的字段是由索引模式名称标识的所有底层索引映射的结合
    猜你喜欢
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2016-06-24
    • 2020-01-26
    • 2016-07-04
    相关资源
    最近更新 更多