ElasticSearch——ES核心概念

316 阅读4分钟

「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

接近实时(NRT Near Real Time)

Elasticsearch是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒内)

ElasticSearch 里存储文档数据和关系型数据库MySQL存储数据的概念进行一个类比

ElasticSearch 是==面向文档==型数据库,一条数据在这里就是一个文档。为了方便理解,这里将 ElasticSearch 里存储文档数据和关系型数据库MySQL存储数据的概念进行一个类比:

在这里插入图片描述

简单说明

ES 里的 Index可以看做一个库,而Types相当于表,Documents则相当于表的行。

ES(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行),每个文档中又包含多个字段(列)。

这里Types 的概念已经被逐渐弱化,Elasticsearch 6.X中,一个index下已经只能包含一个type,Elasticsearch 7.X中, Type的概念已经被删除了。

索引(index)

一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。索引类似于关系型数据库中Database的概念。在一个集群中,如果你想,可以定义任意多的索引。

类型(type)

在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。类型类似于关系型数据库中Table的概念。

==注意:在5.x版本以前可以在一个索引中定义多个类型,6.x之后一个索引只能创建一个类型,在7~8.x版本中彻底移除类型==

映射(Mapping)

Mapping是ES中的一个很重要的内容,它类似于传统关系型数据中table的schema(约束:例如字段类型,长度等),用于定义类型(type)的数据的结构,一个type(类型)对应一个mapping(映射)。在ES中,我们可以手动创建type(相当于table)和mapping(相关与schema),也可以采用默认创建方式。在默认配置下,ES可以根据插入的数据自动地创建type及其mapping。mapping中主要包括字段名、字段数据类型和字段索引类型。

文档(document)

一个文档是一个可被索引的基础信息单元,类似于表中的一条记录。"比如,你可以拥有某一个员工的文档,也可以拥有某个商品的一个文档。文档以采用了轻量级的数据交换格式JSON(Javascript Object Notation)来表示。

文档有几个重要属性:

  • 自我包含,一篇文档同时包含字段和对应的值,也就是同时包含key:value !
  • 可以是层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的!
  • 灵活的结构,文档不依赖预先定义的模式,我们知道关系型数据库中,要提前定义字段才能使用,在elasticsearch中,对于字段是非常灵活的,有时候,我们可以忽略该字段,或者动态的添加一个新的字段。