ES

68 阅读3分钟

image.png

1.3 基本概念

1.3.1 节点&集群

Elasticsearch 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elasticsearch 实例。单个 Elasticsearch 实例称为一个节点(Node),一组节点构成一个集群(Cluster)。

1.3.2 索引&类型&文档&字段&映射

映射关系如下图:

上述索引&类型&文档&字段结构图如下:

Mapping(映射-表结构)

Mapping 是定义文档及其包含的字段如何存储和索引的过程。MappingES 中的一个很重要的内容,它类似于传统关系型数据中 tableschema,用于定义一个索引(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数据类型#

专用数据类型#

分片&副本

什么是 Shard (分片)?

一个 索引 可以存储超出单个结点硬件限制的大量数据。比如,一个具有 10亿文档的索引占据 1TB 的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。

为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,这些份就叫做 分片。当你创建一个索引的时候,你可以指定你想要的 分片的数量。每个分片本身也是一个功能完善并且独立的 索引,这个 索引 可以被放置到集群中的任何节点上。

分片之所以重要,主要有两方面的原因:

  1. 允许你水平分割/扩展你的内容容量
  2. 允许你在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量
  3. 一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由 Elasticsearch 管理的,对于作为用户的你来说,这些都是透明的

什么是 Replica (副本)?

副本是一个分片的精确复制,每个分片可以有零个或多个副本。副本的作用:

  1. 提高系统的容错性,当某个节点某个分片损坏或丢失时,可以从副本中恢复。
  2. 提高 ES 查询效率,ES 会自动对搜索请求进行负载均衡。

image.png

倒排索引

附录

合集