ES基本概念
Elasticsearch 是分布式文档存储
。Elasticsearch 不会将信息存储为列数据行,而是存储已序列化为JSON文档
的复杂数据结构。当集群中有多个 Elasticsearch 节点时,存储的文档将分布在集群中,并且可以从任何节点立即访问。
默认情况下,Elasticsearch 根据
结果相关性评分
(文档与查询条件的匹配程度)来对结果集进行排序。
核心概念
集群(Cluster)
集群:一个或者多个运行的 Elasticsearch 节点的服务器。
一个集群有一个cluster.name
,cluster.name
是集群的唯一标识。默认是elasticsearch
。具有相同cluster.name
的节点组成一个集群。
配置
通过配置文件config/elasticsearch.yml
cluster.name: yhq-es
集群状态
- green:主分片与副本分片都正常分配。
- yellow:主分片全部正常分配,有副本分片未能正常分配。
- red:有主分片未能正常分配。
节点(Node)
-
节点(node)
是一个运行着 Elasticsearch 的实例。本质就是一个Java
进程。 -
每一个节点都有名字,通过配置文件配置,或启动时
-E node.name=node1
指定。 -
每个节点在启动后,会分配一个
UID
,保存在data
目录下。
一台机器可以运行多个 Elasticsearch 进程,但是建议生产环境一台机器只运行一个 Elasticsearch 实例。
索引(Index)
包含一堆有相似结构的文档。
文档(Document)
- Elasticsearch 是
面向文档
的,文档
是所有可搜索数据的最小单位
。 - 文档会被序列化成
JSON
格式,保存到 Elasticsearch 中。 - 每个文档都会有一个
UNIQUE ID
(自定义或 Elasticsearch 生成)。
分片(Shards)
主分片
用于解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上。
- 一个分片是一个运行的
Lucene
实例。 - 主分片数在索引创建时指定(
默认5个
),后续不允许修改,除非Reindex
。
副本分片(Replicas)
用于解决数据高可用的问题。副本分片是主分片的拷贝(默认1个,即1个主分片对应1个副本分片
)。
- 副本分片数,可以动态调整。
- 增加副本分片数,还可以在一定程度上提供服务的可用性(读取的吞吐)。
ElasticSearch Vs 关系型数据库
Relational DB | Elasticsearch |
---|---|
Databases | Indices |
Tables | Types |
Rows | Documents |
Columns | Fields |
SQL | DSL |