初识ElasticSearch(5) -批量操作之bulk | 条件查询 | 其它查询

article/2025/10/3 23:21:48

        • 1. bulk:
          • 1.1. bulk语法:
          • 1.2. bulk行为-增删改:
        • 2. bulk-index批量插入:
        • 3. bulk-update批量修改:
        • 4. bulk-delete批量删除:
        • 5. _update_by_query条件更新:
        • 6. _delete_by_query条件删除:
        • 7. _mget多文档查询:
        • 8. 其它查询:
          • 8.1. range范围查询:
          • 8.2. fuzzy模糊/相似查询:
          • 8.3. exists文档是否存在查询:
          • 8.4. from/size分页查询:
          • 8.5. wildcard通配符查询:
          • 8.6. 聚合查询:

  • 本系列笔记结合HTTP请求(使用postman调用,源文件见GitHub)和ElasticsearchRestTemplate进行调用学习
  • ElasticsearchRestTemplate封装了RestHighLevelClient,有些场景还得用RestHighLevelClient来操作
  • 版本说明:使用的SpringBoot-2.3.5,对应的ElasticSearch-7.6.2;所以还是可以用RestHighLevelClient
  • ElasticSearch-7.15后就弃用了RestHighLevelClient,可见官网文档,之后的版本可以开启客户端兼容来维持正常使用

1. bulk:

可以批量进行增删改,并且某一个操作失败,不会影响其他文档的操作,会在返回结果中告诉你失败的详细的原因

1.1. bulk语法:
  • POST /_bulk或POST /<index>/_bulk
  • 请求体要使用NDJSON(新行分隔的JSON)结构:JSON串只能放一行,相邻的JOSN串要换行
  • 现有行为actions ,再有请求体
1.2. bulk行为-增删改:
  • create 如果文档不存在就创建,但如果文档存在就返回错误
  • index 如果文档不存在就创建,如果文档存在就更新
  • update 更新一个文档,如果文档不存在就返回错误
  • delete 删除一个文档,如果要删除的文档id不存在,就返回错误

2. bulk-index批量插入:

【HTTP请求】:往user_term索引批量插入数据,指定文档id分别是1和2
·在这里插入图片描述
【说明】:二者的结果是一样的,_index为索引名,_id为文档id,如果索引不存在会新建索引
·
【API请求】:save或bulkIndex,实体类使用@id,userId的值就是文档id
·在这里插入图片描述

3. bulk-update批量修改:

批量更新update行为时,有以下几种模式

  • doc :更新部分文档
  • upsert:于script一起使用,文档存在时根据script脚本更新_source,不存在时使用upsert内容进行添加文档
  • doc_as_upsert:与upsert类似,文档存在时更新,不存在时将doc的内容作为_source添加文档
  • script:按脚本进行更新

【HTTP请求】:
·在这里插入图片描述
【栗子说明】:

  • 将文档id=1的文档,进行多字段局部更新
  • 将文档id=2的文档,进行单字段局部更新
  • 文档id=3的文档不存在,更新失败404
  • 将文档id=4的文档,进行单字段局部更新,由于文档不存在,{“address”: “China HZ”}作为_source插入新文档
  • 将文档id=5的文档,根据script脚本进行单字段局部更新,由于文档不存在,根据upsert内容进行插入新文档

·
【题外】:失败原因会在response显示,也可以使用?filter_path=items.*.error只显示失败内容

·在这里插入图片描述
【API请求】:bulkUpdate - 其中一个失败不影响其他操作,但会抛异常
·在这里插入图片描述

4. bulk-delete批量删除:

批量删除文档
·
【HTTP请求】:
·在这里插入图片描述
【API请求】:可以使用terms进行条件删除
·在这里插入图片描述

5. _update_by_query条件更新:

根据条件进行更新文档,而非通过文档id进行更新,条件可以使用term、match、bool等匹配方式

【栗子】:匹配修改name包含Tom的文档,批量修改文档地址为BJ
·
【HTTP请求】:
·在这里插入图片描述
【API】:updateByQuery
·在这里插入图片描述

6. _delete_by_query条件删除:

根据条件进行删除文档,而非通过文档id进行删除,条件可以使用term、match、bool等匹配方式

【栗子】:匹配删除name包含Tom的文档
·
【HTTP请求】:
·在这里插入图片描述
【API请求】:
·在这里插入图片描述

7. _mget多文档查询:

根据文档id,从一个索引或者多个索引获取多个文档

  • 格式:GET /_mget 或 GET /<index>/_mget

【HTTP请求】:
· 在这里插入图片描述
【说明】:

  • 可以对结果_source中的字段进行指定显示,比如_source只显示include的字段
  • 并不是只有mget可以这样,其它的查询也可以这么指定显示

·
【ids查询】:对于同一个索引根据id进行查询多个文档,可以直接使用ids查询
·在这里插入图片描述
【API请求】:multiGet:同一个索引的mget
·在这里插入图片描述

8. 其它查询:

一些常见的查询,比如范围查询range、分页查询等

8.1. range范围查询:

返回匹配范围区间的文档数据

  • gt - 大于;gte - 大于等于;lt - 小于;lte - 小于等于;format - 日期格式化

【HTTP请求】:插入四条文档,查询 2<userId<=4的文档数据
· 在这里插入图片描述
【API请求】:rangeQuery构建QueryBuilders
· 在这里插入图片描述

8.2. fuzzy模糊/相似查询:

基于term的相似模糊查询,返回与搜索词相似匹配的文档,主要有如下4个参数

  • value:搜索词
  • fuzziness:允许容错的词数/偏移量,默认是AUTO
  • prefix_length:不能被 “模糊化” 的初始字符数,前n个字符与搜索词相同;默认0
  • max_expansions: 默认50,该值不宜设置太大,具体含义不太清楚

【数据准备】:插入三条文档,name分别是李嘉图、李嘉欣、王嘉欣
·
【HTTP请求】:搜索李嘉欣
· 在这里插入图片描述
【说明】:

  • fuzziness为0时,说明不允许容错,那么只能搜索到李嘉欣的文档
  • fuzziness为0时,可以容错一个词,那么可以搜索到李嘉欣、李嘉图的文档;如果附加prefix_length为3,那么只能搜索到李嘉欣
  • prefix_length为0时,3个文档都可以搜索到

·
【API请求】:fuzzyQuery构建QueryBuilders
· 在这里插入图片描述
【match.fuzzy】:match中也支持fuzzy模糊查询,如下:
·在这里插入图片描述
【API】:
·在这里插入图片描述

8.3. exists文档是否存在查询:

如果exists匹配的字段不为null或[],就能搜索出文档

【数据准备】:插入4条文档,programming_languages分别是[]、[“”]、null、[“java”]
·
【HTTP请求】:
· 在这里插入图片描述
【API请求】:existsQuery构建QueryBuilders
·在这里插入图片描述

8.4. from/size分页查询:

根据from和size进行数据结果分页;其中from= (页码-1) * size

【数据准备】:插入4条文档,userId为1,2,3,4
·
【HTTP请求】:查询第2页数据,每页2条,按userId降序
· 在这里插入图片描述
【说明】:

  • sort、from、size和query同一层级,会先排序再分页

·
·【API请求】:withPageable
·在这里插入图片描述
【说明】:

  • 这里的page和HTTP请求的from不一样,这里的是页码,是从第0页开始的,也就是第一页其实page=0
8.5. wildcard通配符查询:

支持*通配符查询,如下匹配name为李 开头的文档

·
【HTTP请求】:
· 在这里插入图片描述
【API请求】:wildcardQuery构建QueryBuilders
·在这里插入图片描述

8.6. 聚合查询:

另起文章,链接后续再补


http://chatgpt.dhexx.cn/article/HYqLV6KT.shtml

相关文章

mysql bulkupdate_Bulk Upsert for MySQL PostgreSQL

什么是 Upsert "UPSERT" is a DBMS feature that allows a DML statements author to atomically either insert a row, or on the basis of the row already existing, UPDATE that existing row instead, while safely giving little to no further thought to con…

JPA 2.1: Bulk Update and Delete

为什么80%的码农都做不了架构师&#xff1f;>>> JPA 2.1: Bulk Update and Delete In the JPA 2.0 and early version, if you want to execute a bulk updating query, you have to use update or delete clause in JPQL directly. JPA 2.1 introduce new Criteri…

ElasticSearch提供的bulk update性能对比

目的&#xff1a;为了对比update的数据中重复数据对性能的影响。

Java面试智力题逻辑题汇总2021

rand5()能够生成0-4的随机数 rand7()能够生成0-6的随机数 已知rand7()生成rand5() 已知rand5()生成rand7()

面试智力题精选:扑克牌问题

袁方同学在玩扑克牌。这幅扑克牌比较特别&#xff0c;没有花色&#xff0c;只有点数。每张牌的点数是1&#xff0c;2&#xff0c;3&#xff0c;...,20。一共20张牌。袁方把牌洗了很多遍以后&#xff0c;把所有牌正面朝下垒成一堆放在自己手上。他翻第一张牌&#xff0c;发现是1…

大厂面试常见智力题

1. 64匹马,8个赛道,找出前4名最少比赛多少场? 这是一道经常考的智力题 64匹马&#xff0c;我们要想知道哪匹&#x1f40e;跑的最快&#xff0c;前提条件是每一匹&#x1f40e;都要去比赛一场。所以刚开始的赛马规则是每匹马都要进行一次比赛。 步骤1: 把 64匹&#x1f40e;…

盘点面试中常见的智力题

由于某些不可抗力&#xff0c;几篇文章做了删除&#xff0c;重新上架&#xff0c;希望于你有益。 面试为何会出现智力题&#xff1f; 可能是为了考察应聘者的综合分析能力、逻辑思维能力、反应能力和解决问题能力吧~ 也可能是...... “我去&#xff01;这面试者能力可以啊&…

面试中常见的智力题

文章目录 一、提灯过桥问题&#xff1f;二、有两个鸡蛋&#xff0c;如何最快的试出100层楼中刚好那一层扔下鸡蛋会碎&#xff1f;三、在地球什么地方能够&#xff0c;往南走1公里&#xff0c;然后往东走1公里&#xff0c;再往北走1公里能回到原点&#xff1f;四、一块N x M的巧…

面试中常见智力题汇总

面试中常见智力题汇总 1. 二进制问题1.1 毒药问题1.2 分金块问题 2. 先手必胜问题2.1 抢 30的必胜策略2.2 100本书&#xff0c;每次能够拿1~5本&#xff0c;怎么拿能保证最后一次是你拿&#xff1f;2.3 轮流拿石子 3. 推理题3.1 掰巧克力问题3.2 辩论赛问题3.3 在24小时里面时针…

2020秋招华为笔试题-买钉子

1.题目描述 2.代码实现 主要思路&#xff1a;类似零钱兑换 #include <iostream> #include <vector> using namespace std;class Solution { public:int buyNails(vector<int>& nails, int count) {vector<int> dp(count1, -1);dp[0] 0;for(int …

华为2022硬件逻辑笔试题

单选题&#xff08;每题两分&#xff09; 1.以下关于过程赋值的描述&#xff0c;不正确的是&#xff08;&#xff09; A在非阻塞性过程赋值中&#xff0c;使用赋值符号“< ” B赋值操作符是“”的过程赋值是阻塞性过程赋值 C在非阻塞性过程赋值中&#xff0c;对目标的赋…

AJAX原理快速入门

AJAX的原理 Ajax 的原理简单来说通过 XmlHttpRequest 对象来向服务器发异步请求&#xff0c;从服务器获得数据&#xff0c;然后用 javascript 来操作 DOM 而更新页面的局部显示。 Ajax 的优点&#xff1a; 1.最大的一点是页面无刷新&#xff0c;给用户的体验非常好。 2.使用异…

Ajax详解~及原理刨析

目录 什么是Ajax 同步和异步 Ajax如何实现异步和局部刷新 Ajax工作原理 Ajax工作流程 1、创建XMLHttpRequest对象 2、创建HTTP请求 3、向服务器发送数据 4、设置回调函数 &#xff0c;在回调函数中针对不同的响应状态进行处理 完整实例 Jquery中的ajax 什么是Ajax…

和vue相似的ajax原理及vue中运用ajax

和vue相似的ajax原理及vue中运用ajax。 一&#xff0c;默认的app.vue/文件 App.vue     App.vue是项目的主组件&#xff0c;页面入口文件 &#xff0c;所有页面都在App.vue下进行切换&#xff0c;app.vue负责构建定义及页面组件归集。                二&…

ajax工作原理

ajax工作原理 在写这篇文章之前&#xff0c;曾经写过一篇关于AJAX技术的随笔&#xff0c;不过涉及到的方面很窄&#xff0c;对AJAX技术的背景、原理、优缺点等各个方面都很少涉及null。这次写这篇文章的背景是因为公司需要对内部程序员做一个培训。项目经理找到了我&#xff0…

Ajax原理学习

一、AJAX 简介 AJAX即“Asynchronous Javascript And XML”&#xff08;异步JavaScript和XML&#xff09;&#xff0c;是指一种创建交互式网页应用的网页开发技术。 AJAX 是一种用于创建快速动态网页的技术。 通过在后台与服务器进行少量数据交换&#xff0c;AJAX 可以使网页…

Ajax工作原理和实现步骤

目录 一 Ajax技术与原理 1.1 Ajax简介 1.2 Ajax所包含的技术 1.3 Ajax的工作原理 1.4 XMLHttpRequest 对象的三个常用的属性 1. onreadystatechange 属性 2. readyState 属性 3. responseText 属性 1.5 xmlhttprequst的方法 1. open() 方法 2. send() 方法 二 Ajax…

Ajax原理,技术封装与完整示例代码

在做项目和学习的时候&#xff0c;经常用到Ajax的相关技术&#xff0c;但是这方面的技术总是运用的不是十分好&#xff0c;就寻找相关博客来学习加深Ajax技术相关。 一、Ajax简介二、同步、异步传输区别 2.1 异步传输2.2 同步传输 三、Ajax所包含的技术四、基础Ajax示例五、完整…

Ajax 原理是什么?如何实现?

Ajax 原理是什么&#xff1f;如何实现&#xff1f; 一、Ajax 原理是什么二、实现过程创建XMLHttpRequest对象与服务器建立连接给服务端发送数据绑定onreadystatechange事件 三、封装 一、Ajax 原理是什么 AJAX全称(Async Javascript and XML) 即异步的JavaScript 和XML&#…

Ajax 原理详解

名字的来历: AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML) 优点是 在不刷新整个浏览器的情况下,与服务器交换数据并更新部分网页内容 AJAX是基于现有的Internet标准 AJAX是基于现有的Internet标准,并且联合使用它们: XMLHttpRequest 对象 (异步的…