ES分布式搜索引擎
什么是elasticsearch?
- 一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能
什么是elastic stack(ELK)?
- 是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch
什么是Lucene?
- 是Apache的开源搜索引擎类库,提供了搜索引擎的核心API
ES核心特性
- 分布式架构:
- 数据自动分片(Sharding)和复制(Replication),支持水平扩展。
- 高可用性,即使部分节点故障,系统仍能正常运行。
- 实时搜索:
- 数据几乎可以实时被搜索和分析。
- 支持复杂的查询和聚合操作。
- 全文搜索:
- 基于 Lucene 的全文搜索引擎,支持多语言分词、模糊搜索、短语搜索等。
- 多数据类型支持:
- 支持结构化、非结构化和半结构化数据。
- 支持 JSON 文档存储。
- 强大的查询语言:
- 提供丰富的查询 DSL(Domain Specific Language),支持复杂查询和过滤。
- 聚合分析:
- 支持对数据进行统计、分析和可视化(如平均值、求和、分组等)。
- RESTful API:
- 通过 HTTP 接口进行操作,易于集成和使用。
- 与 ELK Stack 集成:
- 通常与 Logstash(数据收集和处理)和 Kibana(数据可视化)一起使用,构成 ELK Stack。
ES核心概念
- Index(索引):
- 类似于数据库中的表,用于存储具有相似结构的文档。
- 例如,
user
索引可以存储用户相关的文档。
- Document(文档):
- 索引中的基本数据单元,以 JSON 格式存储。
- 例如,一个用户文档可能包含
id
、name
、age
等字段。
- Type(类型):
- 在 Elasticsearch 7.x 之前,索引可以包含多个类型(类似于表的分区)。
- 从 Elasticsearch 7.x 开始,类型被弃用,每个索引只能包含一个类型(
_doc
)。
- Shard(分片):
- 索引被分成多个分片,分布在不同的节点上,以实现水平扩展。
- 分为主分片(Primary Shard)和副本分片(Replica Shard)。
- Node(节点):
- Elasticsearch 集群中的一个实例,负责存储数据和执行操作。
- Cluster(集群):
- 由一个或多个节点组成,共同存储和操作数据。
- Mapping(映射):
- 定义索引中文档的字段类型和属性(如字符串、数值、日期等)。
- Query DSL(查询语言):
- 用于定义搜索和过滤条件的 JSON 格式语言。
基本操作示例
1. 创建索引
|
|
2. 添加文档
|
|
3. 搜索文档
|
|
4. 聚合分析
|
|