Elasticsearch使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。Elasticsearch是分布式的实时文件存储,每个字段都被索引并可被搜索,也是一个实时分布式搜索和分析引擎。
1、基本术语
文档(Document)
文档是索引和搜索的原子单位,它是包含了一个或多个域(Field)的容器,使用JSON作为文档序列化格式。文档通过其_index(
文档存储的地方)
、_type(
文档代表的对象的类)
、_id(
文档的唯一标识)
唯一确定。
类型(Type)
类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于“表”。
索引(Index)
ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。
类比传统的关系型数据库领域来说,Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。类比如下图:
节点(Node)
一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同cluster.name配置的节点组成, 它们共同承担数据和负载的压力。
ES集群中的节点有三种不同的类型:
主节点:负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。 主节点并不需要涉及到文档级别的变更和搜索等操作。可以通过属性node.master进行设置。
数据节点:存储数据和其对应的倒排索引。默认每一个节点都是数据节点(包括主节点),可以通过node.data属性进行设置。
协调节点:如果node.master和node.data属性均为false,则此节点称为协调节点,用来响应客户请求,均衡每个节点的负载。
分片(Shard)
一个索引中的数据保存在多个分片中,相当于水平分表。一个分片便是一个Lucene 的实例,它本身就是一个完整的搜索引擎。我们的文档被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互。
ES实际上就是利用分片来实现分布式。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。 当你的集群规模扩大或者缩小时, ES会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。
一个分片可以是主分片或者副本分片。 索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。一个副本分片只是一个主分片的拷贝。 副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。
在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改。默认情况下,一个索引会有5个主分片,而其副本可以有任意数量。
2、工作原理
当ElasticSearch的节点启动后,它会利用多播(multicast)(或者单播,如果用户更改了配置)寻找集群中的其它节点,并与之建立连接。这个过程如下图所示:
3、常用命令
curl -XGET 'localhost:9200'curl '
curl -XGET 'localhost:9200/_stats?pretty' #查看集群状态
curl -XGET 'localhost:9200/{index}/_stats?pretty' #查看索引状态
curl -XGET 'localhost:9200/{index}?pretty' #查看单个索引
curl -XGET 'localhost:9200/_cat/indices?v' #查看索引
curl -XGET 'localhost:9200/{index}/_mapping/{type}?pretty' #查看索引映射
curl http://localhost:9200/_cat/indices?bytes=kb',#查看索引大小
参考资料:
es结构和原理概述:https://blog.csdn.net/duanduanpeng/article/details/72633148
ElasticSearch底层原理浅析:https://blog.csdn.net/zkyfcx/article/details/79998197