ElasticSearch 基础内容深度解析

文章目录

前言

[一、数据组织:ES 如何存数据?](#一、数据组织:ES 如何存数据?)

[1. 文档(Document)------ 最小数据单元](#1. 文档(Document)—— 最小数据单元)

[2. 索引(Index)------ 文档的集合](#2. 索引(Index)—— 文档的集合)

[3. 映射(Mapping)------ 索引的 "数据规则"](#3. 映射(Mapping)—— 索引的 “数据规则”)

[二、底层核心:倒排索引 ------ 为什么 ES 检索快?](#二、底层核心:倒排索引 —— 为什么 ES 检索快?)

[1. 正向索引 vs 倒排索引](#1. 正向索引 vs 倒排索引)

[2. 倒排索引的结构(核心三部分)](#2. 倒排索引的结构(核心三部分))

[3. 优势](#3. 优势)

[三、分布式架构:ES 如何处理海量数据?](#三、分布式架构:ES 如何处理海量数据?)

[1. 节点(Node)------ 集群的 "服务器"](#1. 节点(Node)—— 集群的 “服务器”)

[2. 分片(Shard)------ 索引的 "拆分单元"](#2. 分片(Shard)—— 索引的 “拆分单元”)

[3. 副本(Replica)------ 高可用与负载均衡](#3. 副本(Replica)—— 高可用与负载均衡)

四、基本流程:数据如何写入和查询?

[1. 写入流程(以 "新增文档" 为例)](#1. 写入流程(以 “新增文档” 为例))

[2. 查询流程(以 "全文检索" 为例)](#2. 查询流程(以 “全文检索” 为例))

[五、交互方式:如何操作 ES?](#五、交互方式:如何操作 ES?)

[1. 基本操作示例](#1. 基本操作示例)

总结


前言

ElasticSearch(简称 ES)是一款基于 Apache Lucene 构建的分布式全文搜索引擎与数据分析工具,核心优势在于能高效处理海量数据的近实时存储、检索与分析。

它采用分布式架构,数据会自动拆分为分片分散存储在多节点,同时支持副本备份,既保证了高可用(节点故障不丢数据),也能通过横向加节点轻松扩展,应对 TB/PB 级数据规模;依托 Lucene 的倒排索引技术,它能实现精准匹配、模糊查询、多语言分词检索等强大全文搜索能力,且数据写入后秒级即可被查询,兼顾实时性与检索效率。

此外,ES 通过简单易用的 REST API 实现交互,支持结构化、半结构化甚至非结构化数据存储,无需严格预定义 schema,灵活适配多变业务需求,常见用于系统日志集中分析、电商商品搜索、企业文档检索、用户行为实时统计等场景。

ElasticSearch(ES)的基础内容可以从 "数据组织方式、核心概念、底层原理、分布式架构、基本操作流程" 五个方面详细拆解,这些是理解 ES 工作机制的核心:

一、数据组织:ES 如何存数据?

ES 的数据组织类似 "数据库",但更灵活,核心单位从下到上是:文档→索引→集群

1. 文档(Document)------ 最小数据单元
  • 定义 :ES 中最小的数据载体,类似数据库中的 "一行数据",但必须以JSON 格式存储。

  • 示例 :一条商品数据

    复制代码
    {
      "_id": "1001",  // 文档唯一标识(可手动指定或自动生成)
      "name": "ElasticSearch实战指南",  // 商品名称(文本类型)
      "price": 89.5,  // 价格(数值类型)
      "category": "计算机/编程",  // 分类(文本类型)
      "publish_time": "2023-06-15"  // 出版时间(日期类型)
    }
  • 特点

    • 字段类型灵活(文本、数字、日期、数组等),无需提前声明;
    • 每个文档必须属于一个 "索引",通过_id唯一标识(同一索引内_id不可重复)。
2. 索引(Index)------ 文档的集合
  • 定义:多个结构相似的文档组成的集合,类似数据库中的 "表"。例如 "商品索引""用户日志索引"。
  • 命名规则 :必须小写,不能包含特殊字符(如productsuser-logs)。
  • 核心属性
    • 主分片数量 :创建索引时指定(默认 5 个),一旦创建不可修改(因为数据路由依赖主分片数量);
    • 副本数量 :每个主分片的备份数量(默认 1 个),可动态修改(通过number_of_replicas配置)。
3. 映射(Mapping)------ 索引的 "数据规则"
  • 定义 :类似数据库的 "表结构",用于定义索引中字段的数据类型、分词规则、是否可检索等元数据。

  • 核心作用

    • 告诉 ES 如何解析字段(如 "price" 是数字,可做范围查询;"name" 是文本,需要分词);
    • 避免字段类型混乱(如把 "手机号" 误解析为数字导致截断)。
  • 示例 :为 "商品索引" 定义映射

    复制代码
    {
      "mappings": {
        "properties": {
          "name": { 
            "type": "text",  // 文本类型(支持全文检索)
            "analyzer": "ik_max_word"  // 中文分词器(细粒度拆分)
          },
          "price": { "type": "float" },  // 浮点型(支持范围查询)
          "category": { 
            "type": "keyword"  // 关键字类型(不分词,支持精确匹配)
          },
          "publish_time": { 
            "type": "date", 
            "format": "yyyy-MM-dd"  // 日期格式
          }
        }
      }
    }
  • 动态映射 :ES 默认会 "自动识别字段类型"(如 JSON 数字→long,字符串→text),但建议生产环境手动定义映射(避免自动识别错误)。

二、底层核心:倒排索引 ------ 为什么 ES 检索快?

ES 的高效检索依赖 Lucene 的 "倒排索引" 技术,这是与传统数据库 "正向索引" 的核心区别。

1. 正向索引 vs 倒排索引
  • 正向索引 :以 "文档" 为中心,记录每个文档包含的字段和内容(类似 "书的目录":第几页有什么内容)。
    例:文档 1 含 "ElasticSearch""搜索引擎";文档 2 含 "ES""日志分析"。

  • 倒排索引 :以 "关键词" 为中心,记录每个关键词出现在哪些文档中(类似 "书的索引表":某个词在第几页出现)。
    例:

    plaintext

    复制代码
    "elasticsearch" → [文档1]  
    "搜索引擎" → [文档1]  
    "es" → [文档2]  
    "日志分析" → [文档2]  
2. 倒排索引的结构(核心三部分)
  • 词典(Term Dictionary):所有关键词的集合,按字母 / 拼音排序(支持快速查找,类似字典的 "目录")。
  • ** postings list(文档列表)**:每个关键词对应的文档 ID 列表,还包含 "词频"(该词在文档中出现的次数)和 "位置"(在文档中的具体位置,用于短语查询)。
  • 文档频率(DF):该关键词在多少个文档中出现(用于计算 "相关性评分",出现越少的词,匹配时权重越高)。
3. 优势

查询时直接通过 "关键词" 定位文档,无需逐行扫描,因此即使数据量达千万级,也能毫秒级返回结果。

三、分布式架构:ES 如何处理海量数据?

ES 通过 "集群 + 分片" 实现分布式存储,解决单机存储和性能瓶颈,核心概念是节点、分片、副本

1. 节点(Node)------ 集群的 "服务器"
  • 定义 :运行 ES 进程的服务器,一个节点属于一个 "集群"(通过集群名cluster.name识别,默认elasticsearch)。
  • 核心角色
    • 数据节点(Data Node):存储分片数据,处理数据的读写、检索、聚合(生产环境需单独配置,分配足够内存和磁盘);
    • 主节点(Master Node):管理集群元数据(如索引创建、分片分配、节点加入 / 退出),不处理具体数据(建议单独配置,确保稳定性);
    • 协调节点(Coordinating Node):接收客户端请求,分发到其他节点并汇总结果(默认所有节点都是协调节点)。
2. 分片(Shard)------ 索引的 "拆分单元"
  • 定义:为了存储海量数据,索引会被拆分为多个 "主分片(Primary Shard)",每个主分片是一个独立的 Lucene 索引(存储部分数据)。
  • 示例:一个 1000 万条数据的索引,若主分片数为 5,则每个分片存储 200 万条。
  • 核心规则
    • 主分片数量在索引创建时指定(默认 5 个),后续不可修改 (因为数据路由公式是shard = hash(_id) % 主分片数);
    • 数据写入时,ES 通过_id计算路由到对应的主分片,确保数据均匀分布。
3. 副本(Replica)------ 高可用与负载均衡
  • 定义:每个主分片可以有多个 "副本分片(Replica Shard)",是主分片的完整备份。
  • 作用
    • 高可用:主分片故障时,副本会自动升级为主分片(避免数据丢失);
    • 负载均衡:查询请求可以分发到副本,减轻主分片的压力。
  • 配置 :默认每个主分片有 1 个副本,可通过number_of_replicas动态调整(如增加到 2 个,提升查询性能)。

四、基本流程:数据如何写入和查询?

1. 写入流程(以 "新增文档" 为例)
  1. 客户端发送写入请求到 "协调节点";
  2. 协调节点通过_id计算路由(hash(_id) % 主分片数),找到目标主分片所在的 "数据节点";
  3. 数据写入主分片,成功后同步到该主分片的所有 "副本分片";
  4. 所有副本确认写入成功后,主分片返回 "成功" 给协调节点,协调节点再响应客户端。
2. 查询流程(以 "全文检索" 为例)
  1. 客户端发送查询请求到 "协调节点";
  2. 协调节点将请求分发到索引的所有主分片或副本分片(默认轮询,均衡负载);
  3. 每个分片执行查询,返回匹配的文档和相关性评分;
  4. 协调节点汇总所有分片的结果,按评分排序,截取前 N 条(根据size参数)返回给客户端。

五、交互方式:如何操作 ES?

ES 通过RESTful API (HTTP 协议)交互,支持 GET(查询)、POST(新增)、PUT(修改)、DELETE(删除)等操作,无需复杂客户端,用curl或浏览器即可调用。

1. 基本操作示例
  • 创建索引(指定分片和映射):

    复制代码
    PUT /products  # 索引名
    {
      "settings": {
        "number_of_shards": 3,  # 主分片数3
        "number_of_replicas": 1  # 副本数1
      },
      "mappings": {
        "properties": {
          "name": { "type": "text", "analyzer": "ik_max_word" },
          "price": { "type": "float" }
        }
      }
    }
  • 写入文档

    复制代码
    POST /products/_doc/1001  # 文档ID=1001
    {
      "name": "ElasticSearch入门",
      "price": 59.9
    }
  • 查询文档(搜索 "ElasticSearch" 相关商品):

    复制代码
    GET /products/_search
    {
      "query": {
        "match": { "name": "ElasticSearch" }
      }
    }

总结

ES 的基础核心可概括为:

  • 数据组织:用 "文档(JSON)→索引(集合)" 存储,通过 "映射" 定义规则;
  • 检索核心:依赖倒排索引,从 "关键词" 直接定位文档,实现高效检索;
  • 分布式能力:通过 "节点集群 + 分片拆分 + 副本备份",支持海量数据存储和高可用;
  • 易用性:通过 RESTful API 交互,降低使用门槛。

这些基础决定了 ES 能兼顾 "实时性、扩展性、检索性能",成为处理非结构化数据的主流工具。 简单的说,ES 是一款 "分布式、实时、易用" 的全文检索与分析工具,既解决了海量数据的存储问题,又能快速响应复杂查询,是处理非结构化 / 半结构化数据的利器。生产环境使用 ES 时,需重点关注分片配置、内存调优、Mapping 设计、数据生命周期管理,同时结合业务场景选择合适的高级特性(如 ILM、向量搜索),才能充分发挥其性能优势。

相关推荐
TDengine (老段)19 小时前
TDengine 数学函数 DEGRESS 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
TDengine (老段)19 小时前
TDengine 数学函数 GREATEST 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
失散1319 小时前
分布式专题——47 ElasticSearch搜索相关性详解
java·分布式·elasticsearch·架构
字节数据平台20 小时前
火山引擎Data Agent再拓新场景,重磅推出用户研究Agent
大数据·人工智能·火山引擎
铭毅天下1 天前
Elasticsearch 到 Easysearch 数据迁移 5 种方案选型实战总结
大数据·elasticsearch·搜索引擎·全文检索
跨境小新1 天前
Facebook广告投放:地域定向流量不精准?x个优化指南
大数据·facebook
ZKNOW甄知科技1 天前
客户案例 | 派克新材x甄知科技,构建全场景智能IT运维体系
大数据·运维·人工智能·科技·低代码·微服务·制造
币须赢1 天前
688758赛分科技 阴上阴形态 洗盘上涨?
大数据
学掌门1 天前
大数据知识合集之预处理方法
大数据
Elastic 中国社区官方博客1 天前
Elasticsearch 推理 API 增加了开放的可定制服务
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索