Elasticsearch 第1章:简介

忘机山人

发布于184天前
博客图片修整中,看不了可以先搜索公众号“忘机山人”看。

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



https://appstore.lazycat.cloud/#/shop/detail/xu.deploy.elasticsearch


![image.png](https://dl.playground.lazycat.cloud/guidelines/459/1affd154-791e-4533-b610-fd8882b22d3f.png "image.png")

## 目录

- [什么是 Elasticsearch](#什么是-elasticsearch)
- [发展历史与版本演进](#发展历史与版本演进)
- [核心特性](#核心特性)
- [与其他搜索引擎对比](#与其他搜索引擎对比)
- [典型应用场景](#典型应用场景)
- [本章小结](#本章小结)
- [练习题](#练习题)
- [参考资料](#参考资料)

## 什么是 Elasticsearch

Elasticsearch 是一个基于 Apache Lucene 构建的开源、分布式、RESTful 风格的搜索和数据分析引擎。它能够快速地存储、搜索和分析海量数据,通常在毫秒级别内返回搜索结果。

### 核心定位

- **搜索引擎**:提供全文搜索、结构化搜索、地理位置搜索等多种搜索能力
- **分析引擎**:支持复杂的聚合分析,可用于日志分析、业务指标分析等场景
- **数据存储**:作为 NoSQL 数据库使用,支持 JSON 文档的存储和检索

### 为什么选择 Elasticsearch

1. **近实时搜索**:文档索引后约 1 秒即可被搜索到
2. **分布式架构**:天然支持水平扩展,可处理 PB 级数据
3. **高可用性**:通过副本机制保证数据安全和服务可用
4. **RESTful API**:简单易用的 HTTP 接口,支持多种编程语言
5. **丰富的生态**:与 Kibana、Logstash、Beats 等组成完整的 Elastic Stack

## 发展历史与版本演进

### 起源与发展

| 时间 | 里程碑 |
|------|--------|
| 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 能力 |

### 主要版本特性

#### Elasticsearch 7.x 主要特性

- 移除 mapping types,每个索引只有一个 type(`_doc`)
- 新的集群协调层,提升大规模集群稳定性
- 引入 High Level REST Client 作为推荐客户端
- 默认分片数从 5 改为 1
- 引入 ILM(索引生命周期管理)

#### Elasticsearch 8.x 主要特性

- 默认启用安全特性(TLS、认证)
- 原生向量搜索(kNN)支持
- 新的 Java API Client 替代 High Level REST Client
- 改进的 Lucene 9 支持
- 增强的机器学习和 NLP 能力

### 版本选择建议

| 场景 | 推荐版本 |
|------|----------|
| 新项目 | 8.x 最新稳定版 |
| 已有 7.x 项目 | 评估升级到 8.x |
| 对安全要求高 | 8.x(默认安全) |
| 需要向量搜索 | 8.x |

## 核心特性

### 1. 分布式架构

```
┌─────────────────────────────────────────────────────────┐
│                    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(副本分片)
```

- **自动分片**:数据自动分布到多个节点
- **自动路由**:请求自动路由到正确的分片
- **自动恢复**:节点故障时自动重新分配分片

### 2. 全文搜索

基于 Lucene 的强大全文搜索能力:

```json
// 示例:全文搜索
GET /products/_search
{
  "query": {
    "match": {
      "description": "高性能 搜索引擎"
    }
  }
}
```

### 3. 实时分析

强大的聚合分析能力:

```json
// 示例:按类别统计商品数量
GET /products/_search
{
  "size": 0,
  "aggs": {
    "category_count": {
      "terms": {
        "field": "category.keyword"
      }
    }
  }
}
```

### 4. 高可用与容错

- **副本机制**:每个主分片可配置多个副本
- **自动故障转移**:主分片不可用时,副本自动提升
- **跨集群复制**:支持多数据中心部署

### 5. Schema Free

- 支持动态映射,无需预定义 schema
- 也支持显式映射,精确控制字段类型

## 与其他搜索引擎对比

### Elasticsearch vs Solr

| 特性 | Elasticsearch | Solr |
|------|---------------|------|
| 基础 | Lucene | Lucene |
| 分布式 | 原生支持 | 需要 SolrCloud |
| 配置 | JSON/YAML | XML |
| API | RESTful | RESTful + SolrJ |
| 实时搜索 | 近实时(~1秒) | 近实时 |
| 学习曲线 | 较平缓 | 较陡峭 |
| 社区活跃度 | 非常活跃 | 活跃 |
| 适用场景 | 日志分析、全文搜索 | 传统企业搜索 |

### Elasticsearch vs 关系型数据库

| 特性 | Elasticsearch | MySQL/PostgreSQL |
|------|---------------|------------------|
| 数据模型 | 文档(JSON) | 表(行列) |
| 查询语言 | Query DSL | SQL |
| 全文搜索 | 原生支持,功能强大 | 有限支持 |
| 聚合分析 | 非常强大 | 支持,但复杂查询较慢 |
| 事务支持 | 不支持 ACID | 完整支持 |
| 关联查询 | 有限支持 | 强大的 JOIN |
| 扩展性 | 水平扩展容易 | 垂直扩展为主 |

### Elasticsearch vs MongoDB

| 特性 | Elasticsearch | MongoDB |
|------|---------------|---------|
| 定位 | 搜索和分析引擎 | 通用文档数据库 |
| 全文搜索 | 核心功能,非常强大 | 支持,但功能有限 |
| 聚合 | 非常强大 | 强大 |
| 事务 | 不支持 | 支持(4.0+) |
| 实时性 | 近实时(~1秒) | 实时 |
| 适用场景 | 搜索、日志、分析 | 通用数据存储 |

### 选型建议

```
┌─────────────────────────────────────────────────────────┐
│                     选型决策树                           │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  需要全文搜索? ──Yes──> Elasticsearch                   │
│       │                                                 │
│      No                                                 │
│       │                                                 │
│  需要复杂聚合分析? ──Yes──> Elasticsearch               │
│       │                                                 │
│      No                                                 │
│       │                                                 │
│  需要 ACID 事务? ──Yes──> 关系型数据库                  │
│       │                                                 │
│      No                                                 │
│       │                                                 │
│  需要灵活 Schema? ──Yes──> MongoDB                      │
│                                                         │
└─────────────────────────────────────────────────────────┘
```

## 典型应用场景

### 1. 日志分析(ELK Stack)

最经典的应用场景,使用 Elasticsearch + Logstash + Kibana 构建日志分析平台:

```
┌─────────┐    ┌──────────┐    ┌───────────────┐    ┌────────┐
│  应用   │───>│ Filebeat │───>│   Logstash    │───>│   ES   │
│  日志   │    │          │    │  (解析/转换)   │    │        │
└─────────┘    └──────────┘    └───────────────┘    └────┬───┘
                                                        │
                                                   ┌────▼───┐
                                                   │ Kibana │
                                                   │ (可视化)│
                                                   └────────┘
```

**应用价值**:
- 集中管理分布式系统日志
- 快速定位问题和异常
- 实时监控系统状态
- 支持复杂的日志查询和分析

### 2. 全文搜索

为网站或应用提供搜索功能:

```json
// 电商商品搜索示例
GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "name": "iPhone" } }
      ],
      "filter": [
        { "term": { "category": "手机" } },
        { "range": { "price": { "gte": 5000, "lte": 10000 } } }
      ]
    }
  },
  "highlight": {
    "fields": { "name": {} }
  }
}
```

**应用场景**:
- 电商商品搜索
- 内容管理系统
- 知识库搜索
- 站内搜索

### 3. 业务数据分析

利用聚合功能进行业务指标分析:

```json
// 按天统计销售额
GET /orders/_search
{
  "size": 0,
  "aggs": {
    "daily_sales": {
      "date_histogram": {
        "field": "order_date",
        "calendar_interval": "day"
      },
      "aggs": {
        "total_amount": {
          "sum": { "field": "amount" }
        }
      }
    }
  }
}
```

**应用场景**:
- 销售数据分析
- 用户行为分析
- 实时大屏展示
- BI 报表

### 4. 安全分析(SIEM)

使用 Elastic Security 进行安全事件分析:

**应用场景**:
- 安全日志分析
- 威胁检测
- 合规审计
- 入侵检测

### 5. APM(应用性能监控)

使用 Elastic APM 监控应用性能:

**应用场景**:
- 分布式链路追踪
- 性能瓶颈分析
- 错误监控
- 服务依赖分析

### 6. 地理位置服务

利用地理位置查询能力:

```json
// 查找附近 5km 内的门店
GET /stores/_search
{
  "query": {
    "geo_distance": {
      "distance": "5km",
      "location": {
        "lat": 39.9042,
        "lon": 116.4074
      }
    }
  }
}
```

**应用场景**:
- 附近门店搜索
- 外卖配送范围
- 打车服务
- 地理围栏

## 本章小结

本章介绍了 Elasticsearch 的基础知识:

1. **定位**:Elasticsearch 是一个分布式搜索和分析引擎,基于 Lucene 构建
2. **历史**:从 2010 年发布至今,已发展到 8.x 版本,功能不断完善
3. **特性**:分布式架构、全文搜索、实时分析、高可用是其核心特性
4. **对比**:相比 Solr 更易用,相比数据库搜索能力更强,与 MongoDB 定位不同
5. **场景**:日志分析、全文搜索、数据分析、安全分析、APM、地理位置服务

## 参考资料

- [Elasticsearch 官方文档](https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html)
- [Elasticsearch: The Definitive Guide](https://www.elastic.co/guide/en/elasticsearch/guide/current/index.html)
- [Elastic 官方博客](https://www.elastic.co/blog/)
- [Elasticsearch GitHub 仓库](https://github.com/elastic/elasticsearch)

评论

0

暂无评论

说点什么呢~
收藏
0
0
0