当前位置: 首页 > news >正文

【ES】Elasticsearch核心基础概念:文档与索引

es的核心概念主要是:index(索引)、Document(文档)、Clusters(集群)、Node(节点)与实例,下面我们先来了解一下Document与Index。

RESTful APIs

在讲解Document与Index概念之前,我们先来了解一下RESTful APIs,因为下面讲解Document和Index的时候会使用到。

当我们把es服务器启动起来之后,要怎么调用呢?

其实很简单,es提供了基于HTTP协议的RESTful APIS,也就是说我们可以通过向es服务器发送HTTP请求来操作es服务器,如对文档读写、查询文档API、搜索API、索引的创建与删除,es默认使用9200端口接收HTTP请求。

所以调用es很简单,我们甚至可以使用命令行工具curl来调用es,比如下面的代码中,我们使用curl向es发送PUT请求,在request body携带JSON格式的数据传给es服务器:

# 使用curl调用es,创建一个文档
curl http://localhost:9200/my_test/1 -H "Content-Type:application/json" \
-X POST -d '{"uid":1,"username":"test"}'

下面的图片演示向es发送请求与es服务器响应的过程:
在这里插入图片描述
不过一般我们可以通过Kibana来管理es,而Kibana中的Dev Tools可以让我们更加方便地使用各种es的RESTful API,下面是我们在Kibana中Dev Tools使用的语句结构,其实作用与上面使用curl一样,我们在下面的演示会使用这种格式。

PUT /my_test/_doc/1
{"uid":1,"username":"test"
}

其实,为了方便不同编程语言的调用,es提供多种编程语言的类库(Java,PHP,Ruby,Go,Python,JavaScript,NET等),但这些编程语言是基于es提供的RESTful APIs的封装。

文档(Document)

es是面向文档的,文档是es中可搜索的最小单位,es的文档由一个或多个字段组成,类似于关系型数据库中的一行记录,但es的文档是以JSON进行序列化并保存的,每个JSON对象由一个或多个字段组成,字段类型可以是布尔,数值,字符串、二进制、日期等数据类型。

es每个文档都有唯一的id,这个id可以由我们自己指定,也可以由es自动生成。

文档的元数据

es每一个文档,除了保存我们写入进行的文档原始数据外,也有文档自己的元数据,这些元数据,用于标识文档的相关信息。

下面是一个普通的es文档:

{"_index" : "test_logs2","_type" : "_doc","_id" : "1","_version" : 1,"_seq_no" : 0,"_primary_term" : 1,"found" : true,"_source" : {"uid" : 1,"username" : "test"}
}

从上面的文档中,我们可以看文档的元数据字段如下:

  • _index:文档所在索引名称
  • _source:原始json数据
  • _type:文档所属类型,es7.0以后只有为 _doc
  • _version:文档版本,如果对文档进行修改,则该字段会增加
  • _score:相关性打分
  • id:文档唯一id
    下面我们来了解es通过RESTful Api提供了文档的CURD等操作:

Create

通过es的RESTful API,使用HTTP的PUT方法,可以在某个索引中创建一个文档,在Kibana的Dev Tools中,我们可以使用下面的语句创建一个文档:

# 在my_test索引中创建一个文档
PUT /my_test/_create/1
{"uid":1,"username":"one"
}

Index

在es中,索引大概有以下三种含义与作用: 1. 动词,es中一种创建文档的方式,就是现在讲到的。 2. 名词,es组织文档的方式,下面会讲到。 3. 动词,对文档的字段进行分词并存储,以后会讲到

# 使用Index的方式
PUT /my_test/_doc/1
{"uid":1,"username":"test"
}

Index的方式与Create一样,用于创建一个es文档,不同的是,使用Index创建文档时,如果指定的文档id已经存在,则会删除原文档,并重新创建一个文档,并且文档的字段_version会加1

Update

更新一个文档的数据使用的是HTTP的POST方法,而且修改的字段信息还必须在doc中,如下:

使用Update的方式是直接更新数据,这点与使用Index创建文档,文档存在时,会删除文档再重新创建是不同的。

# 更新
POST /my_test/_doc/1
{"doc":{"username":"this is a document"}
}

Delete

使用HTTP中DELETE方法,可以删除一个es的文档,示例如下:

# 删除文档
DELETE /my_test/_doc/1

Read

读取一个es文档就很简单了,使用HTTP的GET方法就可以了,如下:

读取

GET /my_test/_doc/1

Bulk Api

上面的讲的对关于文档的Index,Create,Update,Delete等操作,但每一次只能对一个索引的一个文档进行操作,而我们知道每一次请求服务器进行操作时,网络请求往返时间的开销是一个很大的消耗,如果每个请求都只做一个操作,那么就有点太浪费了。

所以es的文档的bulk api支持在一次请求中同时对不同索引中的文档进行Index,Create,Update,Delete等操作,也就是所谓的批量处理,在处理过程,即便其中某个操作出错,也不会影响其他操作,如下:

POST _bulk
{"create":{"_index":"my_test2","_id":4}}  
{"uid":2,"username":"333333333333333333"}
{"index":{"_index":"my_test2","_id":10}}
{"uid":10,"username":"tttt"}
{"delete":{"_index":"my_test2","_id":1}}
{"update":{"_index":"my_test2","_id":2}}
{"doc":{"uid":2,"username":"hhhhhhhhhhhhhhhhh"}}

上面只是bulk api的简单示例,如果要熟悉语法,还是要多看看es的官方文档。

索引(Index)

es索引,是es组织文档的方式,是拥有相结构文档的集合,可以把es的索引类比为关系型数据库的一张数据表。

下面我们来看看对索引的各种操作的RESTful APIs,如下:

Create

使用HTTP的PUT方法便可以创建一个索引,在Kibna的Dev Tools,使用下面的语句便可创建一个索引:

PUT /my_test
在创建索引时也指定mapping和setting,如下:

PUT /my_test
{"settings" : {"index" : {"number_of_shards" : 3, "number_of_replicas" : 2 }}
}

Exists

可以使用HTTP的HEAD方法判断索引是否存在,如下:

# 判断索引是否存在
HEAD /my_test

如果索引存在,则http状态码返回200,如果不存在,则返回404。

Get

使用HTTP的GET方法可以获取索引的setting和mapping等信息,如下:

GET /index

返回如下的结果:

{"my_test" : {"aliases" : { },"mappings" : { },"settings" : {"index" : {"creation_date" : "1564757617415","number_of_shards" : "1","number_of_replicas" : "1","uuid" : "z6zGhu_ERA-R1c0m2fQrvg","version" : {"created" : "7020099"},"provided_name" : "my_test"}}}
}

Delete

es中删除的索引API,允许我们删除已经存在的索引,有以下几种情况:

使用索引名,删除单个或多个索引

# 删除my_test
DELETE /my_test# 删除多个索引,用逗号分隔
DELETE /my_test,my_test1,my_test2

使用通配符*删除多个索引(慎用)

# 删除以my_test为前缀的索引
DELETE /my_test*

使用_all删除es服务器上的全部索引

# 删除全部索引
DELETE /_all

注意,这种操作非常危险,不推荐使用,如果想禁用这种操作,可在在es的config/elasticsearch.yml中将参数action.destructive_requires_name设置为true,如:

action.destructive_requires_name:true
这样的话,则不能执行以上的操作了。

小结

文档和索引是es中最基础也是最核心的概念,熟悉对掌握文档和索引的操作是进一步学习es的基础,其实,如果你有关系型数据库的知识,可以把索引类比为数据库中的数据表,而文档可以理解为数据表中的一行记录。

相关文章:

【ES】Elasticsearch核心基础概念:文档与索引

es的核心概念主要是:index(索引)、Document(文档)、Clusters(集群)、Node(节点)与实例,下面我们先来了解一下Document与Index。 RESTful APIs 在讲解Document与Index概念之前,我们先来了解一下RESTful APIs,因为下面讲解Documen…...

实时手势识别(C++与python都可实现)

一、前提配置: Windows,visual studio 2019,opencv,python10,opencv-python,numpy,tensorflow,mediapipe,math 1.安装python环境 这里我个人使用的安装python10&#…...

15个Spring扩展点,一般人知道的不超过5个!

Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Spring Boot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了一个…...

Elasticsearch:以 “Painless” 方式保护你的映射

Elasticsearch 是一个很棒的工具,可以从各种来源收集日志和指标。 它为我们提供了许多默认处理,以便提供最佳用户体验。 但是,在某些情况下,默认处理可能不是最佳的(尤其是在生产环境中); 因此&…...

js几种对象创建方式

适用于不确定对象内部数据方式一:var p new Object(); p.name TOM; p.age 12 p.setName function(name) {this.name name; }// 测试 p.setName(jack) console.log(p.name,p.age)方式二: 对象字面量模式套路:使用{}创建对象,同…...

阿里云服务器ECS适用于哪些应用场景?

云服务器ECS具有广泛的应用场景,既可以作为Web服务器或者应用服务器单独使用,又可以与其他阿里云服务集成提供丰富的解决方案。 云服务器ECS的典型应用场景包括但不限于本文描述,您可以在使用云服务器ECS的同时发现云计算带来的技术红利。 阿…...

Ajax学习笔记01

引入 翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。 AJAX 不是新的编程语言,而是一种使用现有标准的新方法。 AJAX 最大的优点…...

Jinja2----------过滤器的使用、控制语句

目录 1.过滤器的使用 1.过滤器和测试器 2.过滤器 templates/filter.html app.py 效果 3.自定义过滤器 app.py templates/filter.html 效果 2.控制语句 1.if app.py templates/control.html 2.for app.py templates/control.htm 1.过滤器的使用 1.过滤器和测…...

面试了1个自动化测试,开口40W年薪,只能说痴人做梦...

公司前段缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人失望。看简历很多都是3年工作经验,但面试…...

冲鸭!33% 程序员月薪达到 5 万元以上~

2023年,随着互联网产业的蓬勃发展,程序员作为一个自带“高薪多金”标签的热门群体,被越来越多的人所关注。在过去充满未知的一年中,他们的职场现状发生了一定的改变。那么,程序员岗位的整体薪资水平、婚恋现状、职业方…...

【RSA】HTTPS中SSL/TLS握手时RSA前后端加密流程

SSL/TLS层的位置 SSL/TLS层在网络模型的位置,它属于应用层协议。接管应用层的数据加解密,并通过网络层发送给对方。 SSL/TLS协议分握手协议和记录协议,握手协议用来协商会话参数(比如会话密钥、应用层协议等等)&…...

clion在linux设置桌面启动图标(jetbrains全家桶均适用)

clion在linux设置桌面启动图标(jetbrains全家桶均适用) 网上大部分步骤都只是pycharm的教程,其实对于jetbrains全家桶都适合,vs code编辑器也可以这样。 刚开始是使用pycharm在linux设置的教程,参照:http…...

Java数据结构LinkedList单链表和双链表模拟实现及相关OJ题秒AC总结知识点

本篇文章主要讲述LinkedList链表中从初识到深入相关总结,常见OJ题秒AC,望各位大佬喜欢 一、单链表 1.1链表的概念及结构 1.2无头单向非循环链表模拟实现 1.3测试模拟代码 1.4链表相关面试OJ题 1.4.1 删除链表中等于给定值 val 的所有节点 1.4.2 反转…...

立创EDA 学习 day01 应用下载安装,基本使用的操作

1.下载网站 1.链接:立创EDA下载-立创EDA官方版-PC下载网 (pcsoft.com.cn) 2.安装立创EDA 1.直接 next (简单的操作) 3.注册账号 1. 最好注册一个账号,等下在原理图转PCB 板的时候要登录,才可以。 4.新建工程 1.新…...

华为OD机试真题Python实现【火星文计算】真题+解题思路+代码(20222023)

火星文计算 题目 已经火星人使用的运算符号为# $ 其与地球人的等价公式如下 x#y=2*x+3*y+4 x$y=3*x+y+2 x y是无符号整数 地球人公式按照 c 语言规则进行计算 火星人公式中$符优先级高于#相同的运算符按从左到右的顺序运算 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华…...

yolov8 修改类别 自定义数据集

yolov8 加载yolo网络模型 yolov8n.yaml nc: 80 # number of classes 分类数量 depth_multiple: 0.33 # scales module repeats 重复规模 width_multiple: 0.25 # scales convolution channels 缩放卷积通道 backbone head 指定配置 coco128.yaml path: ../datasets/coco128 # d…...

Linux环境下验证python项目

公司大佬开发的python rpa跑数项目,Windows运行没问题后,需要搭建一个linux环境进行验证,NOW START! Install VMware官网 下载好之后打开按步骤安装 最后一步会让填许可证(密钥),这里自行百…...

MAC开发使用技巧

1. 查看所有安装的程序 您可以通过以下步骤在 macOS 中查看所有已安装的程序: 点击屏幕左上角的苹果图标,选择“关于本机”。 在打开的窗口中,选择“系统报告”。 在系统报告窗口中,选择“软件”选项卡,然后选择“安…...

第三章-OpenCV基础-7-形态学

前置 形态学主要是从图像中提取分量信息,该分量信息通常是图像理解时所使用的最本质的形状特征,对于表达和描绘图像的形状有重要意义。 大体就是通过一系列操作让图像信息中的关键信息更加凸出。同时,形态学的操作都是基于灰度图进行。 相关操作最主要…...

DeepFaceLab 中Ubuntu(docker gpu) 部署

DeepFaceLab 在windows图形界面部署比较多,下面用ubuntu 部署在服务器上。部署过程中python版本,或者protobuf版本可能有问题,所以建议用docker 代码下载 cd /trainssdgit clone --depth 1 https://github.com/nagadit/DeepFaceLab_Linux.g…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...