Elasticsearch 索引基础核心手册

本文覆盖索引基础(Index basics)、无服务器版本(Serverless)、Elastic Stack 自建版本三大核心模块,完整梳理索引的定义、组成、管理规则与全流程实操方案。

一、索引基础(Index basics)

1. 索引核心定义

索引是Elasticsearch中最基础的存储单元,是一组通过名称或别名唯一标识的文档集合。其唯一名称是核心标识,在搜索查询、数据写入及各类索引操作中,均需通过该名称定位目标索引。

实用提示

与索引强相关的核心概念是数据流(Data Stream)。这是一种针对仅追加、带时间戳的数据做了专项优化的索引抽象层,由系统隐藏、自动生成的后备索引组成。如果你的业务场景处理带时间戳的时序数据(如日志、监控、指标数据),推荐使用Elastic可观测性解决方案,可获取配套工具集与专项优化能力。

2. 索引核心组成部分

索引由以下三大核心组件构成,完整定义了数据的存储、索引与检索规则。

2.1 文档(Documents)

Elasticsearch以JSON文档的形式序列化并存储数据。文档是一组字段的集合,字段为包含业务数据的键值对;每个文档都具备唯一ID,该ID可由用户自定义,也可由Elasticsearch自动生成。

可直接参考的标准文档示例


{
  "_index": "my-first-elasticsearch-index",
  "_id": "DyFpo5EBxE8fzbb95DOa",
  "_version": 1,
  "_seq_no": 0,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "email": "john@smith.com",
    "first_name": "John",
    "last_name": "Smith",
    "info": {
      "bio": "Eco-warrior and defender of the weak",
      "age": 25,
      "interests": [
        "dolphins",
        "whales"
      ]
    },
    "join_date": "2024/05/01"
  }
}
  • _source 字段为文档的核心业务数据,所有用户自定义的业务字段均存放于此;

  • 其余下划线开头的字段,均为Elasticsearch系统自动生成的元数据字段。

2.2 元数据字段(Metadata fields)

完成索引写入的文档包含业务数据与元数据两部分。元数据字段是Elasticsearch的系统字段,用于存储文档的关联信息,所有元数据字段均以下划线 _ 为前缀。

核心元数据字段说明:

元数据字段核心作用
_index文档所属的索引名称
_id文档的唯一ID,单个索引内ID不可重复
_version文档的版本号,文档每次更新版本号自动递增
_source文档的原始JSON业务数据
2.3 映射与数据类型(Mappings and data types)

每个索引都具备一套映射(Mapping,也可称为Schema模式),用于定义文档中字段的索引规则。映射会明确每个字段的数据类型、字段的索引方式、以及字段的存储规则,是Elasticsearch实现高效检索的核心配置。

3. 索引管理核心说明

Elastic官方提供的索引管理功能,是管理集群内索引、数据流、索引模板、富集策略的一站式便捷工具。规范的索引管理,可保障数据以正确、最具成本效益的方式完成存储。

入口说明:在Kibana导航菜单或全局搜索框中,检索并进入「Index management(索引管理)」页面,即可使用全量功能。

4. 索引管理所需权限

若你启用了Elasticsearch安全特性,需为操作账号配置以下对应权限,方可正常使用索引管理功能:

  1. 访问Kibana索引管理功能:需配置 monitor 集群权限;

  2. 查看数据流或索引的元数据与详情:需配置 view_index_metadata 和 manage 索引权限;

  3. 管理索引模板:需配置 manage_index_templates 集群权限。

权限配置入口:

  • 可视化配置:Kibana 栈管理(Stack Management)> 安全(Security)> 角色(Roles)

  • API配置:调用「创建或更新角色API」完成权限配置

二、无服务器版本(Serverless)专属索引管理特性

Elasticsearch Serverless版本针对索引管理提供轻量化、托管化的专属能力,核心操作规则如下:

  1. 单索引详情查看与操作:点击索引名称,即可下钻查看索引概览、映射配置、设置项;也可从该页面直接跳转至Discover,进一步探查索引内的文档数据。

  2. 多索引批量操作:勾选多个索引前的复选框,打开「Manage indices(管理索引)」菜单,即可执行批量操作;具体可执行的操作指令,可参考官方《索引操作执行指南》。

  3. 隐藏索引查看:开启「Include hidden indices(包含隐藏索引)」开关,即可查看全量索引,包括数据流对应的系统后备索引。

  4. 索引筛选:通过搜索框筛选索引列表,或点击索引标签筛选;标签可标识索引是否为跟随索引、汇总索引等特殊类型。

  5. 专项优化规则:匹配 logs-*-* 命名规则的索引,默认启用logsDB索引模式,自动创建日志专属数据流。

三、Elastic Stack 版本专属索引管理特性

Elastic Stack 自建部署版本提供更完整、可自定义的索引管理能力,核心模块如下:

1. 数据流管理

数据流可跨多个索引存储仅追加的时序数据,同时为请求提供一个统一的命名资源,用户无需关注底层后备索引的细节,核心操作规则:

  • 在「Data Streams(数据流)」页面,可完成数据流探查、生命周期管理配置等全量操作;

  • 点击「Indices(索引)」列的数值,可查看数据流关联的后备索引详情;

  • 「Data retention(数据保留期)」列的数值,代表数据流生命周期策略管控的存储时长,超过该期限的数据,Elasticsearch可自动清理;

  • 数据保留期修改:选中目标数据流,打开「Manage(管理)」菜单,点击「Edit data retention(编辑数据保留期)」即可修改;仅当数据流未被ILM(索引生命周期管理)策略管控时,该操作才可执行;

  • 点击数据流名称,可查看数据流的完整信息,包括生命周期配置详情;

  • 版本专项说明:从Elastic Stack 9.2版本开始,新增「Streams」页面,提供Kibana内数据管理任务的中心化入口,包括数据保留期修改等核心操作。

2. 索引模板管理

索引模板是一类配置模板,用于定义Elasticsearch创建索引时的默认配置规则,核心操作规则:

  • 在「Index Templates(索引模板)」页面,可完成模板的创建、编辑、克隆、删除全生命周期管理;

  • 索引模板的修改仅对新创建的索引生效,不会影响已存在的索引;

  • 点击模板名称,可查看模板详情并执行相关操作;

  • 点击「Component templates(组件模板)」列的数值,可查看索引模板内引用的组件模板详情;

  • 「Content(内容)」列的标识,可体现模板是否包含索引映射、设置项、别名配置;

  • 可通过「Create template(创建模板)」向导,可视化完成新模板的创建。

3. 组件模板管理

组件模板是可复用的模板构建块,可被索引模板引用,用于统一配置索引的设置项、映射、别名,核心操作规则:

  • 在「Component Templates(组件模板)」页面,可完成组件模板的创建、编辑、克隆、删除操作;

  • 点击模板名称,即可查看模板详情并执行相关操作;

  • 可通过「Create component template(创建组件模板)」向导,完成新组件模板的创建;

  • 优先级规则:索引模板中直接定义的配置,会覆盖引用的组件模板中存在冲突的配置。

4. 富集策略管理

富集策略(Enrich Policy)是一组配置规则,用于在数据写入时,将已有索引中的数据补充到新写入的文档中,核心组成与操作规则:

  1. 富集策略核心组成

    • 策略类型:定义富集数据与新写入文档的匹配规则

    • 源索引:存储富集数据文档的目标索引

    • 匹配字段:源索引中用于与新写入文档做匹配的字段

    • 富集字段:源索引中需要补充到新写入文档的字段

    • 可选查询:用于过滤源索引中富集数据的筛选条件

  2. 核心操作规则

    • 在「Enrich Policies(富集策略)」页面,可完成策略的全量管理与配置;

    • 点击策略名称,即可查看策略详情,也可通过操作列的按钮执行相关操作;

    • 可通过「Create enrich policy(创建富集策略)」向导,完成新策略的创建;

    • 强制生效规则:新建的富集策略,必须先执行激活,才能在富集处理器、ES|QL查询中使用;激活策略时,Elasticsearch会基于源索引的富集数据,创建一个精简的系统索引(富集索引),用于后续文档的匹配与数据补充。

四、全量可落地实操案例:创建索引模板并验证生效

本案例可在Elastic Stack 与 Serverless 版本中通用,全程3个步骤,可完整实现「创建索引模板→写入数据自动生成索引→验证模板配置生效」的全流程。

步骤1:配置模板名称与索引匹配规则

  1. 在Kibana的「Index Templates」页面,打开「Create template」创建向导;

  2. 「Name」字段输入:my-index-template;

  3. 「Index pattern」设置为:my-index-*,模板会自动匹配所有名称符合该通配规则的索引;

  4. 数据流开关、优先级、版本号、_meta 字段,均保持默认或留空,进入下一步。

步骤2:配置映射、别名与设置项

本步骤无需配置组件模板,直接在模板中定义核心配置,操作如下:

  1. 组件模板配置项:保持为空,不添加任何组件模板;

  2. 索引设置项:保持为空,不做额外配置;

  3. 索引映射配置:可通过可视化界面添加,也可点击「Load JSON」直接粘贴以下JSON配置,定义geo对象字段与子级地理坐标字段:

    
    {
      "properties": {
        "geo": {
          "properties": {
            "coordinates": {
              "type": "geo_point"
            }
          }
        }
      }
    }
    

    动态模板、高级选项均保持默认,不额外配置;

  4. 索引别名配置:添加以下JSON配置,定义统一别名my-index:

    
    {
      "my-index": {}
    }
    
  5. 进入预览页面,核对配置信息无误后,点击「Create template」完成模板创建。

步骤3:创建索引并验证模板生效

通过写入文档的方式自动创建索引,验证模板是否自动应用,操作如下:

  1. 在Kibana Dev Tools中,执行以下2条写入命令,自动创建my-index-000001和my-index-000002两个索引:

    
    # 写入第一个文档,生成my-index-000001索引
    POST /my-index-000001/_doc
    {
      "@timestamp": "2019-05-18T15:57:27.541Z",
      "ip": "225.44.217.191",
      "extension": "jpg",
      "response": "200",
      "geo": {
        "coordinates": {
          "lat": 38.53146222,
          "lon": -121.7864906
        }
      },
      "url": "https://media-for-the-masses.theacademyofperformingartsandscience.org/uploads/charles-fullerton.jpg"
    }
    
    # 写入第二个文档,生成my-index-000002索引
    POST /my-index-000002/_doc
    {
      "@timestamp": "2019-05-20T03:44:20.844Z",
      "ip": "198.247.165.49",
      "extension": "php",
      "response": "200",
      "geo": {
        "coordinates": {
          "lat": 37.13189556,
          "lon": -76.4929875
        }
      },
      "memory": 241720,
      "url": "https://theacademyofperformingartsandscience.org/people/type:astronauts/name:laurel-b-clark/profile"
    }
    
  2. 执行以下GET命令,查看两个索引的配置详情,验证映射、别名是否按我们创建的模板完成配置:

    
    GET /my-index-000001,my-index-000002
    
  3. 结果验证:返回的索引详情中,可看到geo.coordinates字段为geo_point类型,且索引绑定了my-index别名,代表模板已正常生效。

更多推荐