ES入门指南:Elasticsearch核心概念解析
Elasticsearch(简称ES)是一个开源、分布式、RESTful风格的搜索和分析引擎,设计用于处理大规模数据。它以其卓越的速度和可伸缩性,在日志分析、全文搜索、安全智能、业务分析等领域大放异彩。要有效地使用Elasticsearch,理解其核心概念至关重要。
1. 核心概念概览
Elasticsearch建立在Apache Lucene之上,并对其进行了分布式、易用的封装。其核心概念包括:
- 集群 (Cluster):一个或多个节点(Node)的集合,它们共同存储您的数据,并提供索引和搜索功能。集群是ES可扩展性和高可用的基础。
- 节点 (Node):单个Elasticsearch服务器。每个节点都属于一个集群,并存储集群数据的一部分。节点有不同的类型,如主节点(Master Node)、数据节点(Data Node)、摄入节点(Ingest Node)等,以承担不同的职责。
- 索引 (Index):一个逻辑上的命名空间,用于存储具有相似特性的文档。在关系型数据库中,索引类似于“数据库”的概念。例如,您可以有一个用于存储用户信息的索引,另一个用于存储产品信息的索引。
- 类型 (Type):在Elasticsearch 6.x版本中,一个索引可以包含多个类型,用于区分同一索引中不同结构的文档。然而,从Elasticsearch 7.x开始,一个索引只能有一个类型(默认为
_doc)。官方建议每个索引只包含一种类型的文档,以避免潜在的映射冲突。因此,现在更推荐将“类型”的概念直接体现在“索引”的命名上。 - 文档 (Document):Elasticsearch中的最小数据单元。它是一个JSON格式的对象,包含键值对,代表了您可以索引或搜索的最小信息单位。例如,一个用户对象,一个产品记录。文档在关系型数据库中类似于“行”的概念。
- 字段 (Field):文档中的一个键值对,代表了文档的一个属性。例如,一个用户文档可能包含
name、age、email等字段。字段在关系型数据库中类似于“列”的概念。 - 分片 (Shard):索引被水平划分为多个分片。每个分片都是一个独立的Lucene索引,可以托管在集群中的任意节点上。分片是Elasticsearch分布式特性的基石,它使得数据可以分布式存储和并行查询,从而实现高伸缩性。
- 副本 (Replica):每个分片可以有一个或多个副本。副本是分片的完整拷贝,用于提供高可用性和灾难恢复。当原始(主)分片所在的节点发生故障时,副本分片可以提升为主分片,继续提供服务。同时,副本也可以用于处理读请求,提高查询吞吐量。
- 映射 (Mapping):定义了文档及其字段的结构、数据类型以及如何被索引和存储。映射类似于关系型数据库中的“表结构”或“Schema”。通过映射,Elasticsearch知道如何处理每个字段的数据,例如是文本、数字、日期还是布尔值。
- 分析器 (Analyzer):在文档被索引之前,文本字段会经过分析器的处理。分析器是一个由字符过滤器(Character Filter)、分词器(Tokenizer)和分词过滤器(Token Filter)组成的链。它负责将原始文本转换为可搜索的词项(Terms)。例如,将句子