Link Search Menu Expand Document Documentation Menu

存储

store 映射参数决定了字段的值是否应独立于 _source 存储,并可通过搜索请求中的 stored_fields 选项直接检索。

默认情况下,store 设置为 false,这意味着字段值不会单独存储,并且仅作为文档 _source 的一部分提供。如果 store 设置为 true,您可以禁用 _source 以节省磁盘空间,并仍能检索特定字段

示例:在字段上启用 store

以下请求创建一个名为 products 的索引,其中 model 字段独立于 _source 存储。

PUT /products
{
  "mappings": {
    "properties": {
      "model": {
        "type": "keyword",
        "store": true
      },
      "name": {
        "type": "text"
      }
    }
  }
}

将文档摄入索引

PUT /products/_doc/1
{
  "model": "WM-1001",
  "name": "Wireless Mouse"
}

仅检索存储的字段

POST /products/_search
{
  "query": {
    "match": {
      "name": "Mouse"
    }
  },
  "stored_fields": ["model"]
}

此查询返回独立存储的 model 字段,即使 _source 仍然可用。


示例:在禁用 _source 的情况下存储字段

如果您想节省磁盘空间,并且以后不需要访问完整的原始文档(例如,用于重新索引或更新),您可以禁用 _source 并仅存储必要的字段。

PUT /products_no_source
{
  "mappings": {
    "_source": {
      "enabled": false
    },
    "properties": {
      "model": {
        "type": "keyword",
        "store": true
      },
      "name": {
        "type": "text"
      }
    }
  }
}

将文档摄入索引

PUT /products_no_source/_doc/1
{
  "model": "KB-2002",
  "name": "Mechanical Keyboard"
}

检索存储的字段

POST /products_no_source/_search
{
  "query": {
    "match": {
      "name": "Keyboard"
    }
  },
  "stored_fields": ["model"]
}

此查询从 stored_fields 中检索 model 字段,而无需访问 _source

如果您尝试按如下方式检索 _source

GET /products_no_source/_doc/1

则响应中的 _source 将为 null。这表明完整文档不再可用,并且由于 _source 已禁用,因此只能检索存储的字段。

{
  "_index": "products_no_source",
  "_id": "1",
  "found": true,
  "_source": null
}
剩余 350 字符

有问题?

想贡献?