什么是Elasticsearch
Elasticsearch 是一个基于 Apache Lucene 的分布式搜索和分析引擎。它提供了一个功能强大、实时的数据存储、检索和分析的平台,尤其适合处理结构化和非结构化数据。它在大数据处理、全文搜索****、实时日志分析、监控等场景下应用广泛。
核心概念
- 索引(Index):相当于关系型数据库中的数据库。它是数据存储的地方,包含多个文档。
- 文档(Document):相当于关系型数据库中的行,是最小的数据单元,以 JSON 格式存储。
- 类型(Type):在 Elasticsearch 7.x 版本中已经被废弃,之前用于区分同一个索引中的不同文档类型。
- 分片(Shard)和副本(Replica):为了实现数据的分布式存储和高可用性,Elasticsearch 把索引分成多个分片(Shard),并且可以为每个分片创建副本(Replica)。
优点
- 全文检索:基于倒排索引的数据结构,可以快速地搜索文本数据。
- 分布式架构:数据自动分片,可以水平扩展,适用于大数据处理。
- 高可用性:通过副本机制保证数据的冗余存储,提高容灾能力。
- RESTful API:使用 JSON 格式的数据进行交互,易于与各种编程语言集成。
常见应用场景
- 日志分析:与 Logstash 和 Kibana(一起称为 ELK Stack)搭配使用,实现实时日志收集、分析和可视化。
- 全文搜索引擎:例如电子商务网站的商品搜索,社交平台的内容搜索。
- 数据监控:可以用来监控服务器性能数据、应用程序日志等。
什么是倒排索引
1.先把文档内容进行分词,形成词条与文档ID的对应关系,叫做词条库,词条具备唯一性,建立索引。
2.对搜索内容进行分词,把分词后得到一个关键词列表,根据关键词去词条库种匹配,在找到对应的文档ID列表。
3.然后根据文档ID列表,找到对应的文档信息。
ES相关概念对比MySQL
MySQL | Elasticsearch | 说明 |
---|---|---|
Table(表) | Index(索引) | 索引(Index)是文档的集合,类似于 MySQL 中的表(Table)。每个索引用于存储一组相似的数据类型。 |
Row(行) | Document(文档) | 文档(Document)就是 Elasticsearch 中的数据单元,类似于 MySQL 中的行(Row),文档使用 JSON 格式存储。 |
Column(列) | Field(字段) | 字段(Field)是文档中的一个属性,类似于 MySQL 表中的列(Column)。每个字段都有类型和数据。 |
Schema(模式) | Mapping(映射) | Mapping(映射)定义了索引中文档的结构和字段类型,类似于 MySQL 中表的结构(Schema)。 |
SQL(结构化查询语言) | DSL(查询 DSL) | DSL 是 Elasticsearch 提供的 JSON 格式的查询语言,用于进行数据的增删改查(CRUD)操作,功能类似于 MySQL 中的 SQL。 |