有时,当我们处理映射时,需要存储一些其他数据以用于显示目的,ORM设施,权限,或者只是在映射中跟踪它们。
Elasticsearch允许您使用特殊的_meta字段在映射中存储所需的每种JSON数据。映射类型可以具有与之关联的自定义元数据。 Elasticsearch完全不使用这些,但是可以用于存储特定于应用程序的元数据。那么我们该如何实现呢?
_meta映射字段可以填充我们想要的任何数据。 考虑以下示例:
PUT twitter
{
"mappings": {
"_meta" : {
"attr1": ["value1", "value2"],
"attr2": {
"attr3": "value3"
}
},
"properties": {
"content": {
"type": "text"
}
}
}
}
这个 _meta 字段独立于任何的文档而存在。我们可以通过如下的方法来获取它:
GET twitter/_mapping
{
"twitter" : {
"mappings" : {
"_meta" : {
"attr2" : {
"attr3" : "value3"
},
"attr1" : [
"value1",
"value2"
]
},
"properties" : {
"content" : {
"type" : "text"
}
}
}
}
}
在上面,我们可以看到返回的 _meta 字段。
我们也可以使用如下的方法来对它进行更新:
PUT twitter/_mapping
{
"_meta": {
"attr1": [
"value5",
"value6"
],
"attr2": {
"attr3": "value7"
}
},
"properties": {
"content": {
"type": "text"
}
}
}
那么我们再次获取这个索引的更新:
GET twitter/_mapping
"twitter" : {
"mappings" : {
"_meta" : {
"attr2" : {
"attr3" : "value7"
},
"attr1" : [
"value5",
"value6"
]
},
"properties" : {
"content" : {
"type" : "text"
}
}
}
}
}
当 Elasticsearch 处理新的映射并找到 _meta 字段时,它将其存储在全局映射状态中,并将信息传播到所有集群节点。
_meta仅用于存储目的; 它不是索引和可搜索的。
可以出于以下原因使用它:
- 存储类型元数据
- 存储对象关系映射(ORM)相关信息
- 存储类型许可信息
- 存储额外的类型信息(即用于显示类型)
- 存储用于渲染Web界面的模板部件
参考:
【1】https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-meta-field.html