elasticsearch - Elasticsearch 中的映射和模板有什么区别?
问题描述
我们在 ES 中有两个概念映射和模板。我阅读了关于这两个概念的官方解释。我仍然对此感到困惑。
- 在模板中,我们可以定义映射。在这种情况下,为什么我们需要映射?
- 如果我想更新映射,我可以在模板中修改它吗?
解决方案
Templates
和mappings
是两个不同的东西。为了让它更加混乱,短语模板用于两个不同但相关的功能。
映射
索引的映射是所有数据存储到该索引的模式定义。把它想象成真正存在的东西。
索引模板
Index Templates
用于使定义mappings
新索引更容易。如果您要定义许多共享一些通用映射或设置的索引,您可以Index Template
使用这些共享设置定义一个并让它自动为您应用它们。在您的模板中,您告诉 ElasticSearch 可以将这些模板应用到哪些索引。
映射中的动态模板
为了完整起见,在 ElasticSearch 中还有另一个地方显示了模板。当您为新索引声明映射时,您还可以定义一个dynamic_templates
部分。这允许您让 ElasticSearch 根据新的字段类型或名称定义字段映射。例如,您可以创建一个条目,说明名称以“_date”结尾的任何字段都应被视为日期字段。这些使您可以按约定定义字段,而无需为每个字段显式指定字段映射。
值得注意的是,对于这两个Index Templates
部分dynamic_templates
,这些值仅在首次创建索引/字段时应用。在您的mapping
定义中,如果您明确指定与模板不同的内容,它将使用您的值。
所以,回到你的问题:
- 在模板中,我们可以定义映射。在这种情况下,为什么我们需要映射?
Index Templates
对于在创建多个索引时将映射应用到它们很有用。如果您不创建多个相同的索引,您可能只需手动定义映射。
dynamic_templates
索引定义对于通过命名约定定义字段类型很有用。对此的任何更改只会影响添加到索引中的新字段。
- 如果我想更新映射,我可以在模板中修改它吗?
不,一旦创建索引,更新Index Templates
不会影响该索引。它们仅适用于新索引。此外,更新为dynamic_templates
只会影响索引中的新字段。
推荐阅读
- angular - 角材料 - 找不到名称“MAT_FORM_FIELD_DEFAULT_OPTIONS”
- android - 来自 Google Play 的通知 || 安全漏洞 || 意图重定向
- javascript - 如何从对象键值中获取单独的单词?
- c# - c# VSTO 如何在 ActiveInlineResponse 中保存电子邮件
- docusignapi - 嵌入式登录 Web 应用程序
- python - Jupyter 笔记本未启动 - AttributeError:模块“时间”没有属性“时钟”
- swiftui - SwiftUI 列表内容通过选择重置
- coq - 分割向量的尾部并附加相同向量的头部
- r - 在 for 循环中改变
- sql - 将 SQL 转换为 Power BI