Elasticsearch-参考指南映射参数enabled

6次阅读

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

正文完
 0