Elasticsearch 基本概念:索引、文档和REST API 电脑版发表于:2020/8/8 18:34 ![elasticsearch](https://img.tnblog.net/arcimg/hb/5f1adabe8df94fdb8331eb80e393c4a3.jpeg "elasticsearch") >#Elasticsearch 基本概念:索引、文档和REST API [TOC] <br/> 前言 ------------ tn>为了了解 **Elasticsearch** 如何构成,我们首先需要理解**索引(Index)**、**类型(Type)**、**文档(Document)**和**字段(Field)**四个基本的概念。 ![](https://img.tnblog.net/arcimg/hb/40c41cb06a6d4dae8142c625e2fa8080.png) tn>它们的关系大致如上图所示,**索引**包含一个或多个类型,类型可以认为是关系型数据库中的一个表,**类型**有一个或多个文档,**文档**中有一个和多个字段,**字段**又是以键值对构成对。 如果我们把 Elasticsearch 看作一个数据库的话,也可以这样理解: | 数据库中 | Elasticsearch中 | | ------------ | ------------ | | Table | Index(Type) | | Row | Document | | Column | Filed | | Schema | Mapping | | Sql | Dsl | tn>Elasticsearch 与传统数据库的区别在于以下两点 - Elasticsearch - Schemaless / 相关性 / 高性能全文检索 - 传统数据库 事务性 / Join 文档(Document) ------------ >- Elasticsearch 是面向文档的,文档是所有可搜索数据的最小单位 - 日志文件中的日志项 - 一部电影的具体信息 / 一张唱片的详细信息 - mp3 播放器里的一首歌 / 一篇 PDF 文档中的具体内容 >- 文档会被序列化成 JSON 格式,保存在 Elasticsearch 中 - JSON 对象由字段组成 - 每个字段都有对应的字段类型(字符串 / 数值 / 布尔 / 日期 / 二进制 / 范围类型) >- 每个文档都有一个 Unique ID - 你可以自己指定 ID - 或者通过 Elasticsearch 自动生成 <br/> >###JSON 文档 <br/> >- 一篇文档包含了一系列的字段。类似数据库表中一条记录。 >- JSON 文档,格式灵活,不需要预先定义格式。 - 字段的类型可以指定或者通过 Elasticsearch 自动推算 - 支持数组 / 支持嵌套 <br/> 例如如下例子 ``` movieId,titile,genres 1,Toy Story (2020),Adventure|Animation|Children|Comedy|Fantasy ``` ![](https://img.tnblog.net/arcimg/hb/7f54b25b16ee4871944cf066e67377b3.png) <br/> >###文档元数据 <br/> tn>元数据,用于标注文档的相关信息 ![](https://img.tnblog.net/arcimg/hb/c2472fd09deb4071a697214caa856280.png) | 字段名 | 作用 | | ------------ | ------------ | | _index | 文档所属的索引名 | | _type | 文档所属的类型名 | | _id | 文档唯一ID | | _source | 文档的原始JSON数据 | | _all | 整合所有字段到该字段,已被废除 | | _version | 文档的版本信息 | | _score | 相关性打分 | 索引 ------------ ![](https://img.tnblog.net/arcimg/hb/fa059b864c354b289eb4ce1437806605.png) >- Index - 索引是文档的容器,是一类文档的结合 - Index 体现了逻辑空间的概念:每个索引都有自己的 **Mapping** 定义,用于定义包含的文档的字段名和字段类型 - Shard 体现了物理空间的概念:索引中的数据分散在 Shard 上 >- 索引的 Mapping 与 Settings - Mapping 定义文档字段的类型 - Setting 定义不同的数据类型 >###索引的不同语意 ![](https://img.tnblog.net/arcimg/hb/5ed5459470304e0c816fbd470f90e60d.png) tn>索引(动词)文档到 Elasticsearch 的索引(名词)中 <br/> >- 名词:一个 Elasticsearch 集群中,可以创建很多个不同的索引 - 动词:保存一个文档到 Elasticsearch 的过程也叫索引(indexing) - ES 中,创建一个倒排索引的过程 - 名词:一个B树索引,一个倒排序索引 Type版本特点 ------------ - 在 7.0 之前,一个 index 可以设置多个 Types - 6.0 开始,Type 已经被 Deprecated。7.0 开始,一个索引只能创建一个 Type - "_doc" Elasticsearch 中的 Result Api ------------ ![](https://img.tnblog.net/arcimg/hb/ca547412456245608c9c1b32788c6986.png) Kibana 对 Elasticsearch的索引与管理 ------------ >###查看索引管理 ![](https://img.tnblog.net/arcimg/hb/4a6cae780ead4381a80e0a4bbdfd6abd.png) ![](https://img.tnblog.net/arcimg/hb/9bdd92e47631435d807280be5d0d2752.png) >###通过 Dev Tool 工具对索引的相关查询 ``` //查看索引相关信息 GET kibana_sample_data_ecommerce //查看索引的文档总数 GET kibana_sample_data_ecommerce/_count //查看前10条文档,了解文档格式 POST kibana_sample_data_ecommerce/_search { } //_cat indices API //查看 indices GET /_cat/indices/kibana*?v&s=index //查看状态为绿的索引 GET /_cat/indices?v&health=green //按照文档个数排序 GET /_cat/indices?v&s=docs.count:desc //查看具体的字段 GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs.count,mt ``` tn>大家可以执行看看。 ![](https://img.tnblog.net/arcimg/hb/f51b8c6b8f1c4d58afbaa913db603690.png)