Elasticsearch is a distributed, RESTful search and analytics engine capable of addressing a growing number of use cases.
Elasticsearch 概述
Elasticsearch 是一个基于 Lucene 的分布式搜索和分析引擎,由 Elastic 公司开发。核心特性包括:
- 全文搜索: 强大的全文检索能力
- 分布式架构: 水平扩展,支持 PB 级数据
- 实时性: 近实时的搜索和分析
- RESTful API: 简单易用的 HTTP 接口
- 多租户: 支持多索引并行查询
- 高可用: 自动副本和分片管理
核心概念
- Index(索引): 类似数据库的 Database,存储相关文档的集合
- Document(文档): 索引中的一条记录,JSON 格式
- Field(字段): 文档中的键值对
- Mapping(映射): 定义文档结构和字段类型
- Shard(分片): 索引的水平分割,实现分布式存储
- Replica(副本): 分片的复制,提供高可用和读性能
- Node(节点): Elasticsearch 集群中的单个服务器
- Cluster(集群): 多个节点的集合
安装 Elasticsearch
使用 Docker 安装(推荐)
1 | # 单节点开发模式 |
Docker Compose 集群
1 | version: '3' |
手动安装
1 | # 下载 |
基本操作
索引管理
1 | # 创建索引 |
文档操作
1 | # 创建文档(指定 ID) |
搜索查询
1 | # 简单查询 |
高级特性
Mapping 定义
1 | PUT /products |
分析器配置
1 | PUT /articles |
索引别名
1 | # 创建别名 |
性能优化
索引优化
1 | PUT /optimized-index |
查询优化
1 | // 使用 filter 而非 query(可缓存) |
集群管理
集群健康检查
1 | # 查看集群健康 |
分片管理
1 | # 手动分配分片 |
总结核心知识要点
Elasticsearch 架构
- 集群结构: Master Node(管理)+ Data Node(存储)+ Coordinating Node(协调)
- 分片机制: 主分片(Primary Shard)+ 副本分片(Replica Shard)
- 倒排索引: 基于 Lucene,实现快速全文搜索
- 近实时: 1秒内可见(默认 refresh_interval)
核心 API 示例
1. CRUD 操作
1 | # Create/Update |
2. 搜索查询
1 | { |
3. 聚合分析
1 | { |
数据类型对比
| 类型 | 说明 | 示例 |
|---|---|---|
text |
全文索引,会分词 | 文章内容 |
keyword |
精确匹配,不分词 | 标签、分类 |
integer/long |
整数 | 数量、ID |
float/double |
浮点数 | 价格、评分 |
date |
日期时间 | 创建时间 |
boolean |
布尔值 | 是否启用 |
geo_point |
地理坐标 | 经纬度 |
nested |
嵌套对象 | 复杂结构 |
查询类型对比
| 查询类型 | 使用场景 | 缓存 |
|---|---|---|
match |
全文搜索,会分词 | 否 |
term |
精确匹配,不分词 | 是(filter) |
range |
范围查询 | 是(filter) |
bool |
组合查询 | 部分 |
wildcard |
通配符查询 | 否 |
prefix |
前缀查询 | 否 |
fuzzy |
模糊查询 | 否 |
性能调优清单
1 | # 1. 合理设置分片数 |
常用运维命令
1 | # 集群健康 |
最佳实践
- 索引设计: 按时间分割索引(logs-2024-01),便于管理和删除
- 分片规划: 主分片数固定,副本数可动态调整
- Mapping 设计: 禁用不需要的字段索引(
"enabled": false) - 查询优化: 优先使用 filter,缓存常用查询
- 监控告警: 监控集群健康、节点负载、查询延迟
- 备份恢复: 定期快照备份(Snapshot & Restore)
核心原理
- 倒排索引: Term → Document ID 列表,快速定位文档
- 分片路由:
shard = hash(routing) % number_of_primary_shards - 副本一致性: 主分片写入成功后同步到副本
- 段合并: 后台自动合并小段文件,提升查询性能
- 评分机制: TF-IDF 或 BM25 算法计算相关性得分