当前位置: 首页 > news >正文

ElasticSearch 基础内容深度解析

文章目录

前言

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

1. 文档(Document)—— 最小数据单元

2. 索引(Index)—— 文档的集合

3. 映射(Mapping)—— 索引的 “数据规则”

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

1. 正向索引 vs 倒排索引

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

3. 优势

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

1. 节点(Node)—— 集群的 “服务器”

2. 分片(Shard)—— 索引的 “拆分单元”

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

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

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

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

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

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

http://www.xdnf.cn/news/1481689.html

相关文章:

  • 网站管理后台
  • cifar10下载太慢,解决使用第三方链接或迅雷下载
  • VSCode下载安装与汉化
  • NAND Flash块擦除与数据状态解析
  • 【视网膜分割】一种基于结构自适应模型的空洞残差网络
  • 基于大数据+python的肾脏疾病风险教育与数据可视化系统源码 基于数据挖掘的肾脏疾病风险分析与决策支持系统(调试、开题、LW、PPT)
  • 芯片ATE测试PAT(Part Average Testing)学习总结-20250916
  • 提示词工程知识积累及分析
  • C++ 并发编程指南 实现无锁队列
  • Sentinel服务治理:服务降级、熔断与线程隔离
  • 新后端漏洞(上)- Weblogic SSRF漏洞
  • 「数据获取」《中国服务业统计与服务业发展(2014)》
  • 详解flink性能优化
  • docker使用nginxWebUI配置
  • OSG工具集
  • Python错误测试与调试——文档测试
  • ElemenetUI之常用小组件
  • Elasticsearch面试精讲 Day 10:搜索建议与自动补全
  • GEE:基于自定义的年度时序数据集进行LandTrendr变化检测
  • Qt UDP通信学习
  • 《sklearn机器学习——模型的持久性》joblib 和 pickle 进行模型保存和加载
  • python的数据结构
  • redission实现读写锁的原理
  • TDengine 时间函数 WEEKDAY() 用户手册
  • 【PCIe EP 设备入门学习专栏 -- 8 PCIe EP 架构详细介绍】
  • dask.dataframe.shuffle.set_index中获取 divisions 的步骤分析
  • 单例模式(巨通俗易懂)普通单例,懒汉单例的实现和区别,依赖注入......
  • 【C++题解】DFS和BFS
  • leetcode 75 颜色分类
  • OS项目构建效能改进策划方案