1.3 基本概念
1.3.1 节点&集群
Elasticsearch 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elasticsearch 实例。单个 Elasticsearch 实例称为一个节点(Node),一组节点构成一个集群(Cluster)。
1.3.2 索引&类型&文档&字段&映射
映射关系如下图:
上述索引&类型&文档&字段结构图如下:
Mapping(映射-表结构)
Mapping 是定义文档及其包含的字段如何存储和索引的过程。Mapping 是 ES 中的一个很重要的内容,它类似于传统关系型数据中 table
的 schema
,用于定义一个索引(index)的某个类型(type)的数据结构。
Elasticsearch支持文档字段的多种不同数据类型,根据官方文档的分类,可以划分为以下几个类别:
核心数据类型,复杂数据类型,Geo(地理)数据类型,专用数据类型和多字段。
核心数据类型#
- 字符串类型 主要包括:text 和 keyword。
- 数字类型 主要包括:long, integer, short, byte, double, float, half_float, scaled_float
- 日期类型
- 布尔类型
- 二进制类型
- 范围数据类型 integer_range, float_range, long_range, double_range, date_range
复杂数据类型#
Geo数据类型#
- 地理点数据类型
geo_point 对于纬度/经度点 - Geo-Shape数据类型
geo_shape 对于像多边形这样的复杂形状
专用数据类型#
分片&副本
什么是 Shard (分片)?
一个 索引 可以存储超出单个结点硬件限制的大量数据。比如,一个具有 10亿文档的索引占据 1TB 的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。
为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力
,这些份就叫做 分片。当你创建一个索引的时候,你可以指定你想要的 分片的数量。每个分片本身也是一个功能完善并且独立的 索引,这个 索引 可以被放置到集群中的任何节点上。
分片之所以重要,主要有两方面的原因:
- 允许你水平分割/扩展你的内容容量
- 允许你在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量
- 一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由 Elasticsearch 管理的,对于作为用户的你来说,这些都是透明的
什么是 Replica (副本)?
副本是一个分片的精确复制,每个分片可以有零个或多个副本。副本的作用:
- 提高系统的容错性,当某个节点某个分片损坏或丢失时,可以从副本中恢复。
- 提高 ES 查询效率,ES 会自动对搜索请求进行负载均衡。