近实时(NRT)
索引文档(将文档进行索引需要时间)开始到文档可以被搜索,延迟不超过1S
集群(CLUSTER)
多个拥有相同集群名称(节点默认的集群名称为elasticsearch)的节点构成一个集群,这些节点同时持有整个数据信息,通过所有节点提供来联合索引和查询能力。
节点(NODE)
单台服务就是一个节点,每个节点有唯一的名称(默认使用随机的UUID)作为标识。节点永远是集群的一部分,如果只有一个节点,那就是单节点集群。每一个节点可以通过节点的集群名称(默认是elasticsearch)来来加入到指定集群。
索引(INDEX)
索引是文档的集合,一个索引内的文档拥有类似的属性。每个索引拥有唯一的名称(必须全部小写),在索引、搜索、更新、删除时,需要指定索引名称来对索引内的文档进行操作。
类型(TYPE)
同一个索引内,用来对索引内文档进行逻辑分类。PS:6.0.0以后,一个索引只能有一个类型,6.X以前索引内仍然可以存在多个类型,7.0.0中,Types API会被标记为过时的,8.0.0中就会被完全移除。
文档(DOCUMENT)
可以被索引的最小单元,为JSON格式,物理上存在于一个索引内,但是实际上被索引到一个类型上。
分片和备份(SHARDS & REPLICAS)
为了解决一个索引可能需要超过硬件限制的空间和从单个节点获取一个大索引数据会很慢的问题,一个索引会被拆分为多个分片,每个分片可以存在于集群中的任何一个节点上,如此,可以有两点好处:
- 允许水平拆分索引内容大小
- 允许在多个分片上(通常是多个节点)进行分发和并行操作来提高性能和吞吐量
分片的分发和合并是由Elasticsearch控制的。
为了解决节点可能会异常下线,导致一个索引的可用的完整分片不存在,则允许对分片进行复制,被复制的(原始的)分片被称为是主分片,复制出来的是复制分片,同一分片的主分片和复制分片不会在同一个节点上;复制的份数可能是0或更多。索引创建时,分片数量和复制分片数量是可以配置的,一旦索引被创建,分片数量和复制分片数量无法改变,但是复制分片的份数可以改变。
默认一个索引会有五个分片和一份复制分片,因此,一个索引,默认包含10个分片。
NOTE
每一个ElasticSearch分片都是一个Lucence索引,每一个Lucence索引都有最大文档限制,比如LUCENE-5843LUCENE-5843,最大数量为2,147,483,519
(= Integer.MAX_VALUE - 128),所以,一个索引的最大文档数=主分片数*最大限制。支持通过 _cat/shards 来监控分片大小。
为什么Elasticsearch快
- 支持针对不同的数据类型使用不同的索引方式,如字符串类型的可以使用全文索引(使用到倒排索引),数字类型使用BKD树(三维的二叉树)等等,而且Elasticsearch会默认去分析文档内不同域的属性类型来建立合适的索引
- 支持对文档的同一域建立不同类型的索引来支持不同的检索目的,比如一个字符串类型的域,可以建立一个全文索引用于模糊搜索,也同时可以建立关键字索引用于排序、聚合,建立索引的过程在搜索过程中(使用不同的方式检索),会使用相同的分析链去分析。
- 支持使用不同的语言来分域,甚至是自定义的方式去索引数据。
- 数据搜索引擎基于Lucence(给索引添加索引、压缩等算法)