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包含非对象数据。
相关文章
相关标签/搜索