ElasticSearch文档操作[ES系列] - 第502篇

历史文章(文章累计500+)

国内最全的Spring Boot系列之一

国内最全的Spring Boot系列之二

国内最全的Spring Boot系列之三

国内最全的Spring Boot系列之四

国内最全的Spring Boot系列之

国内最全的Spring Boot系列之六

国内最全的Spring Boot系列之

Elasticsearch可视化平台Kibana [ES系列] - 第498篇

Elasticsearch安装分词插件[ES系列] - 第499篇

ElasticSearch扫盲概念篇[ES系列] - 第500篇

ElasticSearch重建/创建/删除索引操作 - 第501篇

Hi,大家好,我是悟纤。我就是我,不一样的烟火。我就是我,与众不同的小苹果。

这一节来看看ES的文档基本操作 – 增删改查。

一、文档操作

1.1 索引文档

格式: [PUT | POST] /索引名称/[_doc  | _create ]/id

<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#afafaf"><em># 创建文档, 指定id</em></span></code><code><span style="color:#afafaf"><em># 如果id不存在,创建新的文档,否则先删除现有文档,再创建新的文档,版本会增加</em></span></code><code>PUT /es_db/_doc/1</code><code>{</code><code>  <span style="color:#dd1144">"name"</span>: <span style="color:#dd1144">"张三"</span>,</code><code>  <span style="color:#dd1144">"sex"</span>: 1,</code><code>  <span style="color:#dd1144">"age"</span>: 25,</code><code>  <span style="color:#dd1144">"address"</span>: <span style="color:#dd1144">"广州天河公园"</span>,</code><code>  <span style="color:#dd1144">"remark"</span>: <span style="color:#dd1144">"java developer"</span></code><code>}</code><code><span style="color:#afafaf"><em>#创建文档,ES生成id</em></span></code><code>POST /es_db/_doc</code><code>{</code><code>  <span style="color:#dd1144">"name"</span>: <span style="color:#dd1144">"张三"</span>,</code><code>  <span style="color:#dd1144">"sex"</span>: 1,</code><code>  <span style="color:#dd1144">"age"</span>: 25,</code><code>  <span style="color:#dd1144">"address"</span>: <span style="color:#dd1144">"广州天河公园"</span>,</code><code>  <span style="color:#dd1144">"remark"</span>: <span style="color:#dd1144">"java developer"</span></code><code>}</code><code>​</code></span></span>

注意:POST和PUT都能起到创建/更新的作用,PUT需要对一个具体的资源进行操作也就是要确定id才能进行更新/创建,而POST是可以针对整个资源集合进行操作的,如果不写id就由ES生成一个唯一id进行创建新文档,如果填了id那就针对这个id的文档进行创建/更新

1.2查询文档

根据id查询文档,格式: GET /索引名称/_doc/id

<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#0e9ce5">GET</span> /es_db/_doc/<span style="color:#0e9ce5">1</span></code></span></span>

条件查询 _search,格式: /索引名称/_doc/_search

<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#afafaf"><em># 查询前10条文档</em></span></code><code><span style="color:#0e9ce5">GET</span> /es_db/_doc/_search</code><code>​</code></span></span>

ES Search API提供了两种条件查询搜索方式:

·REST风格的请求URI,直接将参数带过去

·封装到request body中,这种方式可以定义更加易读的JSON格式

1.2.1 URI Query(了解即可)

<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#afafaf"><em>#通过URI搜索,使用“q”指定查询字符串,“query string syntax” KV键值对</em></span></code><code>​</code><code><span style="color:#afafaf"><em>#条件查询, 如要查询age等于28岁的 _search?q=*:***</em></span></code><code>GET <span style="color:#dd1144">/es_db/_doc/_search?q=age:28</span></code><code>​</code><code><span style="color:#afafaf"><em>#范围查询, 如要查询age在25至26岁之间的 _search?q=***[** TO **]  注意: TO 必须为大写</em></span></code><code>GET <span style="color:#dd1144">/es_db/_doc/_search?q=age[25 TO 26]</span></code><code>​</code><code><span style="color:#afafaf"><em>#查询年龄小于等于28岁的 :<=</em></span></code><code>GET <span style="color:#dd1144">/es_db/_doc/_search?q=age:<=28</span></code><code><span style="color:#afafaf"><em>#查询年龄大于28前的 :></em></span></code><code>GET <span style="color:#dd1144">/es_db/_doc/_search?q=age:>28</span></code><code>​</code><code><span style="color:#afafaf"><em>#分页查询 from=*&size=*</em></span></code><code>GET <span style="color:#dd1144">/es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1</span></code><code>​</code><code><span style="color:#afafaf"><em>#对查询结果只输出某些字段 _source=字段,字段</em></span></code><code>GET <span style="color:#dd1144">/es_db/_doc/_search?_source=name,age</span></code><code>​</code><code><span style="color:#afafaf"><em>#对查询结果排序 sort=字段:desc/asc</em></span></code><code>GET <span style="color:#dd1144">/es_db/_doc/_search?sort=age:desc</span></code><code>​</code></span></span>

1.2.2 DSL Query

DSL(Domain Specific Language领域专用语言)查询是使用Elasticsearch的查询语言来构建查询的方式。

<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#afafaf"><em># match 匹配查询,会对查询文本分词后匹配</em></span></code><code>GET /es_db/_search</code><code>{</code><code>  <span style="color:#dd1144">"query"</span>: {</code><code>    <span style="color:#dd1144">"match"</span>: {</code><code>    <span style="color:#dd1144">"address"</span>: <span style="color:#dd1144">"广州白云"</span></code><code>    }</code><code>  }</code><code>}</code><code>​</code><code><span style="color:#afafaf"><em># term 词项查询,属于精确查询,不会对查询文本分词</em></span></code><code><span style="color:#afafaf"><em># 思考:能否查到文档?</em></span></code><code>GET /es_db/_search</code><code>{</code><code>  <span style="color:#dd1144">"query"</span>: {</code><code>    <span style="color:#dd1144">"term"</span>: {</code><code>    <span style="color:#dd1144">"address"</span>: <span style="color:#dd1144">"广州白云"</span></code><code>    }</code><code>  }</code><code>}</code><code>​</code></span></span>

1.3修改文档

全量更新,整个json都会替换,格式: [PUT | POST] /索引名称/_doc/id

<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#afafaf"><em># 全量更新,替换整个json</em></span></code><code>PUT /es_db/_doc/1</code><code>{</code><code>  <span style="color:#dd1144">"name"</span>: <span style="color:#dd1144">"张三"</span>,</code><code>  <span style="color:#dd1144">"sex"</span>: 1,</code><code>  <span style="color:#dd1144">"age"</span>: 25</code><code>}</code><code>​</code><code><span style="color:#afafaf"><em>#查询文档</em></span></code><code>GET /es_db/_doc/1</code><code>​</code></span></span>

使用_update部分更新,格式: POST /索引名称/_update/id

update不会删除原来的文档,而是实现真正的数据更新

<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#afafaf"><em># 部分更新:在原有文档上更新</em></span></code><code><span style="color:#afafaf"><em># Update -文档必须已经存在,更新只会对相应字段做增量修改</em></span></code><code>POST /es_db/_update/1</code><code>{</code><code>  <span style="color:#dd1144">"doc"</span>: {</code><code>    <span style="color:#dd1144">"age"</span>: 28</code><code>  }</code><code>}</code><code>​</code><code><span style="color:#afafaf"><em>#查询文档</em></span></code><code>GET /es_db/_doc/1</code><code>​</code></span></span>

使用 _update_by_query 更新文档:更新符合条件的文档

<span style="color:#333333"><span style="background-color:#fafafa"><code>POST /es_db/_update_by_query</code><code>{</code><code>  <span style="color:#dd1144">"query"</span>: {</code><code>    <span style="color:#dd1144">"match"</span>: {</code><code>      <span style="color:#dd1144">"_id"</span>: <span style="color:#0e9ce5">1</span></code><code>    }</code><code>  },</code><code>  <span style="color:#dd1144">"script"</span>: {</code><code>    <span style="color:#dd1144">"source"</span>: <span style="color:#dd1144">"ctx._source.age = 30"</span></code><code>  }</code><code>}</code><code>​</code></span></span>

1.4并发场景下修改文档

_seq_no_primary_term是对_version的优化,7.X版本的ES默认使用这种方式控制版本,所以当在高并发环境下使用乐观锁机制修改文档时,要带上当前文档的_seq_no和_primary_term进行更新:

<span style="color:#333333"><span style="background-color:#fafafa"><code>GET /es_db/_doc/<span style="color:#0e9ce5">1</span></code><code>​</code><code>​</code><code>POST /es_db/_doc/<span style="color:#0e9ce5">1</span>?if_seq_no=<span style="color:#0e9ce5">6</span>&if_primary_term=<span style="color:#0e9ce5">1</span></code><code>{</code><code><span style="color:#dd1144">"name"</span>: <span style="color:#dd1144">"李四xxx"</span></code><code>}</code><code>​</code></span></span>

如果版本号不对,会抛出版本冲突异常,如下图:

1.5删除文档

格式: DELETE /索引名称/_doc/id

<span style="color:#333333"><span style="background-color:#fafafa"><code><span style="color:#0e9ce5">DELETE</span> /es_db/_doc/<span style="color:#0e9ce5">1</span></code></span></span>
我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。

à悟纤学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

SpringBoothttps://t.cn/R3QDhU0

SpringSecurity5.0http://t.cn/A6ZadMBe

ShardingJDBC分库分表http://t.cn/A6ZarrqS

分布式事务解决方案http://t.cn/A6ZaBnIr

JVM内存模型调优实战:http://t.cn/A6wWMVqG

Spring入门到精通:https://t.cn/A6bFcDh4

大话设计模式之爱你:https://dwz.cn/wqO0MAy7

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

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

相关文章

Day68:WEB攻防-Java安全原生反序列化SpringBoot攻防heapdump提取CVE

目录 Java安全-反序列化-原生序列化类函数 原生序列化类函数 SnakeYaml XMLDecoder ObjectInputStream.readObject 工具利用 ysoserial Yakit SerializedPayloadGenerator Java安全-SpringBoot框架-泄漏&CVE SpringBoot Actuator-黑白盒发现 人工识别 BurpSui…

【书生·浦语大模型实战营】学习笔记2

Lagent&#xff1a;智能体框架&#xff0c;实现将一个大语言模型转化为多种类型的智能体&#xff0c;更好地发挥InternLM的性能 浦语灵笔&#xff1a;视觉语言大模型 InternLM-Chat-7B智能对话Demo 环境准备 使用复制的internlm-demo环境 # 执行该脚本文件来安装项目实验环境…

test测试类-变量学习

test测试类 作用&#xff1a;标记到类上成为测试类&#xff0c;标记到方法上成为测试方法 变量&#xff1a;测试类的变量&#xff0c;在测试类括号中应用 1、invocationCount变量 意思是这个方法应该被调用的次数。 在测试框架中&#xff0c;特别是当使用参数化测试或数据驱动…

ElasticSearch 用法

首先讲下 ES的倒排序索引 入门-倒排索引 正排索引&#xff08;传统&#xff09; idcontent1001my name is zhang san1002my name is li si 倒排索引 keywordidname1001, 1002zhang1001 正排索引&#xff1a;我想查name&#xff0c;这时候是模糊的查询&#xff0c;会循环遍历…

被奔驰看上的“人”

上周五&#xff0c;人形机器人公司、NASA 合作伙伴 Apptronik 宣布已与梅赛德斯奔驰&#xff08;以下简称奔驰&#xff09;达成一项商业协议&#xff0c;试点将身高 1.7 米、体重 140 多斤的双足机器人 Apollo 用于制造业。奔驰也成为继宝马、蔚来汽车之后最新尝试人形机器人的…

Verilog刷题笔记38

题目&#xff1a;Assume that you have two 8-bit 2’s complement numbers, a[7:0] and b[7:0]. These numbers are added to produce s[7:0]. Also compute whether a (signed) overflow has occurred. 解题&#xff1a; module top_module (input [7:0] a,input [7:0] b,o…

macbookpro系统数据清理,2024年有哪些清理MacBook数据恢复

清理MacBook Pro系统数据的方法包括&#xff1a; 优化储存空间。在Mac的系统设置中&#xff0c;可以查看和管理储存空间的使用情况&#xff0c;包括iCloud云盘、照片、音乐、文稿等不同类别的数据。 转移或删除文件。可以将文件移动到外部驱动器或清空“废纸篓”来释放空间&…

【C++】内存管理和模板基础(new、delete、类及函数模板)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 内存分布 C内存管理方式 new/delete操作内置类型 new和delete操作自定义类型 operator new与operator d…

Covalent Network(CQT)与 Celo 集成,推动 Web3 下一代现实资产解决方案的发展

Covalent Network&#xff08;CQT&#xff09;是一个统一的区块链 API 提供商&#xff0c;其已正式与 Celo 集成&#xff0c;Celo 是一个以移动优先的 EVM 兼容链。这一重要的里程碑旨在提升 Celo 生态系统中开发者的能力&#xff0c;通过授予他们访问关键链上数据的权限&#…

AI助手 - Fitten Code

前言 上一篇介绍了商汤AI编程小助手小浣熊 Raccoon&#xff0c;过程中又发现了另外一款国产AI编程助手&#xff0c;那就是本篇要介绍的非十科技出品的Fitten Code。 ​ Fitten Code 主打一个快&#xff1a;超高准确率、超快的响应速度。号称代码生成比GitHub Copilot 快两倍&am…

【面经八股】搜广推方向:面试记录(九)

【面经&八股】搜广推方向:面试记录(九) 文章目录 【面经&八股】搜广推方向:面试记录(九)1. 自我介绍2. 科研-项目经历问答3. 实习经历问答4. 八股5. 编程题6. 反问1. 自我介绍 。。。。。。 2. 科研-项目经历问答 挑了我的论文,一直揪着问,建议一定要熟悉自…

行尾检测论文汇总

文章目录 2023GNSS-Free End-of-Row Detection and Headland Maneuvering for Orchard Navigation Using a Depth Camera 2023 GNSS-Free End-of-Row Detection and Headland Maneuvering for Orchard Navigation Using a Depth Camera 摘要&#xff1a; 果园中基于GPS的导航…