ElasticSearch 文档的添加、获取、更新、删除_05

文章目录

            • 新建文档
            • 获取文档
            • 批量获取
            • 文档更新
            • 查询更新
            • 删除文档
            • 批量操作

新建文档

首先新建一个索引。

然后向索引中添加一个文档:

PUT blog/_doc/1
{"title":"6. ElasticSearch 文档基本操作","date":"2021-12-07","content":"首先新建一个索引。"
}

1 表示新建文档的 id。

添加成功后,响应的 json 如下:

{"_index" : "blog","_type" : "_doc","_id" : "1","_version" : 1,"result" : "created","_shards" : {"total" : 2,"successful" : 2,"failed" : 0},"_seq_no" : 0,"_primary_term" : 1
}
  • _index 表示文档索引。
  • _type 表示文档的类型。
  • _id 表示文档的 id。
  • _version 表示文档的版本(更新文档,版本会自动加 1,针对一个文档的)。
  • result 表示执行结果。
  • _shards 表示分片信息。
  • _seq_no 和 _primary_term 这两个也是版本控制用的(针对当前 index)。

添加成功后,可以查看添加的文档:
在这里插入图片描述
当然,添加文档时,也可以不指定 id,此时系统会默认给出一个 id,如果不指定 id,则需要使用 POST 请求,而不能使用 PUT 请求。

POST blog/_doc
{"title":"666","date":"2020-11-05","content":"首先新建一个索引。"
}
获取文档

Es 中提供了 GET API 来查看存储在 es 中的文档。使用方式如下:

GET blog/_doc/1

上面这个命令表示获取一个 id 为 1 的文档。

如果获取不存在的文档,会返回如下信息:

{"_index" : "blog","_type" : "_doc","_id" : "1","_version" : 1,"_seq_no" : 0,"_primary_term" : 1,"found" : true,"_source" : {"title" : "6. ElasticSearch 文档基本操作","date" : "2021-12-07","content" : "首先新建一个索引。"}
}

如果仅仅只是想探测某一个文档是否存在,可以使用 head 请求:

如果文档不存在,响应如下:

HEAD blog/_doc/2

在这里插入图片描述

HEAD blog/_doc/1

如果文档存在,响应如下:
在这里插入图片描述

批量获取

当然也可以批量获取文档。

GET blog/_mget
{"ids":["1","2"]
}
文档更新
  • 普通更新
    注意,文档更新一次,version 就会自增 1。

可以直接更新整个文档:

PUT blog/_doc/1
{"title":"666"
}

这种方式,更新的文档会覆盖掉原文档。

  • 大多数时候,我们只是想更新文档字段,这个可以通过脚本来实现。
POST blog/_update/1
{"script": {"lang": "painless","source":"ctx._source.title=params.title","params": {"title":"666666"}}
}

更新的请求格式:POST {index}/_update/{id}

在脚本中,lang 表示脚本语言,painless 是 es 内置的一种脚本语言。source 表示具体执行的脚本,ctx 是一个上下文对象,通过 ctx 可以访问到 _source、_title 等。

也可以向文档中添加字段:

POST blog/_update/1
{"script": {"lang": "painless","source":"ctx._source.tags=[\"java\",\"php\"]"}
}GET blog/_doc/1

在这里插入图片描述

通过脚本语言,也可以修改数组。例如再增加一个 tag:

POST blog/_update/1
{"script":{"lang": "painless","source":"ctx._source.tags.add(\"js\")"}
}

当然,也可以使用 if else 构造稍微复杂一点的逻辑。

POST blog/_update/1
{"script": {"lang": "painless","source": "if (ctx._source.tags.contains(\"java\")){ctx.op=\"delete\"}else{ctx.op=\"none\"}"}
}
查询更新

通过条件查询找到文档,然后再去更新。

例如将 title 中包含 666 的文档的 content 修改为 888。

POST blog/_update_by_query
{"script": {"source": "ctx._source.content=\"888\"","lang": "painless"},"query": {"term": {"title":"666"}}
}
删除文档
  • 根据 id 删除
    从索引中删除一个文档。

删除一个 id 为 1的文档。

DELETE blog/_doc/1

如果在添加文档时指定了路由,则删除文档时也需要指定路由,否则删除失败。

  • 查询删除
    查询删除是 POST 请求。

例如删除 title 中包含 666 的文档

POST blog/_delete_by_query
{"query":{"term":{"title":"666"}}
}

也可以删除某一个索引下的所有文档:

POST blog/_delete_by_query
{"query":{"match_all":{}}
}
批量操作

es 中通过 Bulk API 可以执行批量索引、批量删除、批量更新等操作。

首先需要将所有的批量操作写入一个 JSON 文件中,然后通过 POST 请求将该 JSON 文件上传并执行。

例如新建一个名为 aaa.json 的文件,内容如下:
在这里插入图片描述
首先第一行:index 表示要执行一个索引操作(这个表示一个 action,其他的 action 还有 create,delete,update)。_index 定义了索引名称,这里表示要创建一个名为 user 的索引,_id 表示新建文档的 id 为 666。

第二行是第一行操作的参数。

第三行的 update 则表示要更新。

第四行是第三行的参数。

注意,结尾要空出一行。

aaa.json 文件创建成功后,在该目录下,执行请求命令,如下:

curl -XPOST "http://localhost:9200/user/_bulk" -H "content-type:application/json" --data-binary @aaa.json

执行完成后,就会创建一个名为 user 的索引,同时向该索引中添加一条记录,再修改该记录,最终结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/516451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建实时数据仓库首选,云原生数据仓库技术解密

阿里云分析型数据库重磅推出基础版,极大降低了用户构建数据仓库门槛。高度兼容MySQL,极低的使用成本和极高的性能,使中小企业也可以轻松的搭建一套实时数据仓库,实现企业数据价值在线化。 AnalyticDB for MySQL的产品系列包括基础…

阿里宜搭发布专有云版本,基于云原生的应用构建PaaS平台

4月8日,阿里巴巴旗下0代码应用搭建平台“宜搭”发布专有云版本,可以基于阿里云专有云为客户实施专有云部署,实现客户数据的专有云存储,为政府、大型企业提供高稳定、高安全的应用搭建服务,支持业务在线,实现…

ElasticSearch 文档路由,你的数据到底存在哪一个分片上_06

es 是一个分布式系统,当我们存储一个文档到 es 上之后,这个文档实际上是被存储到 master 节点中的某一个主分片上。 例如新建一个索引,该索引有两个分片,0个副本,如下: 接下来,向该索引中保存…

云原生安全模型与实践

来源 | 玉符科技在传统的研发中,我们经常关注的「安全」包括代码安全、机器(运行环境)安全、网络运维安全,而随着云原生时代的到来,如果还按原有的几个维度切分的话,显然容易忽略很多云原生环境引入的新挑战…

JavaScript从入门到放弃 -(五)函数进阶(高级用法)

目录 1. 函数的定义和调用1.1 函数定义的3种方式1.2 函数调用方式(常见的6种)1.2.1 普通函数的调用1.2.2 对象中的函数调用1.2.3 构造函数的调用1.2.4 DOM元素绑定事件调用函数1.2.5 定时器中调用函数1.2.6 立即执行函数2. 函数内部的this指向2.1 this指向2.1.1 普通函数2.1.…

阿里云专家详解 2020 服务网格发展趋势

作者 | 王夕宁 阿里巴巴高级技术专家 关注“阿里巴巴云原生”公众号,参与文末留言互动,即有机会获得赠书福利! 本文摘自于由阿里云高级技术专家王夕宁撰写的《Istio 服务网格技术解析与实践》一书,文章从基础概念入手&#xff0…

小姐姐亲身体验:在阿里数据库科研团队实习是种怎样的体验?

作者简介: 张心怡,北京大学前沿交叉研究院研究生,中国人民大学信息学院本科生。从18年底开始在POLARDB-X团队智能数据库组的实习,现已在阿里度过了一年多的时光。 心怡说,对于有志于数据库领域研究的小伙伴&#xff0c…

2020职场人裸辞三大原因:不开心、工资低、没有盼头

近期,脉脉发布了《2020职场人裸辞现状调研报道》,报道显示2020最让职场人想裸辞的三大原因为:不开心、工资低、没有盼头。报告数据中还显示,工资不满预期是最让人想要裸辞的主要原因,但有超过6成职场人表示&#xff0c…

ElasticSearch 并发的处理方式:锁和版本控制_07

文章目录现象锁版本控制最新方案现象 当我们使用 es 的 API 去进行文档更新时,它首先读取原文档出来,然后对原文档进行更新,更新完成后再重新索引整个文档。不论你执行多少次更新,最终保存在 es 中的是最后一次更新的文档。但是如…

JavaScript从入门到放弃 -(六)正则表达式

正则表达式 1. 正则表达式概述1.1 什么是正则表达式1.2 正则表达式的特点2. 正则表达式在JavaScript中的使用2.1 创建正则表达式2.1.1 通过调用 RegExp 对象的构造函数创建2.1.2 通过字面量创建2.2 test测试正则表达式3. 正则表达式中的特殊字符3.1 正则表达式的组成3.2 边界符…

冠状病毒过后世界九大未来预测

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 随着COVID-19的泛滥在全球范围内蔓延,这迫使人类进行创新并改变我们的工作和生活方式。我们现在发现自己的优势在…

疫情宅家促生“囤货经济”,北美零售业极限应考

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 疫情之下,美国零售业同样遭遇冰火两重天的困境。 危机产生和意识到危机产生是两件事情。就在美国对着中国的疫情…

还不懂Redis?看完这个故事就明白了!

来源 | 编程技术宇宙责编 | Jerry我是Redis你好,我是Redis,一个叫Antirez的男人把我带到了这个世界上。说起我的诞生,跟关系数据库MySQL还挺有渊源的。在我还没来到这个世界上的时候,MySQL过的很辛苦,互联网发展的越来…

ElasticSearch 倒排索引_08

倒排索引:是 es 中非常重要的索引结构,是从文档词项到文档 ID 的一个映射过程。 “正排索引” 我们在关系型数据库中见到的索引,就是“正排索引”。 关系型数据库中的索引如下,假设我有一个博客表: id作者标题内容1…

2020年软件工程现状:Python或将成为第一大编程语言,中国开源涨势最猛

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 现在,是时候谈一谈 2020 年及以后的软件工程状况了。本文以 GitHub Octoverse 数据为基础,加上我作为…

JavaScript从入门到放弃 -(七)ES6

目录 1. ES6相关概念1.1 什么是 ES6 ?1.2 为什么使用 ES6 ?2 ES6新增语法2.1 新增关键字2.1.1 let 关键字小结2.1.2 const 关键字小结2.1.3 let、const、var 的区别2.2 解构赋值2.2.1 数组解构2.2.2 对象解构小结2.3 箭头函数2.3.1 语法规范2.3.2 箭头函数的调用2.3.3 this关…

ElasticSearch 动态映射与静态映射_08

映射就是 Mapping,它用来定义一个文档以及文档所包含的字段该如何被存储和索引。所以,它其实有点类似于关系型数据库中表的定义。 映射分类 动态映射 顾名思义,就是自动创建出来的映射。es 根据存入的文档,自动分析出来文档中字…

解密阿里云大规模深度学习性能优化实践

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 作者 | 阿里云异构计算AI加速负责人 游亮 近日,斯坦福大学公布了最新的 DAWNBench 深度学习榜单,这是…

深夜,我偷听到程序员要对session下手......

来源 | 编程技术宇宙责编 | Jerry我是一个web服务器我是一个web服务器,我的工作是给人类提供上网服务,我每天要为数以万计的人提供网页浏览服务。已经是深夜了,我还在和手下几个兄弟为了一件事紧张讨论着。“老大,现在咱们每天处理…

太平鸟上云 推动中国服饰行业新零售转型

云栖号案例库:【点击查看更多上云案例】 不知道怎么上云?看云栖号案例库,了解不同行业不同发展阶段的上云方案,助力你上云决策! 在消费增速下滑的大环境下,转型焦虑几乎已经弥漫了整个服饰行业,…