elasticsearch - Elasticsearch中的映射和模板之间有什么区别?

标签 elasticsearch

在ES中,我们有两个概念映射和模板。我阅读了有关这两个概念的官方解释。我对此仍然感到困惑。

  • 在模板中,我们可以定义映射。在这种情况下,为什么我们需要映射?
  • 如果我想更新映射,是否可以在模板中对其进行修改?
  • 最佳答案

    Templatesmappings是两个不同的东西。更让人困惑的是,短语模板在两个不同但相关的功能中使用。

    映射

    索引的映射是所有数据存储到该索引的架构定义。认为这是真正的存在。

    索引模板
    Index Templates用于简化为新索引定义mappings的过程。如果要定义许多共享某些常用映射或设置的索引,则可以使用这些共享设置定义一个Index Template,并使其自动为您应用。在您的模板中,您告诉ElasticSearch它可以将那些模板应用于哪些索引。

    Index Templates Reference

    映射中的 dynamic_templates

    为了完整起见,ElasticSearch中还有另一个模板显示位置。在声明新索引的映射时,还可以定义dynamic_templates节。这使您可以让ElasticSearch根据新的字段类型或名称来定义字段映射。例如,您可以创建一个条目,说任何名称以“_date”结尾的字段都应被视为日期字段。这些使您可以按约定定义字段,而无需为每个字段显式指定它们的字段映射。

    Dynamic Templates Reference

    值得注意的是,对于Index Templatesdynamic_templates部分,仅在首次创建索引/字段时才应用这些值。在mapping定义中,如果您明确指定与模板不同的内容,它将使用您的值。

    因此,回到您的问题:

    1. In the template, we can define mapping. In this case, why we need mapping?

    Index Templates在将映射应用于多个索引时非常有用。如果您不创建多个相同的索引,则可能只需要手动定义映射即可。

    索引定义中的dynamic_templates对于通过命名约定定义字段类型很有用。对此所做的任何更改只会影响添加到索引的新字段。

    1. If I wanna update mapping, can I just modify it in template?


    否,一旦创建了索引,对Index Templates的更新将不会影响该索引。它们仅适用于新索引。另外,更新为dynamic_templates仅会影响索引中的新字段。

    关于elasticsearch - Elasticsearch中的映射和模板之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52823583/

    相关文章:

    ajax - ElasticSearch无法使用相同的来源

    plugins - elasticsearch插件更新

    json - ElasticSearch-索引和搜索嵌套的JSON记录,其中键的嵌套级别在JSON文档中有所不同

    regex - 自定义GROK过滤器-Logstash-> Elasticsearch

    elasticsearch - 是否可以使用 org.springframework.data.elasticsearch.core.ReactiveElasticsearchTemplate 删除索引?

    sql-server - 带有jdbc的logstash获取PsychParser错误

    elasticsearch - Logstash:使用日志文件的行号作为document_id

    CouchDB、Elastic Search 和 River Plugin 无法正常运行

    C# Elasticsearch NEST 无法转换 lambda 表达式

    Elasticsearch _msearch 不适用于聚合