Home
avatar

.𝙃𝙤𝙬𝙚

向下滚动

核心术语:索引、文档、映射、分片与副本|Elasticsearch 七日笔记 02

学习目标

  • 掌握 Elasticsearch 的核心术语(索引、文档、映射、分片、副本)及其在数据存储和检索中的功能。

Elasticsearch 的核心概念是理解其工作机制的基础,以下是五个关键术语的详细说明。

索引(Index)

  • 定义:
    • 索引是文档的逻辑容器,类似于关系型数据库中的“表”。
    • 它是 ES 中数据的顶级组织单位,每个索引代表一类数据。
  • 特点:
    • 名称必须小写,不能包含特殊字符(如 #、%)。
    • 一个索引通常对应一个业务场景,例如 users(用户数据)、products(商品数据)。
  • 内部结构:
    • 索引由多个分片组成,每个分片是一个独立的 Lucene 索引。
  • 示例:
    • 创建一个名为 users 的索引:
      PUT /users
    • 结果:ES 会自动创建一个空的索引,等待文档写入。
  • 命名建议:
    • 使用有意义的名称,如 logs-2025-02(带日期的日志索引)。

文档(Document)

  • 定义:
    • 文档是 ES 中的最小数据单元,以 JSON 格式存储,类似于数据库表中的一行。
    • 每个文档属于一个索引,并有一个唯一标识符(ID)。
  • 结构:
    • 由多个字段(Field)组成,例如:
      {"name": "Alice", "age": 25, "email": "alice@example.com"}
  • 特点:
    • ID 可以手动指定(如 1),也可以由 ES 自动生成(如随机 UUID)。
    • 文档是动态的,可随时添加或修改字段。
  • 存储方式:
    • ES 使用倒排索引存储文档字段,便于快速检索。
  • 示例:
    • 插入一个文档:
      PUT /users/_doc/1
      {"name": "Alice", "age": 25}
    • 查询文档:
      GET /users/_doc/1
      返回:
      {
        "_index": "users",
        "_id": "1",
        "_source": {"name": "Alice", "age": 25}
      }

映射(Mapping)

  • 定义:
    • 映射是索引中字段的类型定义和索引规则,类似于数据库的表结构。
    • 它告诉 ES 如何处理每个字段(如分词、存储、排序)。
  • 字段类型:
    • text:分词文本,适合全文搜索。
      • 示例:“Hello World” -> ["hello", "world"]。
    • keyword:精确值,适合排序和聚合。
      • 示例:“Hello World” -> "Hello World"。
    • integer、float:数值类型。
    • date:日期类型,如 "2025-02-27T10:00:00"。
  • 动态映射:
    • ES 会根据写入的数据自动推断类型,例如:
      • "25" -> integer
      • "2025-02-27" -> date
  • 手动映射:
    • 示例:
      PUT /users
      {
        "mappings": {
          "properties": {
            "name": {"type": "text"},
            "age": {"type": "integer"}
          }
        }
      }
  • 作用:
    • 优化搜索性能,避免类型推断错误(如字符串误判为数字)。
  • 注意:
    • 一旦字段类型定义,不能轻易修改,需重建索引。

分片(Shards)

  • 定义:
    • 分片是将索引分割成多个部分的机制,每个分片是一个独立的 Lucene 索引。
    • ES 通过分片实现数据的分布式存储和并行查询。
  • 类型:
    • 主分片(Primary Shard):
      • 存储原始数据,默认 5 个。
      • 负责写入操作。
    • 副本分片(Replica Shard):
      • 主分片的备份,默认 1 个副本。
      • 负责读操作和容错。
  • 作用:
    • 性能:多个分片并行处理查询。
    • 容错:副本分片确保数据冗余。
  • 配置:
    • 示例:
      PUT /users
      {
        "settings": {
          "number_of_shards": 1,
          "number_of_replicas": 0
        }
      }
    • 单机测试时,建议 1 主分片,0 副本。
  • 分片数量建议:
    • 根据数据量和节点数调整,过多分片增加管理开销,过少降低并行性。

副本(Replicas)

  • 定义:
    • 副本是主分片的冗余副本,用于提高数据的高可用性。
  • 特点:
    • 每个主分片可以有多个副本,分布在不同节点上。
    • 副本可处理读请求,提升查询性能。
  • 作用:
    • 高可用:主分片所在节点宕机时,副本接管。
    • 负载均衡:分担查询压力。
  • 示例:
    • 一个索引有 1 个主分片和 1 个副本,总共 2 个分片。
  • 配置:
    • 单机时可设为 0,集群时建议至少 1。

术语之间的关系

  • 索引包含多个文档。
  • 索引被分成多个主分片,每个主分片可以有多个副本分片。
  • 映射定义了文档字段的处理方式。
  • 示例场景:
    • 索引 users 有 1000 个文档,配置为 2 个主分片和 1 个副本,总共 4 个分片(2 主 + 2 副本)。
    • 每个分片存储约 500 个文档,副本分片同步主分片数据。

学习建议

  • 理解分布式:
    • 思考分片和副本如何实现高可用和性能提升。
    • 画一个简单的集群图,标注主分片和副本分片。

本文是《Elasticsearch 七日笔记》系列的第 2 篇,对应第 1 天的学习内容。

Elasticsearch 搜索引擎 核心概念 分片与副本