ElasticSearch基础知识
字数 2040 2025-08-10 19:49:11

ElasticSearch 基础知识详解

1. ElasticSearch 概述

ElasticSearch(简称ES)是一个分布式、可扩展、实时的搜索与数据分析引擎。它不仅支持全文搜索,还支持:

  • 结构化搜索
  • 数据分析
  • 复杂的语言处理
  • 地理位置查询
  • 对象间关联关系

底层技术:ES基于Lucene构建,Lucene是最先进、高性能、全功能的搜索引擎库。ES通过提供简单的RESTful API隐藏了Lucene的复杂性。

2. ES 核心特点

  1. 分布式实时文档存储:每个字段都可被索引与搜索
  2. 实时分析搜索引擎:支持各种查询和聚合操作
  3. 高度可扩展:能胜任上百个服务节点,支持PB级数据
  4. 高性能:面对海量数据时搜索速度极快
  5. 开箱即用的集群功能

3. 为什么选择 ElasticSearch

3.1 与传统数据库对比

MySQL/Oracle的问题

  • 大数据量高并发下性能下降
  • 分表分库实现复杂,维护成本高
  • 表结构更改困难
  • Oracle费用昂贵

Redis/HBase的问题

  • Redis适合缓存,但数据结构简单(键值对),不支持复杂查询
  • HBase适合海量数据存储,但实时分析和在线分析困难

3.2 ES 优势场景

适合使用ES的数据类型:

  • 日志数据(支持关键字查询和可视化分析)
  • 指标数据(实时监控、报警)
  • 需要全文检索、聚合分析、可视化的场景

ES提供完整解决方案:

  • 数据获取:Logstash、Beat
  • 存储计算:ElasticSearch
  • 展示分析:Kibana
  • 扩展功能:X-Pack(安全、告警、监控、ML)

4. ElasticSearch 核心概念

4.1 集群与节点

  • 集群(Cluster):由一个或多个节点组成的拓扑网络,通过集群名称区分
  • 节点(Node):单个ES实例,分为:
    • 主节点:管理集群状态
    • 数据节点:提供数据服务

4.2 索引与文档

  • 索引(Index):一组文档的集合(类似数据库中的表)
  • 文档(Document):一条记录,以JSON格式存储
  • 字段(Field):文档中的信息域,可控制是否存储和索引

4.3 分片与副本

  • 分片(Shard):索引被分割的部分,分布在不同节点
    • 主分片:处理写入和搜索
    • 副本分片:保障高可用,参与搜索
  • 默认配置:每个索引5个主分片,每个主分片1个副本

分片设计建议

  • 单个分片最大文档数20亿
  • 推荐最大JVM堆空间30-32GB,因此分片最大容量限制为30GB
  • 过早分片是"万恶之源",应根据数据增长趋势合理规划

4.4 段与分词

  • 段(Segment):每个分片包含多个段,每个段都是倒排索引
    • 不可变,删除操作通过标记实现
    • 段合并时真正删除数据
    • 段越多,搜索性能越低,内存消耗越大
  • 分词(Term):搜索最小单位,由字段文本产生
  • 词条(Token):分词过程中记录分词信息的对象

5. ElasticSearch 与 MySQL 概念对比

MySQL ElasticSearch
数据库 索引(Index)
类型(Type)
文档(Document)
列(Columns) 字段(Fields)

6. Lucene 核心知识

6.1 Lucene 概述

Lucene是Apache的开源全文检索引擎工具包,提供:

  • 完整的查询引擎和索引引擎
  • 部分文本分析引擎
  • 不是完整应用,而是为应用提供索引和搜索功能

6.2 Lucene 特性

  1. 高性能索引

    • 每小时可索引150GB+数据
    • 只需1MB堆内存
    • 增量索引和批量索引速度相同
    • 索引大小约为文本大小的20-30%
  2. 高效搜索算法

    • 支持短语查询、通配符查询、范围查询等
    • 支持字段搜索、任意字段排序
    • 支持多索引查询结果合并
    • 支持高亮、join、分组
  3. 跨平台

    • 纯Java编写
    • 有多种语言实现版(C, C++, Python等)

6.3 Lucene 索引流程

  1. 获取内容:通过爬虫或程序获取原始内容
  2. 建立文档:将内容转换为文档(包含多个域)
  3. 文档分析:将文本分割成语汇单元
  4. 文档索引:将文档加入索引列表

6.4 Lucene 搜索组件

  1. 建立查询:用户输入查询短语并提交
  2. 搜索查询:检索索引并返回匹配文档
  3. 展现结果:前端展示搜索结果

7. 实际应用建议

  1. 分片规划

    • 根据数据量增长趋势设计
    • 避免过度分片(每个分片都有额外成本)
    • 运行中无法调整分片数量,需重建索引
  2. 性能优化

    • 控制段数量(影响搜索性能和内存)
    • 合理设计字段的存储和索引属性
  3. 适用场景

    • 日志分析
    • 实时监控
    • 全文检索
    • 复杂聚合分析
  4. 生态系统

    • 结合Logstash(数据采集)
    • 使用Kibana(可视化)
    • 考虑X-Pack(安全、监控等高级功能)
ElasticSearch 基础知识详解 1. ElasticSearch 概述 ElasticSearch(简称ES)是一个分布式、可扩展、实时的搜索与数据分析引擎。它不仅支持全文搜索,还支持: 结构化搜索 数据分析 复杂的语言处理 地理位置查询 对象间关联关系 底层技术 :ES基于Lucene构建,Lucene是最先进、高性能、全功能的搜索引擎库。ES通过提供简单的RESTful API隐藏了Lucene的复杂性。 2. ES 核心特点 分布式实时文档存储 :每个字段都可被索引与搜索 实时分析搜索引擎 :支持各种查询和聚合操作 高度可扩展 :能胜任上百个服务节点,支持PB级数据 高性能 :面对海量数据时搜索速度极快 开箱即用的集群功能 3. 为什么选择 ElasticSearch 3.1 与传统数据库对比 MySQL/Oracle的问题 : 大数据量高并发下性能下降 分表分库实现复杂,维护成本高 表结构更改困难 Oracle费用昂贵 Redis/HBase的问题 : Redis适合缓存,但数据结构简单(键值对),不支持复杂查询 HBase适合海量数据存储,但实时分析和在线分析困难 3.2 ES 优势场景 适合使用ES的数据类型: 日志数据(支持关键字查询和可视化分析) 指标数据(实时监控、报警) 需要全文检索、聚合分析、可视化的场景 ES提供完整解决方案: 数据获取:Logstash、Beat 存储计算:ElasticSearch 展示分析:Kibana 扩展功能:X-Pack(安全、告警、监控、ML) 4. ElasticSearch 核心概念 4.1 集群与节点 集群(Cluster) :由一个或多个节点组成的拓扑网络,通过集群名称区分 节点(Node) :单个ES实例,分为: 主节点:管理集群状态 数据节点:提供数据服务 4.2 索引与文档 索引(Index) :一组文档的集合(类似数据库中的表) 文档(Document) :一条记录,以JSON格式存储 字段(Field) :文档中的信息域,可控制是否存储和索引 4.3 分片与副本 分片(Shard) :索引被分割的部分,分布在不同节点 主分片:处理写入和搜索 副本分片:保障高可用,参与搜索 默认配置 :每个索引5个主分片,每个主分片1个副本 分片设计建议 : 单个分片最大文档数20亿 推荐最大JVM堆空间30-32GB,因此分片最大容量限制为30GB 过早分片是"万恶之源",应根据数据增长趋势合理规划 4.4 段与分词 段(Segment) :每个分片包含多个段,每个段都是倒排索引 不可变,删除操作通过标记实现 段合并时真正删除数据 段越多,搜索性能越低,内存消耗越大 分词(Term) :搜索最小单位,由字段文本产生 词条(Token) :分词过程中记录分词信息的对象 5. ElasticSearch 与 MySQL 概念对比 | MySQL | ElasticSearch | |--------------|---------------| | 数据库 | 索引(Index) | | 表 | 类型(Type) | | 行 | 文档(Document)| | 列(Columns) | 字段(Fields) | 6. Lucene 核心知识 6.1 Lucene 概述 Lucene是Apache的开源全文检索引擎工具包,提供: 完整的查询引擎和索引引擎 部分文本分析引擎 不是完整应用,而是为应用提供索引和搜索功能 6.2 Lucene 特性 高性能索引 : 每小时可索引150GB+数据 只需1MB堆内存 增量索引和批量索引速度相同 索引大小约为文本大小的20-30% 高效搜索算法 : 支持短语查询、通配符查询、范围查询等 支持字段搜索、任意字段排序 支持多索引查询结果合并 支持高亮、join、分组 跨平台 : 纯Java编写 有多种语言实现版(C, C++, Python等) 6.3 Lucene 索引流程 获取内容 :通过爬虫或程序获取原始内容 建立文档 :将内容转换为文档(包含多个域) 文档分析 :将文本分割成语汇单元 文档索引 :将文档加入索引列表 6.4 Lucene 搜索组件 建立查询 :用户输入查询短语并提交 搜索查询 :检索索引并返回匹配文档 展现结果 :前端展示搜索结果 7. 实际应用建议 分片规划 : 根据数据量增长趋势设计 避免过度分片(每个分片都有额外成本) 运行中无法调整分片数量,需重建索引 性能优化 : 控制段数量(影响搜索性能和内存) 合理设计字段的存储和索引属性 适用场景 : 日志分析 实时监控 全文检索 复杂聚合分析 生态系统 : 结合Logstash(数据采集) 使用Kibana(可视化) 考虑X-Pack(安全、监控等高级功能)