上一篇,我们介绍了什么是 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 和批量操作的更多相关文章

  1. Elasticsearch必知必会的干货知识一:ES索引文档的CRUD

    ​ 若在传统DBMS 关系型数据库中查询海量数据,特别是模糊查询,一般我们都是使用like %查询的值%,但这样会导致无法应用索引,从而形成全表扫描效率低下,即使是在有索引的字段精确值查找,面对海量数 ...

  2. 使用DOM进行xml文档的crud(增删改查)操作<操作详解>

    很多朋友对DOM有感冒,这里我花了一些时间写了一个小小的教程,这个能看懂,会操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不会有什么问题. 后附java代码,也可以下载(可点击这 ...

  3. Elasticsearch 7.x 之文档、索引和 REST API 【基础入门篇】

    前几天写过一篇<Elasticsearch 7.x 最详细安装及配置>,今天继续最新版基础入门内容.这一篇简单总结了 Elasticsearch 7.x 之文档.索引和 REST API. ...

  4. 详细描述一下 Elasticsearch 更新和删除文档的过程?

    1.删除和更新也都是写操作,但是 Elasticsearch 中的文档是不可变的,因此不 能被删除或者改动以展示其变更: 2.磁盘上的每个段都有一个相应的.del 文件.当删除请求发送后,文档并没有真 ...

  5. Elasticsearch技术解析与实战(二)文档的CRUD操作

    启动Elasticsearch和kibana 访问Elasticsearch:http://localhost:9200/?pretty 访问kibana:http://localhost:5601 ...

  6. 【JAVA与DOM4J实现对XML文档的CRUD操作】

    一.简介 1.网上下载DOM4J 1.6.1压缩包,解压开之后,发现几个目录和一个jar文件,jar文件是必须的文件其它目录: docs目录:帮助文档的目录,单击index.html: Quick s ...

  7. (二)文档请求不同源之window.postMessage跨域

    一.基本原理 HTML5为了解决跨域,引入了跨文档通信API(Cross-document messaging).这个API为window对象新增了一个window.postMessage方法,允许跨 ...

  8. elasticsearch 第五篇(文档操作接口)

    INDEX API 示例: 1 2 3 4 5 PUT /test/user/1 { "name": "silence", "age": 2 ...

  9. Mongo对内嵌文档的CRUD

    { "_id" : ObjectId("5706032acd0a6194868cf53e"), "list" : { "age&q ...

随机推荐

  1. python模块常用用法

    1.time模块(※※※※) import time #导入时间模块 print(time.time()) #返回当前时间的时间戳,可用于计算程序运行时间 print(time.localtime() ...

  2. 戈多编程-小谈sql语句的优化分析

    在sqlserver大数据查询中,避免不了查询效率减慢,暂且抛弃硬件原因和版本原因,仅从sql语句角度分析. 一. sql 语句性能不达标,主要原因有一下几点: 1. 未建索引,检索导致全表扫描 2. ...

  3. HDU 1428漫步校园

    漫步校园 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于长时间坐在电脑边,缺乏运动.他决定充分利用每次从寝室到机房的时间,在校园里散散步.整个HDU校 ...

  4. 基于Matlab/Simulink的模型开发(连载一)

    概述 基于模型的开发将省去繁琐的代码编写步骤,只需要拖动几个模块,就像搭积木一般,轻松搭建您自己的飞控算法.飞控开发人员可以将更多的精力放在算法本身,而不需要过多关注代码实现的细节,这样将大大加快开发 ...

  5. OpenGL全流程详细解读

    导语 对于开发者来说,学习OpenGL或者其他图形API都不是一件容易的事情.即使是一些对OpenGL有一些经验的开发者,往往也未必对OpenGL有完整.全面的理解.市面上的OpenGL文章往往零碎不 ...

  6. IT爱心求助站

    最近发生的一些事情,让我对自己的专业有了另外一层认识. 小尹同学,你是做软件的是吗?能否帮我看一下我的电脑问题? 老同学,我的电脑安装一个软件这么都装不上,能否帮我看一下呢? 邻居你好,我的手机怎么没 ...

  7. 面试官,Java8 JVM内存结构变了,永久代到元空间

    在文章<JVM之内存结构详解>中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化.作为面试官如果你还不知道,那么面试过程中是不是有些露怯? ...

  8. Qt5教程: (8) 标准对话框和文件对话框

    1. about对话框 包含头文件 #include <QMessageBox> 添加菜单项 QAction *p3 = pDialog->addAction("关于&qu ...

  9. [JZOJ5817] 【NOIP提高A组模拟2018.8.15】 抄代码

    Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...

  10. Redis集群与高可用性技术小结

    客户端分片,这种方式需要实现特定的客户端,需要手工配置redis实例并根据算法进行访问,对于redis实例的增减,调整灵活性很差,一般不推荐. 代理分片,常见的有Twemproxy架构(豆瓣创建了co ...