---
title: Elasticsearch介绍
description: "Elasticsearch是开源的实时分布式搜索分析引擎，内部使用Lucene做索引与搜索。本章将从基本概念、流程分析等方面对Elasticsearch组件做简单的介绍。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengbds/ecosystemEnable/ELK/kunpengelasticsearchhdp_05_0002.html
sourcePath: /source/zh/kunpengbds/ecosystemEnable/ELK/kunpengelasticsearchhdp_05_0002.html
indexId: e8b7d026d9312ec6c2abbb62e6df5e63133bc1edaf173a5cedc5193beaec461a78
---
# Elasticsearch介绍

Elasticsearch是开源的实时分布式搜索分析引擎，内部使用Lucene做索引与搜索。本章将从基本概念、流程分析等方面对Elasticsearch组件做简单的介绍。

#### 集群结构

Elasticsearch集群方案由EsMaster、EsClient、EsNode1、EsNode2、EsNode3进程组成。各模块说明如表1所示。


**表1 Elasticsearch集群方案组成**

| 名称 | 说明 |
| --- | --- |
| Client | Client使用HTTP或HTTPS协议与Elasticsearch集群中的EsMaster以及各EsNode实例进程进行通信，进行分布式索引和分布式搜索操作。 |
| EsMaster | EsMaster为Elasticsearch的主节点，负责集群的管理，主要是集群相关的操作，如决定分片的分配、采集集群节点等。 |
| EsNode1\-3 | EsNode1\-3为Elasticsearch的数据节点，主要是存储索引数据，对文档进行增删改查、聚合等操作。 |
| EsClient | EsClient为Elasticsearch的协调节点，只处理路由请求、搜索及分发索引等操作。自身不存储数据，也不管理集群。 |
| ZooKeeper集群 | ZooKeeper为Elasticsearch集群中各进程提供心跳感应机制。 |


#### 基本概念

- Index：即索引，是Elasticsearch中一个逻辑命名空间，指向一个或多个分片，内部Apache Lucene实现索引中数据的读写。索引与关系数据库实例Database相当。一个Elasticsearch实例可以包含多个索引。
- Type：文档类型，文档类型使得同一个索引中在存储结构不同的文档时，只需要依据文档类型就可以找到对应的参数映射信息，方便文档的存储。相当于数据库中的Table（数据表）。一个索引对应一个文档类型。
- Document：文档，是可以被索引的基本单位，特指最顶层结构或根对象序列化成的JSON数据。相当于数据库中的行。一个类型包含多个文档。
- Mapping：映射，用来约束字段的类型，可以根据数据自动创建。相当于数据库中的Schema。
- Field：字段，组成文档的最小单位。相当于数据库中的Column。每个文档包含多个字段。
- EsMaster：主节点，可以临时管理集群级别的一些变更，例如新建或删除索引、增加或移除节点等。主节点不参与文档级别的变更或搜索，也不接收请求。在流量增长时，该主节点不会成为集群的瓶颈。
- EsNode：Elasticsearch节点，一个节点就是一个Elasticsearch实例。
- EsClient：Elasticsearch节点，该节点只能路由请求，处理搜索减少阶段和分发批量索引。其自身不进行数据存储，也没有管理集群的能力。
- Shard：分片，Elasticsearch中最小级别的工作单元，文档存储在分片中，并且在分片中被索引。
- Primary Shard：主分片，索引中的每个文档属于一个单独的主分片，主分片的数量决定了索引最多能存储多少数据。
- Replica Shard：复制分片，它是主分片的一个副本，可以防止硬件故障导致的数据丢失，同时可以提供读请求，比如搜索或者从别的Shard取回文档。


#### 基本原理

- 内部架构
  Elasticsearch通过RESTful API或者其他语言（比如Java）API提供丰富访问接口，使用集群发现机制，支持脚本语言，支持丰富的插件。底层基于Lucene，保持Lucene绝对的独立性，通过本地文件、共享文件、HDFS完成索引存储。


- 倒排序索引
  与传统关系型数据库的正排序索引的搜索方式不同，Elasticsearch（Lucene）的搜索采用了倒排序索引的方式。由不同的关键字组成的表，称为“词典”，其中包含了各种关键字和关键字的统计信息（包含所在文档编号、文档中位置和出现频率等）。通过倒排序索引进行搜索，就是通过关键字查询相对应的文档编号和文档中所在位置，再找到完整文档，类似于查字典，或通过查书目录查指定页码书的内容。倒排在构建索引时较为耗时且维护成本较高，但是搜索耗时短。
