You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenSearch新手技术咨询:Index相关概念差异及数据流疑问

问题1:Index、Index Pattern与Index Template的区别

Index(索引)

是OpenSearch中实际存储和检索数据的核心实体,相当于关系型数据库里的"表"。每个索引有独立的映射(mapping,定义字段类型)和设置(settings,比如分片数、副本数),数据直接写入到具体的索引中。

示例:手动创建一个存储2024年5月用户日志的索引

PUT /user_logs_202405
{
  "settings": {
    "number_of_shards": 2
  },
  "mappings": {
    "properties": {
      "user_id": {"type": "keyword"},
      "log_time": {"type": "date"},
      "action": {"type": "text"}
    }
  }
}

创建完成后,就可以向这个索引写入或查询日志数据。

Index Template(索引模板)

是用于自动生成索引配置的模板规则,提前定义好一组settings、mappings和别名,当创建符合模板匹配规则的索引时,OpenSearch会自动套用模板中的配置,无需手动重复编写。

示例:创建一个匹配所有user_logs_*前缀索引的模板

PUT /_index_template/user_logs_template
{
  "index_patterns": ["user_logs_*"],
  "template": {
    "settings": {
      "number_of_shards": 2
    },
    "mappings": {
      "properties": {
        "user_id": {"type": "keyword"},
        "log_time": {"type": "date"},
        "action": {"type": "text"}
      }
    }
  },
  "priority": 500
}

之后创建user_logs_202406时,无需指定settings和mappings,直接写入数据即可:

POST /user_logs_202406/_doc
{
  "user_id": "u123",
  "log_time": "2024-06-01T10:00:00",
  "action": "login"
}

Index Pattern(索引模式)

是OpenSearch Dashboards中用于批量管理相似索引的匹配规则,通过通配符匹配一组结构相似的索引,将它们视为一个整体进行查询、可视化操作,无需逐个选择索引。

示例:如果有user_logs_202401到user_logs_202406多个月度日志索引,在Dashboards的"Index Patterns"页面创建user_logs_*模式,设置时间字段为log_time后,就可以直接基于这个模式构建时间序列图表、执行跨索引查询,不用单独操作每个月度索引。


问题2:Data Streams是什么?为何部分索引带有它?

Data Streams(数据流)

是OpenSearch针对**时间序列数据(如日志、监控指标)**设计的抽象层,它背后由多个自动创建的"后台索引"(backing indices)组成,会根据预设规则(如时间、索引大小)自动滚动切换后台索引,无需手动创建和管理新索引,简化了时间序列数据的生命周期管理。

示例:创建并使用数据流

  1. 先创建匹配数据流的索引模板(必须包含data_stream: {}字段)
PUT /_index_template/metric_template
{
  "index_patterns": ["metric_stream*"],
  "data_stream": {},
  "template": {
    "mappings": {
      "properties": {
        "@timestamp": {"type": "date"},
        "metric_name": {"type": "keyword"},
        "value": {"type": "double"}
      }
    }
  }
}
  1. 创建数据流
PUT /_data_stream/metric_stream
  1. 直接向数据流写入数据,后台会自动创建metric_stream-000001索引存储数据;当该索引达到阈值(如7天或10GB),会自动生成metric_stream-000002,后续数据自动写入新索引。
POST /metric_stream/_doc
{
  "@timestamp": "2024-06-01T12:00:00",
  "metric_name": "cpu_usage",
  "value": 75.2
}

为何部分索引带有数据流,部分没有?

数据流是场景化的特殊抽象,仅适用于需要按时间/大小自动拆分的时间序列数据场景;而普通索引是通用的存储实体,适用于静态数据、无需自动滚动的场景(如用户信息表、产品目录)。

  • 当你需要持续写入时序数据,且希望自动管理索引的创建、滚动、删除时,就会使用数据流;
  • 若数据是静态的、不需要按时间拆分,或者需要完全手动控制索引配置,就会使用普通索引,自然不会带有数据流。

内容的提问来源于stack exchange,提问作者Java Enthusiast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:46:47