【Elasticsearch】映射:详解 _source & store 字段

映射:详解 _source & store 字段

  • [1._source 字段](#1._source 字段)
    • [1.1 特点](#1.1 特点)
    • [1.2 示例](#1.2 示例)
  • [2.store 字段](#2.store 字段)
    • [2.1 特点](#2.1 特点)
    • [2.2 示例](#2.2 示例)
  • 3.两者对比
    • [3.1 使用建议](#3.1 使用建议)
    • [3.2 实际应用示例](#3.2 实际应用示例)

1._source 字段

_source 是 Elasticsearch 中一个特殊的元字段,它存储了文档在索引时的原始 JSON 内容。

1.1 特点

  • 默认启用 :所有文档都会自动存储原始 JSON 数据在 _source 中。
  • 完整存储:保存文档的完整原始结构。
  • 重要用途
    • 返回搜索结果中的原始文档内容。
    • 支持高亮显示。
    • 支持重新索引操作。
    • 支持更新文档(因为需要原始内容)。

1.2 示例

json 复制代码
PUT my_index/_doc/1
{
  "title": "Elasticsearch Guide",
  "author": "John Doe",
  "content": "This is a comprehensive guide..."
}

GET my_index/_doc/1

返回结果中会包含完整的 _source 内容。

禁用 _source

json 复制代码
PUT my_index
{
  "mappings": {
    "_source": {
      "enabled": false
    }
  }
}

禁用后无法获取原始文档内容,且某些功能将不可用。

2.store 字段

store 是字段级别的属性,决定是否将字段值单独存储在 Lucene 中(独立于 _source)。

2.1 特点

  • 默认关闭:大多数情况下不需要单独存储字段。
  • 特定场景使用
    • 当只需要检索个别字段,而不需要整个 _source 时。
    • _source 被禁用,但仍需要某些字段时。
  • 存储方式:以列式存储,单独存储。

2.2 示例

json 复制代码
PUT my_index
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "store": true 
      },
      "content": {
        "type": "text"
      }
    }
  }
}

检索存储字段。

json 复制代码
GET my_index/_search
{
  "stored_fields": ["title"] 
}

3.两者对比

特性 _source 字段 store 属性
存储级别 文档级(整个原始文档) 字段级(单个字段)
默认值 启用 禁用
存储方式 原始 JSON 单独列式存储
主要用途 获取完整文档、重新索引、更新等操作 高效检索特定字段
存储开销 较高(存储完整文档) 较低(只存储指定字段)
检索方式 通过 _source 获取 通过 stored_fields 获取

3.1 使用建议

  • 大多数情况 :保持 _source 启用,不需要设置 store: true
  • 禁用 _source :对需要检索的字段设置 store: true
  • 性能优化:当文档很大但只需要少量字段时,可考虑存储特定字段。
  • 注意:存储字段会增加索引大小,应谨慎使用。

3.2 实际应用示例

json 复制代码
PUT news_articles
{
  "mappings": {
    "_source": {
      "enabled": true
    },
    "properties": {
      "headline": {
        "type": "text",
        "store": true
      },
      "body": {
        "type": "text"
      },
      "publish_date": {
        "type": "date",
        "store": true
      }
    }
  }
}

这样设计可以:

  • 通过 _source 获取完整文章内容。
  • 快速单独访问 headlinepublish_date 字段(如用于列表展示)。
  • body 内容只通过 _source 获取,减少存储开销。
相关推荐
天远数科10 分钟前
前端全栈进阶:使用 Node.js Crypto 模块处理 AES 加密与天远API数据聚合
大数据·api
天远API14 分钟前
后端进阶:使用 Go 处理天远API的 KV 数组结构与并发风控
大数据·api
千匠网络20 分钟前
S2B供应链平台:优化资源配置,推动产业升级
大数据·人工智能·产品运营·供应链·s2b
WX-bisheyuange25 分钟前
基于Spring Boot的智慧校园管理系统设计与实现
java·大数据·数据库·毕业设计
AI营销快线1 小时前
AI如何每日自动生成大量高质量营销素材?
大数据·人工智能
KKKlucifer1 小时前
从 “人工标注” 到 “AI 驱动”:数据分类分级技术的效率革命
大数据·人工智能·分类
天远云服1 小时前
Spring Boot 金融实战:如何清洗天远API的 KV 数组格式风控数据
大数据·api
我爱鸢尾花1 小时前
第十四章聚类方法理论及Python实现
大数据·python·机器学习·数据挖掘·数据分析·聚类
数据猿3 小时前
【金猿人物展】涛思数据创始人、CEO陶建辉:实现AI时代时序数据库向“数据平台”的转型
大数据·数据库·人工智能·时序数据库·涛思数据
GIS数据转换器3 小时前
2025无人机遥感新国标解读
大数据·科技·安全·机器学习·无人机·智慧城市