Elasticsearch:添加 metadata 到 mapping 中

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章