Elasticsearch概念

70 阅读3分钟

核心概念

Elasticsearch 是一个可高度伸缩(扩展)的开源数据存储、全文搜索和数据分析引擎。它通常被用于具有复杂搜索功能和分析需求的应用程序的底层引擎。

RDBMSElasticsearch
DatabaseIndex
TableType(7.0开始废弃
RowDocument
ColumnFiled
SchemaMapping
SQLDSL

默认情况下,Elasticsearch 根据结果相关性评分(文档与查询条件的匹配程度)来对结果集进行排序。

集群

集群是一个或多个节点的集合,这些节点将共同拥有完整的数据,并跨节点提供联合索引、搜索和分析功能。集群有唯一的名称标识(elasticsearch.yml配置文件中对应参数cluster.name),集群的名称是elasticsearch.yml配置文件中最重要的一个配置参数,默认名称为 Elasticsearch`,节点只能通过集群名称加入集群。不要在不同的环境中使用相同的集群名称。

只有一个节点的集群是有效的,而且有特殊之处,尤其是可以在单节点集群进行快速的开发、测试。此外,可以存在多个独立的集群,每个集群都有自己唯一的集群名称。

  • 不同的集群通过不同的名字来区分,默认名字elasticsearch

  • 通过配置文件修改,或在命令行中 -E cluster.name=yhq_cluster 进行设置。

  • 一个集群可以有一个或者多个节点。

节点

节点(node)是一个 Elasticsearch 的运行实例,也就是一个进程(process),多个节点组成集群,节点存储数据,并参与集群的索引、搜索和分析功能。与集群一样,节点有一个名称标识。

  • 节点是一个 Elasticsearch 的实例,本质上就是一个 java 进程,一台机器上可以运行多个 Elasticsearch 进程,但是生产环境建议一台机器只运行一个 Elasticsearch 实例。

  • 每个节点都有名字,通过配置文件设置,或者启动的时候 -E node.name=yhq_node指定。

  • 每个节点在启动后,会分配一个UID,保存在data目录下。

Master-eligible nodes

  • 每个节点启动后,默认就是一个Master eligible节点。可以设置 node.master:false 禁止。

  • Master-eligible 节点可以参加选主流程,成为 master 节点。

  • 当第一个节点启动的时候,它会将自己选举成 master 节点。

  • 每个节点都保存了集群的状态,只有 master 节点才能修改集群的状态信息。

Data node

  • 可以保存数据的节点,叫做 Data Node。负责保存分片数据。在数据扩展上起到了至关重要的作用。

Coordinating Node

  • 负责接受 Client 的请求,将请求分发到合适的节点,最终把结果汇聚到一起。

  • 每个节点默认都起到了 Coordinating Node 的职责。

分片

主分片(Primary Shard)

用于解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上。

  • 一个分片是一个运行的Lucene实例。

  • 主分片数在索引创建时指定(默认5个),后续不允许修改,除非Reindex

副本分片(Replica Shard)

用于解决数据高可用的问题。副本分片是主分片的拷贝(默认1个,即1个主分片对应1个副本分片)。

  • 副本分片数,可以动态调整。

  • 增加副本分片数,还可以在一定程度上提供服务的可用性(读取的吞吐)。

索引

包含一堆有相似结构的文档。

文档

  • Elasticsearch 是面向文档的,文档是所有可搜索数据的最小单位

  • 文档会被序列化成JSON格式,保存到 Elasticsearch 中。

  • 每个文档都会有一个UNIQUE ID(自定义或 Elasticsearch 生成)。