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、向量搜索),才能充分发挥其性能优势。

相关推荐
2501_920047034 小时前
git在Linux中的使用
linux·git·elasticsearch
Debug_Snail6 小时前
【营销策略算法】关联规则学习-购物篮分析
大数据·人工智能
BYSJMG6 小时前
计算机毕设大数据方向:基于Spark+Hadoop的餐饮外卖平台数据分析系统【源码+文档+调试】
大数据·hadoop·分布式·python·spark·django·课程设计
java水泥工7 小时前
基于Echarts+HTML5可视化数据大屏展示-茶叶种植大数据溯源平台
大数据·echarts·html5
华略创新8 小时前
标准化与定制化的平衡艺术:制造企业如何通过灵活配置释放系统价值
大数据·人工智能·制造·crm·管理系统·erp·企业管理
半夏陌离10 小时前
SQL 实战指南:电商订单数据分析(订单 / 用户 / 商品表关联 + 统计需求)
java·大数据·前端
成长之路51411 小时前
【面板数据】各省制造业出口技术复杂度数据集(2010-2023年)
大数据
翰林小院11 小时前
【大数据专栏】大数据框架-Apache Druid Overview
大数据·durid