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

时间:2018-10-15 19:33:20

标签: elasticsearch

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

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

2 个答案:

答案 0 :(得分:0)

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. 在模板中,我们可以定义映射。在这种情况下,为什么我们需要映射?
  2.   

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

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

  
      
  1. 如果我想更新映射,是否可以在模板中对其进行修改?
  2.   

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

答案 1 :(得分:0)

映射是当前索引所具有的。这些可以在索引上设置和更新。

模板用于在创建新索引时为其创建映射。据我了解,它们都来自相同的JSON负载,只是不同的ES端点。

因此,如果您应用映射而不是模板,则明天的索引很可能将具有昨天的映射。

相关问题