共计 1295 个字符,预计需要花费 4 分钟才能阅读完成。
映射参数 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
包含非对象数据。
正文完
发表至:无分类
2019-07-29