ElasticSearch 基本概念

概述

Elasticsearch 是一个基于 Lucene 的实时的分布式搜索和分析引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。基于 RESTful 接口

核心概念

  • 集群(Cluster): ES 是一个分布式的搜索引擎,一般由多台物理机组成。这些物理机,通过配置一个相同的 cluster name,互相发现,把自己组织成一个集群。
  • 节点(Node):同一个集群中的一个 Elasticearch 主机。
  • 主分片(Primary shard):索引(下文介绍)的一个物理子集。同一个索引在物理上可以切多个分片,分布到不同的节点上。分片的实现是 Lucene 中的索引。
  • 注意:ES 中一个索引的分片个数是建立索引时就要指定的,建立后不可再改变。所以开始建一个索引时,就要预计数据规模,将分片的个数分配在一个合理的范围。
  • 副本分片(Replica shard):每个主分片可以有一个或者多个副本,个数是用户自己配置的。ES 会尽量将同一索引的不同分片分布到不同的节点上,提高容错性。对一个索引,只要不是所有 shards 所在的机器都挂了,就还能用。
  • 索引(Index):逻辑概念,一个可检索的文档对象的集合。类似与 DB 中的 database 概念。同一个集群中可建立多个索引。比如,生产环境常见的一种方法,对每个月产生的数据建索引,以保证单个索引的量级可控。
  • 类型(Type):索引的下一级概念,大概相当于数据库中的 table。同一个索引里可以包含多个 Type。
  • 文档(Document):即搜索引擎中的文档概念,也是 ES 中一个可以被检索的基本单位,相当于数据库中的 row,一条记录。
  • 字段(Field):相当于数据库中的 column。ES 中,每个文档,其实是以 json 形式存储的。而一个文档可以被视为多个字段的集合。比如一篇文章,可能包括了主题、摘要、正文、作者、时间等信息,每个信息都是一个字段,最后被整合成一个 json 串,落地到磁盘。
  • 映射(Mapping):相当于数据库中的 schema,用来约束字段的类型,不过 Elasticsearch 的 mapping 可以不显示地指定、自动根据文档数据创建。

Elasticsearch 集群可以包含多个索引(indices),每一个索引可以包含多个类型(types),每一个类型包含多个文档(documents),然后每个文档包含多个字段(Fields),这种面向文档型的储存,也算是 NoSQL 的一种吧。

ES 比传统关系型数据库,对一些概念上的理解:

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields