一文了解ElasticSearch主要的一些基本概念
文档 (Document)
-
ElasticSearch是面向文档的,文档是所有可搜索的据的最小单位比如:
- 日志文件中的日志项
- 一首歌的具体信息
- 一篇words具体内容
-
文档会被序列化成
JSON格式,保存在ElasticSearch中- JSON对象由字段组成
- 每个字段都有对应的字段类型(字符串/数值/布尔/日期/二进制/范围)
-
每个文档都有一个Unique ID
- 可以自己指定ID
- 由ElasticSearch自动生成
JSON 文档
在ElasticSearch中,一篇文档包含一系列的字段。相当于我们关系型数据库中的一条记录
为什么ElasticSearch会选用JSON文档呢?
JSON文档相对来说格式较为灵活,不需要预定义格式。
字段可以自己指定或者通过ElasticSearch自动推算。
JSON支持的数据类型相对丰富,除了常规的类型还支持数组,还支持类型的嵌套。
文档的元数据
什么是元数据?
元数据是用于标注文档的相关信息。
ElasticSearch 中每一篇的文档都有一系列的元数据进行标注。
- _id 文档的唯一ID
- _index 文档所属的索引名
- _type 文档所属的类型名
- _source 文档的原始Json 数据
- _all
7.0 开始已废除,整合了所有字段的内容字段 - _version 文档的版本号,在大量并发下可以很好的解决文档冲突的问题
- _score 文档与搜索相关性打分
索引
索引可以看成是文档的容器,一类文档的聚合体现。
Index体现了逻辑空间的概念,每个索引都有都有自己的Mapping定义,用来描述文档的字段名和字段类型Shard体现的是物理上空间概念,索引上的数据都是分散在shard上的。
在一个索引上可以为其设置setting与mapping
setting用来定义索引是如何分布在shard上, 具体需要多少分片,数据是如何分布的mapping用来描述索引的字段类型与描述
索引的不同语义
索引在不同的上下文中是有不同的含义的。
在ES中指的是一类文档的集合,是名词属性。
在将文档写入ES中的时候,也可叫索引,指的是将文档对ES创建倒排索引的过程。
倒排索引在搜索引擎上是一个很重要的概念。日常生活中我们也会遇到索引,像字典目录查找。
TYPE
从 ElasticSearch 6.0 开始Type已经被 Deprecated。
从 ElasticSearch 7.0 开始,一个索引只能创建一个Type _doc。
ElasticSearch与关系型数据库的对比
| RDBMS | Elastic Search |
|---|---|
| Table | Index(Type) |
| Row | Document |
| Column | Field |
| Schema | Mapping |
| SQL | DSL |
从上面的表格我们可以看出
ES中的Index相当于关系型数据库中的表ES中的Ducument可以看成是关系型数据库的记录ES中的Column可以看成是关系型数据库的的字段ES中的Mapping可以看作关系型数据库的表定义- 对于关系型数据库我们使用
SQL进行查询,ES中使用DSL来进行查询
二者除了上述的类比外还有更重要的差别
- 在对数据需要
全文检索,对结果进行相关性算分的时候,ES相对更有优势 - 在当对数据需要
事务管理要求比较高的时候,显然传统的RDBMS更有适合
REST API
为了方便与其他语言的系统进行集成,ES提供了REST API,方便获取ES数据结果。
在Kibana中,有一个索引管理工具。可以看到详细的索引描述。
常见 REST API
- 查看索引相关信息
GET {index_name} - 查看索引文档总数
GET {index_name}/_count - 通配符查询index
GET _cat/indices/kibana* - 查询状态为绿色的索引
GET _cat/indices?v&health=green