Elasticsearch 參考指南(映射參數enabled)

映射參數enabled

Elasticsearch嘗試索引你提供給它的全部字段,但有時你但願只存儲字段而不索引它,例如,假設你使用Elasticsearch做爲web會話存儲,你可能但願索引會話ID和上次更新時間,但不須要查詢或運行會話數據自己的聚合。web

enabled設置只能應用於頂級映射定義和對象字段,這會致使Elasticsearch徹底跳過字段內容的解析,JSON仍然能夠從_source字段中檢索,但它不能搜索或以任何其餘方式存儲:session

PUT my_index
{
  "mappings": {
    "properties": {
      "user_id": {
        "type":  "keyword"
      },
      "last_updated": {
        "type": "date"
      },
      "session_data": { 
        "type": "object",
        "enabled": false
      }
    }
  }
}

PUT my_index/_doc/session_1
{
  "user_id": "kimchy",
  "session_data": { 
    "arbitrary_object": {
      "some_array": [ "foo", "bar", { "baz": 2 } ]
    }
  },
  "last_updated": "2015-12-06T18:20:22"
}

PUT my_index/_doc/session_2
{
  "user_id": "jpountz",
  "session_data": "none", 
  "last_updated": "2015-12-06T18:22:13"
}
  • 禁用了session_data字段。
  • 任何任意數據均可以傳遞到session_data字段,由於它將被徹底忽略。
  • session_data還將忽略非JSON對象的值。

整個映射也可能被禁用,在這種狀況下,文檔存儲在_source字段中,這意味着能夠檢索它,可是沒有以任何方式索引它的內容:app

PUT my_index
{
  "mappings": {
    "enabled": false 
  }
}

PUT my_index/_doc/session_1
{
  "user_id": "kimchy",
  "session_data": {
    "arbitrary_object": {
      "some_array": [ "foo", "bar", { "baz": 2 } ]
    }
  },
  "last_updated": "2015-12-06T18:20:22"
}

GET my_index/_doc/session_1 

GET my_index/_mapping
  • 整個映射被禁用。
  • 能夠檢索文檔。
  • 檢查映射會發現沒有添加任何字段。

沒法更新現有字段的enabled設置和頂級映射定義。code

注意,因爲Elasticsearch徹底跳過了對字段內容的解析,因此能夠將非對象數據添加到禁用的字段:對象

PUT my_index
{
  "mappings": {
    "properties": {
      "session_data": {
        "type": "object",
        "enabled": false
      }
    }
  }
}

PUT my_index/_doc/session_1
{
  "session_data": "foo bar" 
}
  • 成功添加文檔,即便session_data包含非對象數據。
相關文章
相關標籤/搜索