有時,當我們處理映射時,需要存儲一些其他數據以用於顯示目的,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