鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

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:映射,用来约束字段的类型,可以根据数据自动创建。相当于数据库中的Shema。
  • 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)的搜索采用了倒排序索引的方式。由不同的关键字组成的表,称为“词典”,其中包含了各种关键字和关键字的统计信息(包含所在文档编号、文档中位置和出现频率等)。通过倒排序索引进行搜索,就是通过关键字查询相对应的文档编号和文档中所在位置,再找到完整文档,类似于查字典,或通过查书目录查指定页码书的内容。倒排在构建索引时较为耗时且维护成本较高,但是搜索耗时短。