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.mzph.cn/news/765436.shtml

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

相关文章

阿里云OSS存储的视频如何加水印

OSS是不能进行视频添加水印的&#xff0c;可以图片添加水印。 您可以在视频点播中进行配置&#xff1a; https://help.aliyun.com/zh/vod/user-guide/video-watermarks?spma2c4g.11186623.0.i2 原来的业务代码都是使用python 对oss的 视频进行上传 的,上传的视频路径已经保存到…

qt5-入门-国际化

参考&#xff1a; Qt 国际化(上)_w3cschool https://www.w3cschool.cn/learnroadqt/fwkx1j4j.html QT5实现语言国际化&#xff08;中英文界面动态切换&#xff0c;超详细&#xff09;_qt qevent::languagechange-CSDN博客 https://blog.csdn.net/m0_49047167/article/details/…

鸿蒙Harmony应用开发—ArkTS(stateStyles:多态样式)

Styles和Extend仅仅应用于静态页面的样式复用&#xff0c;stateStyles可以依据组件的内部状态的不同&#xff0c;快速设置不同样式。这就是我们本章要介绍的内容stateStyles&#xff08;又称为&#xff1a;多态样式&#xff09;。 概述 stateStyles是属性方法&#xff0c;可以…

基于springboot的4S店车辆管理系统

基于springboot的4S店车辆管理系统 的设计和实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开…

c语言食堂就餐排队问题290行

定制魏&#xff1a;QTWZPW&#xff0c;获取更多源码等 目录 题目 数据结构 函数设计 结构设计 总结 效果截图 ​ 主函数代码 题目 设计一个程序来模拟食堂就餐排队问题&#xff0c;通过输入学生人数和面包数量&#xff0c;计算有多少学生能够吃到午餐。 数据结构 该…

数字资产管理系统、企业数字资产管理软件

数字资产管理系统&#xff08;DAMS&#xff09;是一系列软件&#xff0c;它提供了一个开放平台&#xff0c;支持对多媒体数据的采集、创建、管理、存储、归档、检索、传输和显示。这些多媒体数据包括图像、视频、声音、文本和电影剪辑等。这些基础软件不仅是内容创作&#xff0…

使用React搭建single-spa

自己搭建的Demo GitHub - ftao123/single-spa-react-demo: single-spa-react-demo 修改子应用的webpack配置 library: "app2"和libraryTarget: "umd"配置必须添加。 可以看到filename在开发环境下的地址是static/js/bundle.js&#xff0c;所以我们主应用…

Java多线程自定义线程池——线程池的七大参数和四大拒绝策略

线程池 2.1 线程池思想 我们使用线程的时候就去创建一个线程&#xff0c;这样实现起来非常简便&#xff0c;但是就会有一个问题&#xff1a; 如果并发的线程数量很多&#xff0c;并且每个线程都是执行一个时间很短的任务就结束了&#xff0c;这样频繁创建线程就会大大降低系统…

Linux/Bizness

Enumeration nmap 用 nmap 扫描了常见的端口&#xff0c;发现对外开放了22,80,443 ┌──(kali㉿kali)-[~] └─$ nmap 10.10.11.252 Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-08 01:21 EST Nmap scan report for 10.10.11.252 Host is up (0.36s latency). Not…

python 空间距离计算

目录 python 空间距离计算 已知两点&#xff0c;画三角形 批量矩阵计算 python 空间距离计算 要在空间中找到一个点&#xff0c;使其位于点 b 和 c 之间的连线上&#xff0c;并且与点 b 的距离等于点 a 到点 b 的距离的2倍。 import numpy as npif __name__ __main__:a …

MySQL下载安装和本地连接

1、下载MySQL 从MySQL官网下载MySQL Community Server版本&#xff1a; 下载地址&#xff1a;MySQL官网 1、进入官网&#xff0c;点击DOWNLOADS 2、点击MySQL Community(GPL)Downloads 3、点击MySQL Installer for Windows 4、这个会直接跳转到最新的版本 如果想下载以往的…

题目:笨笨机器人(蓝桥OJ 3262)

问题描述&#xff1a; 解题思路&#xff1a; 用n位二进制数每位来表示每一步的状态&#xff0c;2的n次幂即使全部可能。遍历计算全部符合题意总数&#xff0c;再用cnt/(2的n次幂&#xff09;即答案。 需要注意的是&#xff0c;四舍五入后四位的方法&#xff1a;round(),可以四舍…

计算机网络——数据链路层(数据链路层功能概述)

计算机网络——数据链路层&#xff08;数据链路层功能概述&#xff09; 数据链路层的功能数据链路层的基本概念封装成帧和透明传输 我们之前已经学完了物理层的所有内容&#xff0c;今天开始我们要进入数据链路层的学习&#xff0c;如果有小伙伴对物理层的内容感兴趣的话&#…

from_pretrained 做了啥

transformers的三个核心抽象类是Config, Tokenizer和Model&#xff0c;这些类根据模型种类的不同&#xff0c;派生出一系列的子类。构造这些派生类的对象也很简单&#xff0c;transformers为这三个类都提供了自动类型&#xff0c;即AutoConfig, AutoTokenizer和AutoModel。三个…

算法系列--动态规划--子序列(2)

&#x1f495;"你可以说我贱&#xff0c;但你不能说我的爱贱。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–动态规划–子序列(2) 今天带来的是算法系列--动态规划--子序列(2),包含了关于子序列问题中较难的几道题目(尤其是通过二维状…

数据结构从入门到精通——快速排序

快速排序 前言一、快速排序的基本思想常见方式通用模块 二、快速排序的特性总结三、三种快速排序的动画展示四、hoare版本快速排序的代码展示普通版本优化版本为什么要优化快速排序代码三数取中法优化代码 五、挖坑法快速排序的代码展示六、前后指针快速排序的代码展示七、非递…

VSCode最强插件合集,助你代码开发效率翻倍!

大家好&#xff0c;我是宝哥。 今天给大家推荐14个VSCode靠前的编程辅助插件&#xff0c;它们可以帮助你提高代码编写、调试、阅读和管理效率。 1.ESLint 简介&#xff1a;用于检查JavaScript代码的语法和风格错误。 功能特色&#xff1a;支持多种规则&#xff0c;可以自定义规…

XSS-labs详解

xss-labs下载地址https://github.com/do0dl3/xss-labs 进入靶场点击图片&#xff0c;开始我们的XSS之旅&#xff01; Less-1 查看源码 代码从 URL 的 GET 参数中取得 "name" 的值&#xff0c;然后输出一个居中的标题&#xff0c;内容是 "欢迎用户" 后面…

STM32利用串口标准库发送字节,发送数组,发送字符串,发送数字,实现printf功能。

早晨到现在刚刚完成的功能&#xff1a;发送字节&#xff0c;发送数组&#xff0c;发送字符串&#xff0c;发送数字&#xff0c;实现printf功能。 当然这是建立在昨天学习使用串口发送数据的基础上&#xff0c;新建立的功能函数&#xff0c;咱们先来看看这次实验的结果吧&#…

C语言经典算法-8

文章目录 其他经典例题跳转链接41.基数排序法42.循序搜寻法&#xff08;使用卫兵&#xff09;43.二分搜寻法&#xff08;搜寻原则的代表&#xff09;44.插补搜寻法45.费氏搜寻法 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. 三色棋 5. 老鼠…