【Elasticsearch 7 探索之路】(二)文档的 CRUD 和批量操作
上一篇,我们介绍了什么是 Elasticsearch,它能做什么用以及基本概念(索引 Index、文档 Document、类型 Type)理解。这篇主要对 文档的基本 CRUD 以及如何批量操作进行讲解。下面让我们进入正题。
一、文档的 CRUE
Create 文档
支持自动生成文档 Id 和指定文档 Id 两种方法
#create document. 自动生成 Id
POST songs/_doc
{
"name":"说好不哭",
"author":"周杰伦",
"price":3
}
#create document. 指定Id。如果 Id 已经存在,报错
PUT songs/_create/1
{
"name":"说好不哭",
"author":"周杰伦",
"price":3
}
Get 文档
#找到文档
Get songs/_doc/1
result:
{
"_index" : "songs",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "说好不哭",
"author" : "周杰伦",
"price" : 3
}
}
- 找到文档,返回 HTTP 200
- 文档元信息
- _index/_type/,_type 在版本7中只有 _doc 类型
- _version 版本信息,同一个 Id 的文档被删除了,版本号也会增加
- _source 中默认包含文档的原始信息
- 文档元信息
- 找不到,返回 HTTP 404
Index 文档
Index 也是用于创建文档的方法,和 Create 不同有一些不同,如果文档不存在情况,直接创建新文档,否者删除原来的文档,新文档被索引,_version 版本加一。
PUT songs/_doc/1
{
"name":"说好不哭",
"author":"周杰伦",
"price":0
}
result:
{
"_index" : "songs",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,//+1
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
Update 文档
- Update 不会删除原来文档,而是实现真正更新
- Post 方法和 Payload 需要包含在 "doc" 中
#在原文档上增加字段
POST songs/_update/1
{
"doc":{
"update" : "2019-05-15T14:12:12"
}
}
GET songs/_doc/1
{
"_index" : "songs",
"_type" : "_doc",
"_id" : "1",
"_version" : 3,
"_seq_no" : 2,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "说好不哭",
"author" : "周杰伦",
"price" : 0,
"update" : "2019-05-15T14:12:12"
}
}
Delete 文档
#Delete by Id
#删除文档
DELETE users/_doc/1
Bulk 批量操作
- Bulk 支持再一次调用中,对不同索引进行操作
- 支持 Index、Create、Update、Delete 类型操作
- 单条错误不影响其他操作进行
- 每一条操作都会有对应的执行的结果显示
POST _bulk
{ "index" : { "_index" : "test1", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test1", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field3" : "value3" }
{ "update" : { "_index" : "test1","_id" : "1"} }
{ "doc" : {"field2" : "value2"} }
mget 批量读取
顾名思义就是可以对不同索引的文档进行批量读取,只需要提供索引名称和 Id 就可以在一次 API 中全部读取,减少网络开销。
GET /test1/_mget
{
"docs" : [
{
"_id" : "1"
},
{
"_id" : "2"
}
]
}
msearch 批量查询
同样 ES 也提供了 msearch 对不同索引进行批量查询。
# msearch 操作
POST kibana_sample_data_ecommerce/_msearch
{}
{"query" : {"match_all" : {}},"size":1}
{"index" : "kibana_sample_data_flights"}
{"query" : {"match_all" : {}},"size":2}
注:kibana_sample_data_ecommerce 可以在 kibana 的样例数据,需要手动点击添加。
本篇主要对文档的 CRUD 以及批量操作 API 进行讲解。在这里提一点,批量操作可以帮助我们提高对 API 调用性能,但如果一次提交过多数据,也是有可能会导致 ES 过大的压力,反而造成性能下降。
系列文章
【Elasticsearch 7 搜索之路】(一)什么是 Elasticsearch?
【Elasticsearch 7 探索之路】(二)文档的 CRUD 和批量操作的更多相关文章
- Elasticsearch必知必会的干货知识一:ES索引文档的CRUD
若在传统DBMS 关系型数据库中查询海量数据,特别是模糊查询,一般我们都是使用like %查询的值%,但这样会导致无法应用索引,从而形成全表扫描效率低下,即使是在有索引的字段精确值查找,面对海量数 ...
- 使用DOM进行xml文档的crud(增删改查)操作<操作详解>
很多朋友对DOM有感冒,这里我花了一些时间写了一个小小的教程,这个能看懂,会操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不会有什么问题. 后附java代码,也可以下载(可点击这 ...
- Elasticsearch 7.x 之文档、索引和 REST API 【基础入门篇】
前几天写过一篇<Elasticsearch 7.x 最详细安装及配置>,今天继续最新版基础入门内容.这一篇简单总结了 Elasticsearch 7.x 之文档.索引和 REST API. ...
- 详细描述一下 Elasticsearch 更新和删除文档的过程?
1.删除和更新也都是写操作,但是 Elasticsearch 中的文档是不可变的,因此不 能被删除或者改动以展示其变更: 2.磁盘上的每个段都有一个相应的.del 文件.当删除请求发送后,文档并没有真 ...
- Elasticsearch技术解析与实战(二)文档的CRUD操作
启动Elasticsearch和kibana 访问Elasticsearch:http://localhost:9200/?pretty 访问kibana:http://localhost:5601 ...
- 【JAVA与DOM4J实现对XML文档的CRUD操作】
一.简介 1.网上下载DOM4J 1.6.1压缩包,解压开之后,发现几个目录和一个jar文件,jar文件是必须的文件其它目录: docs目录:帮助文档的目录,单击index.html: Quick s ...
- (二)文档请求不同源之window.postMessage跨域
一.基本原理 HTML5为了解决跨域,引入了跨文档通信API(Cross-document messaging).这个API为window对象新增了一个window.postMessage方法,允许跨 ...
- elasticsearch 第五篇(文档操作接口)
INDEX API 示例: 1 2 3 4 5 PUT /test/user/1 { "name": "silence", "age": 2 ...
- Mongo对内嵌文档的CRUD
{ "_id" : ObjectId("5706032acd0a6194868cf53e"), "list" : { "age&q ...
随机推荐
- 【NOIP模拟赛】小奇挖矿 2
[题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎. [问题描述] 现在有m+1个星球,从左到右标号为0到m,小奇最初在0 ...
- linux上安装LAMP笔记
B哥最近在参加比赛,需要把一个php项目部署到服务器上,故此在linux上安装LAMP环境,用于部署项目,第一次安装,做点儿笔记记录一下. 安装条件: Redhat或者CentOS linux环境已装 ...
- 2. SOFAJRaft源码分析—JRaft的定时任务调度器是怎么做的?
看完这个实现之后,感觉还是要多看源码,多研究.其实JRaft的定时任务调度器是基于Netty的时间轮来做的,如果没有看过Netty的源码,很可能并不知道时间轮算法,也就很难想到要去使用这么优秀的定时调 ...
- ZGC深入学习
ZGC简介 本次调研目标选取的是jdk11(long-term support)下首次亮相的zgc. zgc介绍简单翻译了zgc main page:ZGC简介 另外参考hotspot garbage ...
- Flask源码分析一:服务启动
前言: Flask是目前为止我最喜欢的一个Python Web框架了,为了更好的掌握其内部实现机制,这两天准备学习下Flask的源码,将由浅入深跟大家分享下,其中Flask版本为1.1.1. Flas ...
- 实验吧之【简单的登录题(】CBC字节反转攻击)
开始刷ctf题吧 慢慢来. 实验吧---简单的登录题 题目地址:http://ctf5.shiyanbar.com/web/jiandan/index.php 随便提交一个id,看到后台set了两个 ...
- Neo4j:图数据库GraphDB(四)Python中的操作
本文总结下Python中如何操作Neo4j数据库,用到py2neo包,Pip install 一下. 1 连接neo4j数据库:跟其它数据库一样,操作前必须输入用户名和密码及地址连接一下. from ...
- go::常用库
sort 排序 var a = [...]string{"abc", "efg", "b", "A", "ee ...
- python中的__call__函数
简单实例: class TmpTest: def __init__(self, x, y): self.x = x self.y = y def __call__(self, x, y): self. ...
- Rsync服务常见问题
转---Rsync 故障排查整理 Rsync服务常见问题汇总讲解: 1. 客户端的错误现象:No route to host rsync服务端开启的iptables**防火墙** [root@nfs0 ...