映射参数enabled
Elasticsearch尝试索引你提供给它的所有字段,但有时你希望只存储字段而不索引它,例如,假设你使用Elasticsearch作为web会话存储,你可能希望索引会话ID和上次更新时间,但不需要查询或运行会话数据本身的聚合。
enabled
设置只能应用于顶级映射定义和对象字段,这会导致Elasticsearch完全跳过字段内容的解析,JSON仍然可以从_source
字段中检索,但它不能搜索或以任何其他方式存储:
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
字段中,这意味着可以检索它,但是没有以任何方式索引它的内容:
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
设置和顶级映射定义。
注意,由于Elasticsearch完全跳过了对字段内容的解析,所以可以将非对象数据添加到禁用的字段:
PUT my_index
{
"mappings": {
"properties": {
"session_data": {
"type": "object",
"enabled": false
}
}
}
}
PUT my_index/_doc/session_1
{
"session_data": "foo bar"
}
- 成功添加文档,即使
session_data
包含非对象数据。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。