ElasticSearch简介
ElasticSearch(以下简称ES)在官网的定义为:Elasticsearch 是一个分布式、可扩展、实时的 RESTful 风格的搜索和数据分析引擎,是一个“天然”支持分布式的基于Apache Lucene(TM)的搜索分析引擎。它可以被下面这样准确的形容:
- 一个分布式的实时文档存储,每个字段都可以被索引与搜索
- 一个分布式实时分析搜索引擎
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
基本概念:
- 节点(Node):一个运行中的 Elasticsearch 实例称为一个 节点,它是属于集群一部分的单一服务器,存储数据并参与集群的索引和搜索功能。一个节点由一个名称来标识,默认情况下该名称是在启动时分配给节点的随机通用唯一标识符(UUID)。如果不需要默认值,可以定义任何想要的节点名称。可以将节点配置为按集群名称加入特定集群,默认情况下,每个节点都设置为加入一个名为“elasticsearch”
的集群。
- 集群(Cluster):集群是由一个或者多个拥有相同
cluster.name
配置的节点组成,一个集群由一个唯一集群ID确定,它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。 - 分片(sharde):一个分片shard是一个最小级别的工作单元,仅保存了索引中所有数据的一部分。 分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎,也是天然分布式的体现。
- 副本(replia):为提高查询吞吐量或者实现高可用性,可以使用分片副本。副本是一个分片的精确复制,每个分片可以有零个或者多个副本。 当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片,以保证高可用性。
- 索引(index):索引是具有相似特性的文档集合,类似于传统关系数据库中的一个数据库,是一个存储关系型文档的地方。数据被存储和索引在分片中,索引仅仅是一个把一个或者多个分片分组在一起的逻辑空间。 索引名字必须是全部小写,不允许以下划线开头,不能包含逗号。
- 类型(type):在索引中,可以定义一个或多个类型。类型是索引的逻辑类别分区,类似于数据库中的表。
- 文档(document):文档是可以被索引的信息的基本单位。
- 映射(mapping):映射相对于数据库来说相当于定义表结构,表示了该索引的一些字段类型等信息。数据文档存储到ES内部文档的一种对应关系。这种对应关系决定了文档存储数据的准确性。只有知道了文档中每个域数据的实际存储含义,才能完成正确的存储和搜索。
- 动态映射:当将数据填入索引类型中,无需设置数据域和映射。这都是归功于动态映射。ES会自动识别填入的数据,无论是简单数据类型还是对象数据类型。
- 定制映射:预先定义index type的映射,用户指定字段的type等信息。
节点类型
ES集群中节点分为:主节点(master)、数据节点(data)、客户端节点(client),节点的类别是由elasticsearch.yml 配置文件的node.master、node.data两个参数的值来定义的。
- node.master:这个属性表示节点是否具有成为主节点的资格。注意:此属性的值为true,并不意味着这个节点就是主节点。因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的。所以,这个属性只是代表这个节点是不是具有主节点选举资格。默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。这些功能是由两个属性控制的。node.master和node.data,默认情况下这两个属性的值都是true。
- node.data:这个属性表示节点是否存储数据。
节点类别
| node.master=true | node.master=false |
node.data=true | master节点、data节点 | master节点、client节点 |
node.data=false | data节点 | client节点 |
资源地址
官网:https://www.elastic.co
源码git:https://github.com/elastic/elasticsearch
ES中文论坛:https://elasticsearch.cn/