前置知识
提示
Elasticsearch是一个分布式,RESTful
风格的搜索和数据分析引擎。
概念点
- ES是面向文档的,文档是最小单位,对应着关系型数据库中的一条数据。
- index索引除了存储所有映射类型的字段,还包含一些设置,ex: refresh_interval(新增文档对于搜索可见的时间间隔,准实时)。
- 集群由n个节点(n≥1)组成,节点由m个分片(m≥1)组成。索引由x个主分片(x≥1)和y个副本分片(y≥0)组成。(
副本可以在运行时增加,而主分片不行,在创建索引前必须决定其数量
) - 新增文档时,会根据文档的id进行hash计算确认一个主分区A(shard_num = hash(_id) % 主分片个数),如果A分区不在当前节点,那么ES会将文档索引到A分区所在的目标节点上,并同步到非目标节点的主分片中,并通过各节点的主分片与副本分片进行同步。
RESTful
ES的查询会涉及到
RESTful
的相关概念
- 其中
GET、HEAD、PUT、DELETE
是幂等的操作(即任意多次执行所产生的影响均与一次执行的影响相同)POST
不是幂等的操作(即每次调用都会创建一个新的资源,但实际会通过数据库主键或其他方式进行限制)。PATCH
也不是幂等的,因为相比PUT
对资源的全部更新,PATCH
强调的是部分更新,如果是依赖于当前值的++操作,那么必定是非幂等的。GET、HEAD
是安全的操作,仅仅是查询资源并不会修改资源,PUT、PATHC、DELETE、POST
是不安全的操作,会修改资源数据。
type移除
ES中的index、type、document、field
分别对应着关系型数据库中的database、table、row、column
,在ES8.0
版本中已经不在支持type
。
在es中同一个index中不同的type是存储在同一个lucene索引文件中的,不同type中相同名字的字段的含义必须相同。
但关系型数据库中的table是独立存储的,所以type在es中的用途就十分有限。