Store(存储)
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
}