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
包含非对象数据。