Skip to content

前置知识

提示

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的相关概念

  1. 其中GET、HEAD、PUT、DELETE是幂等的操作(即任意多次执行所产生的影响均与一次执行的影响相同)
  2. POST不是幂等的操作(即每次调用都会创建一个新的资源,但实际会通过数据库主键或其他方式进行限制)。PATCH也不是幂等的,因为相比PUT对资源的全部更新,PATCH强调的是部分更新,如果是依赖于当前值的++操作,那么必定是非幂等的。
  3. GET、HEAD是安全的操作,仅仅是查询资源并不会修改资源,PUT、PATHC、DELETE、POST是不安全的操作,会修改资源数据。

type移除

ES中的index、type、document、field分别对应着关系型数据库中的database、table、row、column,在ES8.0版本中已经不在支持type

  1. 在es中同一个index中不同的type是存储在同一个lucene索引文件中的,不同type中相同名字的字段的含义必须相同。

  2. 但关系型数据库中的table是独立存储的,所以type在es中的用途就十分有限。