ES 索引关闭source后是否可以更新?

发布时间:2023年12月21日

## 背景

ES优化有一个常用手段是将不需要返回的字段的source关闭掉,以此节省磁盘空间,同时也节省内存;比如向量字段一般关闭source;

## 疑问

ES 索引(部分字段 或者 全部字段)关闭source后是否可以更新?

## 测试

# 创建索引关闭source
PUT test_exclude
{
  "mappings": {
    "_source": {
      "enabled": false
    },
    "properties": {
      "field": {
        "type": "keyword"
      }
    }
  }
}


# 新增测试数据
POST test_exclude/_doc/1
{
  "field": 1
}

# 倒排索引查询
GET test_exclude/_search
{
  "query": {
    "terms": {
      "field": [
        "1"
      ]
    }
  }
}
可以查到结果


# 增量更新
POST test_exclude/_update/1
{
  "doc": {
    "field": "2"
  }
}
异常,如下:
{
  "error": {
    "root_cause": [
      {
        "type": "document_source_missing_exception",
        "reason": "[_doc][1]: document source missing",
        "index_uuid": "FS4InI3pQoaXyxRWcFROLQ",
        "shard": "2",
        "index": "test_exclude"
      }
    ],
    "type": "document_source_missing_exception",
    "reason": "[_doc][1]: document source missing",
    "index_uuid": "FS4InI3pQoaXyxRWcFROLQ",
    "shard": "2",
    "index": "test_exclude"
  },
  "status": 400
}



# 全量更新(index API),直接覆盖 --- 成功
PUT test_exclude/_doc/1
{
  "field": 2
}

# 查询

GET test_exclude/_search
{
  "query": {
    "terms": {
      "field": [
        "2"
      ]
    }
  }
}
可以查到结果,原有的查询 field=1,无法查询到

## 结论

全量更新(覆盖)可以;

增量更新会异常;

文章来源:https://blog.csdn.net/qq_33999844/article/details/135130457
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。