存储
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
}