Elasticsearch 第1章:简介

忘机山人

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

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

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

image.png

目录

什么是 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 的强大全文搜索能力:

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

3. 实时分析

强大的聚合分析能力:

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

4. 高可用与容错

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

5. Schema Free

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

与其他搜索引擎对比

Elasticsearch vs Solr

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

Elasticsearch vs 关系型数据库

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

Elasticsearch vs MongoDB

特性ElasticsearchMongoDB
定位搜索和分析引擎通用文档数据库
全文搜索核心功能,非常强大支持,但功能有限
聚合非常强大强大
事务不支持支持(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. 全文搜索

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

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

应用场景

  • 电商商品搜索
  • 内容管理系统
  • 知识库搜索
  • 站内搜索

3. 业务数据分析

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

// 按天统计销售额
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. 地理位置服务

利用地理位置查询能力:

// 查找附近 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、地理位置服务

参考资料

评论

0

暂无评论

说点什么呢~
收藏
0
0
0