专栏首页南非骆驼说大数据ELK Stack系列之基础篇(十) - Elasticsearch的存储方式
原创

ELK Stack系列之基础篇(十) - Elasticsearch的存储方式

一、Elasticsearch存储方式

(1)面向文档

Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。这种理解数据的方式与以往完全不同,这也是Elasticsearch能够执行复杂的全文搜索的原因之一。

(2)JSON

ELasticsearch使用Javascript对象符号(JavaScript Object Notation),也就是JSON,作为文档序列化格式。JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。它简洁、简单且容易阅读。ELasticsearch可以理解为一种NoSQL数据库 。

以下使用JSON文档来表示一个用户对象,基于Key -Value实现形式:

JSON对象实列

二、Elasticsearch存储结构

Elasticsearch存储结构

(1)名词解释:

l 索引 index

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

l 类型 type

Es6之后,一个index中只能有一个type(前面的章节也讲到了),一般用doc来标识。

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

l 字段Field

相当于是数据表的字段,对文档数据根据不同属性进行的分类标识

l document

一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。在一个index/type里面,你可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。

现在,我们去ES 创建一个文档为1的数据,使用 PUT 索引/类型(doc)/文档ID 的格式 如下图所示:

创建一个文档

如果不指定文档ID,那我们就用POST 指令,不能再用PUT。命令如下:

POST创建一个文档
自动生成文档ID

所以我刚刚新建了2个文档,一个有ID,一个无ID,我们来找一下这几个文档。那查询,我们就用GET命令,有两种方式可以获取到结果,请看下面

1,简单的命令行模式:GET hezhen/doc/_search

GET查询指令

2,使用Query DSL 查询方式 这种方式能匹配更多精确的复杂查询,http Body里可以定义很多方法。

Query DSL查询语句

那么从以上的操作中我们可以看到,ES存储数据的格式是以文档存在的,这种文档格式是JSON的形式存在。记住,ES的每一个存储单元就是一个文档。所以,ES所有的数据都是以文档存在的。所有结构化、非结构化数据都能存储。是毫无规律的。以上就是面向文档的存储。

(2),带"_"线关键词理解 ,截图中出现了很多这种_下划线的词,这个是ES里的关键字,有特殊的意义,我们称之为元数据。用来标识ES的框架组成。主要的如下:

_index:文档所在索引名称

_type:文档所在类型名称

_id:文档唯一id

_uid:组合id,由_type和_id组成(6.x后,_type不再起作用,同_id)

_source:文档的原始Json数据,包括每个字段的内容

_all:将所有字段内容整合起来,默认禁用(用于对所有字段内容检索)

三、总结

本节主要讲解了一下ES的存储以及与存储相关的名词解释,在理解ES存储结构上我们可以对比一下RDBMS数据库-表-行的关系来理解ES文档的存储。对了,ES6.x后弱化了Type的概念,一个index只能一个type.ES7.0后将没有TYPE的概念。那么至此,我们的ELK开源框架的知识点介绍就暂时分这10部分。后面我们再去讲解一下腾讯云ES、了解它的特性、组建、维护以及要注意的事项.可以从下面的网站购买了解:

https://buy.cloud.tencent.com/es#/

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kibana上创建"index-pattern"为何不能匹配正确的索引?

    最近,经常有用户反馈,明明我的集群上有创建了相关的索引,为何在Kibana上,创建Index Pattern的时候,无法点击“下一步”,如下图所示:

    南非骆驼说大数据
  • 腾讯云ES如何通过Reindex实现跨集群数据拷贝

    在前面的生产实践中,我们经常会用reindex命令去拷贝复制索引文档,但是除了此功能,reindex还能实现跨集群复制索引,今天我们来试试这个功能.我将以自建集...

    南非骆驼说大数据
  • ELK Stack系列之基础篇(七) - 走进 Elasticsearch

    Elasticsearch 是实时的分布式搜索引擎,内部使用Lucene做索引、搜索。那么接下来,我们了解一下Elasticsear...

    南非骆驼说大数据
  • 文档理解最新技术介绍 | DAS 2020 Keynote Speech

    DAS 2020 (Document Analysis System,文档分析系统研讨会) 于 7月26-29日在武汉召开,本次研讨会中有不少精彩的内容,昨天向...

    CV君
  • elasticsearch中join类型数据如何进行父子文档查询?

    ES 中 join 类型数据如何根据父文档查询全部子文档?又如何根据子文档查询其父文档呢?更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

    小闫同学啊
  • 公司前端和后端因为接口扯起了皮,还列了 5 宗罪

    今天一位前端开发人员扯起了后端接口的皮,那个兄弟对后端人员提供的接口很大的意见(我是司空见惯),不过他说的也确实有道理,所以结合我的见解,希望提供接口的人员能多...

    芋道源码
  • 从零开始的Devops-整体设计

    这部分可能是前置,所有系统用统一认证登陆,用域名访问,负载均衡,从外网到内网登陆。

    于欣轩
  • 这些年,我写过的BUG(一)

    最近测试项目开发完,本来自测了几天直接上线(基本都是冒烟用例和正向的功能用例),因为是个内部项目,所以没想做很严格的测试。但这周刚好腾出来测试人手了,专门安排了...

    FunTester
  • 第3章—高级装配—运行时注入

    但有时我们需要避免硬解码,需要想要这些值在运行时确定,Spring提供了两种在运行时求值的方式:

    Dream城堡
  • 文本数据的机器学习自动分类方法(上)

    【编者按】:随着互联网技术的迅速发展与普及,如何对浩如烟海的数据进行分类、组织和管理,已经成为一个具有重要用途的研究课题。而在这些数据中,文本数据又是数量最大的...

    小莹莹

扫码关注云+社区

领取腾讯云代金券