关系型数据库 VS ElasticSearch
- 在7.0之前,一个 Index可以设置多个Types
- 目前Type已经被Deprecated,7.0开始,一个索引只能创建一个Type - “_doc”
- 传统关系型数据库和Elasticsearch的区别:
-
- Elasticsearch- Schemaless /相关性/高性能全文检索
- RDMS —事务性/ Join
索引(Index)
一个索引就是一个拥有几分相似特征的文档的集合。比如说,可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。
一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。
文档(Document)
- Elasticsearch是面向文档的,文档是所有可搜索数据的最小单位。
-
- 日志文件中的日志项
- 一本电影的具体信息/一张唱片的详细信息
- MP3播放器里的一首歌/一篇PDF文档中的具体内容
- 文档会被序列化成JSON格式,保存在Elasticsearch中
-
- JSON对象由字段组成
- 每个字段都有对应的字段类型(字符串/数值/布尔/日期/二进制/范围类型)
- 每个文档都有一个Unique ID
-
- 可以自己指定ID或者通过Elasticsearch自动生成
- 一篇文档包含了一系列字段,类似数据库表中的一条记录
- JSON文档,格式灵活,不需要预先定义格式
-
- 字段的类型可以指定或者通过Elasticsearch自动推算
- 支持数组/支持嵌套
文档元数据
元数据,用于标注文档的相关信息:
- _index:文档所属的索引名
- _type:文档所属的类型名
- _id:文档唯—ld
- _source: 文档的原始Json数据
- _version: 文档的版本号,修改删除操作_version都会自增1
- _seq_no: 和_version一样,一旦数据发生更改,数据也一直是累计的。Shard级别严格递增,保证后写入的Doc的_seq_no大于先写入的Doc的_seq_no。
- _primary_term: _primary_term主要是用来恢复数据时处理当多个文档的_seq_no一样时的冲突,避免Primary Shard上的写入被覆盖。每当Primary Shard发生重新分配时,比如重启,Primary选举等,_primary_term会递增1。