嘴对嘴系列之es核心基础概念之文档和索引

写在前面

通过之前的几篇安装指南,我们已经把Elasticsearch的集群搭建起来了,并且也使用了Kibana进行交互式的操作。在操作中,我们发现Elasticsearch提供了基于RESTFUL风格的API操作。今天我们就送RESTful入手,介绍Elasticsearch中的索引(index)和文档(document)究竟是什么样的。为了简便沟通,我们在这里达成共识,除非特别说明,我们所说的es便是Elasticsearch

RESTful

REST是Representational State Transfer的缩写,RESTful的架构设计,被定义成HTTP协议的最佳实践,因此我们可以知道,RESTful是一种风格,风格是为了让软件更加清晰,易于维护和使用。

我们知道HTTP支持不同的请求方法,例如GET、POST等等,因此也对应了不同的操作,具体的定义示例可看下图。

image-20220627100359300.png

关于RESTful风格在学习es了解这么多已经足够了,更详细的信息,我们将在《RESTfullAPI操作篇》详细介绍。

文档 (Document)

众所周知,es是一个分布式文档存储。es在数据处理上,并不会把数据处理成为像是MySQL数据库的表格形式,而是将数据序列化成为JSON文档,这样能够存储更加复杂的数据结构。而这样一个JSON对象,es称之为文档Document。同时,JSON对象是有一个或者多个字段组成,这些字段也有着不同的类型,例如字符串、数值、日期、地理信息等。

定义

现在,我们知道,文档是es一个JSON对象,JSON对象中包含不同的字段,描述着对象的属性。那么如何定义一个对象呢?我们从Kibana的Dev Tools进行操作。

# 在es-learn-doc-person索引中创建一个文档
PUT /es-learn-doc-person/_create/1
{
    "name":"zhang san",
    "age":29
}
复制代码

此时,这个name叫做zhang san的对象,被{}包围起来的,就是es里的一个文档。

执行,返回信息

{
  "_index" : "es-learn-doc-person",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

复制代码

我们来分别解读一下创建指令和返回的信息。

PUT /es-learn-doc-person/_create/1
可以解读为 
PUT 请求方式,一般用在创建的场景下,POST也可以
es-learn-doc-person {索引名称},POST请求下,如果这个索引不存在,会自动创建索引
_create 是es提供的操作api,此处需要注意,一般而言es的api都是以下划线_开头的
1 代表的是这个文档id
复制代码

所以这段命令执行的意思就是,向索引es-learn-doc-person中创建一个文档,这个文档的属性用JSON串来表示。

通过创建文档指令的返回信息,我们能够分析文档的元数据有哪些。

_index:文档归属的索引是哪一个,索引可以理解为一系列文档的集合

_id:文档的id,如果不指定的话,es会赋值

_version: 版本,用来记录修改的版本次数,递增

_shard:分片信息,集群篇我们详细介绍

result:指令执行的结果,一般有created创建成功,updated更新成功

CRUD

既然我们知道了,文档是什么,也知道了可以通过RESTful API的方式来操作文档,接下来我们尝试着,在索引中对我们常见的CRUD进行操作。首先,我们先看下,不同的操作请求对应的不同的

操作请求方式备注
创建PUTPUT创建已存在的情况,会报错
也可以用POST,如果存在会更新,不存在会创建
更新POST更新,如果不存在则会创建
查找GET
删除DELETE
# 在索引es-learn-doc-person中创建一个文档id为10,name为ma zi,年龄20岁
PUT /es-learn-doc-person/_create/10
{
    "name":"ma zi",
    "age":20
}
复制代码
# 查出es-learn-doc-person中name是 zhang san的文档
GET /es-learn-doc-person/_search
{
  "query": {
    "match": {
      "name": "zhang san"
    }
  }
}
复制代码
# 在索引es-learn-doc-person中id=10的年龄改为30
POST /es-learn-doc-person/_doc/10
{
    "age":30
}
复制代码
# 删除索引es-learn-doc-person中id=10的文档
DELETE /es-learn-doc-person/_doc/10
复制代码

索引 (Index)

在上面的创建文档的时候

# 在es-learn-doc-person索引中创建一个文档
PUT /es-learn-doc-person/_create/1
{
    "name":"zhang san",
    "age":29
}
复制代码

我们指定了索引es-learn-doc-person,默认es帮我们创建了索引。

# 我们无条件查询下索引
GET /es-learn-doc-person/_search
复制代码

image-20220627140606625.png

通过结果,我们可以看到,这个索引下包含了很多的文档,并且会有相关的一些维度信息,因此索引可以看做是文档集合和相关的文档处理。

元数据

对于索引的元数据,es有两部分的划分,settingmapping。可以通过es相关api来查看。

setting

setting主要用来限定索引的一些行为,首先我们先查看,我们默认创建的索引的setting有哪些信息。

GET /es-learn-doc-person/_settings
复制代码

返回信息

image-20220627150148573.png

index.routing.allocation.include._tier_preference:在索引创建分配的时候推荐分配到哪些节点。

number_of_shards: 分区个数,将索引的数据分成多少份存储

number_of_replicas: 副本个数

一般我们比较关心的是索引的分区个数和副本个数,但是在其他的部分也有相关的设置,例如怎么确定分词、怎么进行索引分块、怎么进行分区合并、怎么记录慢日志等等。

mapping

mapping是用来定义文档对象的属性,可以类比到表的列字段。

# 查询索引的映射
GET /es-learn-doc-person/_mapping
复制代码

image-20220627151959429.png

问题

  1. 在之前的es版本,文档的还有一个元数据_type?你知道是做什么的吗?为什么后期的版本进行了取消?
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值