提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
这一节主要讲述ES的一些基本概念,例如:索引、文档、集群、节点、分片、段、副本等以及,ES的基本操作包括CRUD和基础API使用一、基本概念
索引(index)
索引(index)在ES中可以抽象的理解一张表,一类数据的聚集,它通过Mapping来定义数据结构,也就是数据是怎么组织在一起的,这里包括每个字段的类型、如何分词、是否要搜索、是否要聚合、是否要排序等等,可以笼统的理解为就是表结构,而Settings这里主要定义数据要分布到多少个分片上,要多少个副本,以及数据被最短可搜索到的时间等等。
文档(doc)
ES是面向文档的,也是可以被所搜的最小单位在ES里,可以理解为就是一条数据,在ES中数据是以JSON格式保存的,一条文档包含信息有元数据比如:_index(索引名)、_id(文档ID,可以自己指定也可以自动生成)、_version(版本号)、_source(原始数据也就是真正的数据在这里显示)等等
集群(cluster)
ES本身就具有分布式、高可用性(允许节点有丢失且不会丢失数据)、可扩展性(将数据分布到所有节点上去)
不同的集群可以通过集群名字来区分
节点(node)
节点就是运行服务器上一个ES实例本身就是一个JAVA进程,可以通过配置文件形成不同功能的节点,每个节点都有不同名字来区分,每个节点启动后都分配一个UID,保存data目录下。
master:默认每个节点都是 node.master:false 来禁止,维护一个集群正常运行的所有必要信息:所有的节点信息、索引的mapping和setting信息、分片的路由信息,只有它才能修改集群的状态。
data:数据节点,默认就是,通过 node.data:false来禁止,用来保存数据,在数据扩展上起到了至关重要的作用
coordinating :协调节点,负责接收Client的请求,并将请求发到合适的节点上去,最终再把数据汇集到一起,每个节点默认都起到了coordinating的职责,其他节点都是false,可称为专属协调节点
ingest:数据摄取处理节点,每个节点默认都是,通过node.ingest:false来禁止。
分片(shard)
分片有 primary shard和replica shard
主分片(primary shard),主要解决数据水平扩展的问题。通过主分片可以将数据分布到集群内的所有节点上,数据可以并发的读写到每个分片上,提高写入速度,一个分片就是一个运行的Lucene的实例。这里注意的是,主分片的数量一旦设定后,就不可更改,除非通过reindex操作。
副本分片(replica shard)用以解决数据高可用的问题。
这里注意的事分片数过小,导致后续数据无法通过增加节点实现水平扩展,单个分片数据量过大导致数据重新分配耗时,分片数量过,会影响搜索结果的相关性打分,影响统计结果的准确性,单个节点上过多分片,会导致资源浪费(master会记录每个分片的信息),同时影响性能,
因此分片的大小数量设定是门学问,后续集群容量规划详讲。
段(segment)
默认ES会1秒进行一次refresh,形成一个segment,然后数据就可以被搜索到了,segment是shard上最小单位,生产环境会严格限制segment的数量,ES也会自动对segment进行forcemerge操作。
二、基本操作
CRUD
#文档的CURD
//create document 指定ID,如果ID已经存在,报错
PUT user/