Elasticsearch 参考指南(映射参数enabled)

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

相关推荐