ES在本质上就是两个操作,建立索引和使用索引。建立索引就是将数据列出一个目录出来,便于检索、过滤、聚合等操作。使用索引就是针对数据建立的索引执行查询。
文档、类型、索引
文档,就是一条数据记录,它有自己的数据格式,处理需要指定每个字段的类型之外,没有结构化的要求。即,并不要求每个记录的字段都是一样的,类似于MongoDB。
类型,就是一张数据表,它其实也不要求本类型内部所有的文档的数据格式的统一,但是一般在使用的时候我们倾向于统一。同时,类型只是文档的逻辑集合,可以理解对文档的分组管理。
索引,就是一个数据库,它管理了一些类型的集合,这些类型共享共同的刷新频率、分片数量。可以理解为一个数据库。
节点与分片
一个节点就是一个ES的实例,可以是不同机器上的实例,也可以是同台机器上的不同端口实例。节点主要为分片提供了便利,在完成负载均衡的同时,利于分布式环境的搭建。
主分片就是用于存储索引的,副本分片相当于备份,当主分片出现故障时,可以随时替换。
而不同的主分片一起提供了完整的索引数据,大量索引存储时,通过哈希放置在多个分片上一方面可以减轻单点的压力,另一方面水平扩展可以提高处理能力。
建立索引与使用索引
当建立索引时,将通过哈希分配到指定的主分片上,同时传播到该主分片对应的副本分片上,形成副本。
当搜索索引时,要在该索引所存储的所有分片上进行搜索查询,针对某个分片,可以是主分片,也可以是副本分片,因为在建立索引的时候,副本分片上同样存储了索引数据,这样副本分片一方面可以分担压力,另一方面作为备份随时替换宕机的主分片。