忘机山人
本章导读:本章将介绍 Elasticsearch 的发展历史、核心特性、与其他搜索引擎的对比,以及典型的应用场景,帮助读者建立对 Elasticsearch 的整体认识。

Elasticsearch 是一个基于 Apache Lucene 构建的开源、分布式、RESTful 风格的搜索和数据分析引擎。它能够快速地存储、搜索和分析海量数据,通常在毫秒级别内返回搜索结果。
| 时间 | 里程碑 |
|---|---|
| 2010年2月 | Shay Banon 发布 Elasticsearch 0.4 版本 |
| 2012年 | Elastic 公司成立 |
| 2014年 | 发布 1.0 版本,标志着产品成熟 |
| 2015年 | 发布 2.0 版本,引入 Pipeline Aggregations |
| 2016年 | 发布 5.0 版本(跳过 3.x/4.x 与 ELK 版本统一) |
| 2017年 | 发布 6.0 版本,移除 mapping types |
| 2019年 | 发布 7.0 版本,默认单 type,引入新集群协调层 |
| 2021年 | 发布 8.0 版本,默认启用安全特性 |
| 2023年 | 8.x 持续迭代,增强向量搜索和 AI 能力 |
_doc)| 场景 | 推荐版本 |
|---|---|
| 新项目 | 8.x 最新稳定版 |
| 已有 7.x 项目 | 评估升级到 8.x |
| 对安全要求高 | 8.x(默认安全) |
| 需要向量搜索 | 8.x |
┌─────────────────────────────────────────────────────────┐
│ Elasticsearch 集群 │
├─────────────────┬─────────────────┬─────────────────────┤
│ Node 1 │ Node 2 │ Node 3 │
│ ┌───────────┐ │ ┌───────────┐ │ ┌───────────┐ │
│ │ Shard P0 │ │ │ Shard P1 │ │ │ Shard P2 │ │
│ │ Shard R1 │ │ │ Shard R2 │ │ │ Shard R0 │ │
│ └───────────┘ │ └───────────┘ │ └───────────┘ │
└─────────────────┴─────────────────┴─────────────────────┘
P = Primary Shard(主分片) R = Replica Shard(副本分片)
基于 Lucene 的强大全文搜索能力:
// 示例:全文搜索
GET /products/_search
{
"query": {
"match": {
"description": "高性能 搜索引擎"
}
}
}
强大的聚合分析能力:
// 示例:按类别统计商品数量
GET /products/_search
{
"size": 0,
"aggs": {
"category_count": {
"terms": {
"field": "category.keyword"
}
}
}
}
| 特性 | Elasticsearch | Solr |
|---|---|---|
| 基础 | Lucene | Lucene |
| 分布式 | 原生支持 | 需要 SolrCloud |
| 配置 | JSON/YAML | XML |
| API | RESTful | RESTful + SolrJ |
| 实时搜索 | 近实时(~1秒) | 近实时 |
| 学习曲线 | 较平缓 | 较陡峭 |
| 社区活跃度 | 非常活跃 | 活跃 |
| 适用场景 | 日志分析、全文搜索 | 传统企业搜索 |
| 特性 | Elasticsearch | MySQL/PostgreSQL |
|---|---|---|
| 数据模型 | 文档(JSON) | 表(行列) |
| 查询语言 | Query DSL | SQL |
| 全文搜索 | 原生支持,功能强大 | 有限支持 |
| 聚合分析 | 非常强大 | 支持,但复杂查询较慢 |
| 事务支持 | 不支持 ACID | 完整支持 |
| 关联查询 | 有限支持 | 强大的 JOIN |
| 扩展性 | 水平扩展容易 | 垂直扩展为主 |
| 特性 | Elasticsearch | MongoDB |
|---|---|---|
| 定位 | 搜索和分析引擎 | 通用文档数据库 |
| 全文搜索 | 核心功能,非常强大 | 支持,但功能有限 |
| 聚合 | 非常强大 | 强大 |
| 事务 | 不支持 | 支持(4.0+) |
| 实时性 | 近实时(~1秒) | 实时 |
| 适用场景 | 搜索、日志、分析 | 通用数据存储 |
┌─────────────────────────────────────────────────────────┐
│ 选型决策树 │
├─────────────────────────────────────────────────────────┤
│ │
│ 需要全文搜索? ──Yes──> Elasticsearch │
│ │ │
│ No │
│ │ │
│ 需要复杂聚合分析? ──Yes──> Elasticsearch │
│ │ │
│ No │
│ │ │
│ 需要 ACID 事务? ──Yes──> 关系型数据库 │
│ │ │
│ No │
│ │ │
│ 需要灵活 Schema? ──Yes──> MongoDB │
│ │
└─────────────────────────────────────────────────────────┘
最经典的应用场景,使用 Elasticsearch + Logstash + Kibana 构建日志分析平台:
┌─────────┐ ┌──────────┐ ┌───────────────┐ ┌────────┐
│ 应用 │───>│ Filebeat │───>│ Logstash │───>│ ES │
│ 日志 │ │ │ │ (解析/转换) │ │ │
└─────────┘ └──────────┘ └───────────────┘ └────┬───┘
│
┌────▼───┐
│ Kibana │
│ (可视化)│
└────────┘
应用价值:
为网站或应用提供搜索功能:
// 电商商品搜索示例
GET /products/_search
{
"query": {
"bool": {
"must": [
{ "match": { "name": "iPhone" } }
],
"filter": [
{ "term": { "category": "手机" } },
{ "range": { "price": { "gte": 5000, "lte": 10000 } } }
]
}
},
"highlight": {
"fields": { "name": {} }
}
}
应用场景:
利用聚合功能进行业务指标分析:
// 按天统计销售额
GET /orders/_search
{
"size": 0,
"aggs": {
"daily_sales": {
"date_histogram": {
"field": "order_date",
"calendar_interval": "day"
},
"aggs": {
"total_amount": {
"sum": { "field": "amount" }
}
}
}
}
}
应用场景:
使用 Elastic Security 进行安全事件分析:
应用场景:
使用 Elastic APM 监控应用性能:
应用场景:
利用地理位置查询能力:
// 查找附近 5km 内的门店
GET /stores/_search
{
"query": {
"geo_distance": {
"distance": "5km",
"location": {
"lat": 39.9042,
"lon": 116.4074
}
}
}
}
应用场景:
本章介绍了 Elasticsearch 的基础知识:
评论
0暂无评论