• 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. 聚合查询:

另起文章,链接后续再补

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

  1. es ik 多字段查询_SpringBoot使用注解的方式构建Elasticsearch查询语句,实现多条件的复杂查询...

    背景&痛点 通过ES进行查询,如果需要新增查询条件,则每次都需要进行硬编码,然后实现对应的查询功能.这样不仅开发工作量大,而且如果有多个不同的索引对象需要进行同样的查询,则需要开发多次,代码复 ...

  2. 初识ElasticSearch(2) -文档查询之match查询 | 分词器

    1. 分词器: 2. match查询: 2.1. 数据准备 - 创建带分词器的索引映射 2.2. 数据准备 - 添加文档 2.3. 数据准备 - 查看文本分词 2.4. 查询 - 映射有分词器的字段查 ...

  3. 1.初识elasticsearch

    1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中 ...

  4. ElasticSearch入门 第五篇:使用C#查询文档

    网址:http://www.cnblogs.com/ljhdo/p/4550135.html 这是ElasticSearch 2.4 版本系列的第五篇: ElasticSearch入门 第一篇:Win ...

  5. Elasticsearch在docker下安装运行,ES查询、分词器

    目录 Elasticsearch的一点背景 数据输入 数据输出 集群 集群灾备 集群管理 Docker容器中运行ElasticSearch.Kibana.cerebro ElasticSearch K ...

  6. Elasticsearch教程(4) High Level REST Client API 查询 聚合 分组

    ES High Level REST Client API 查询 聚合 1 准备数据 1.1 插入测试数据 2 Maven引入ES 3 创建Client 4 查询API 4.1 根据id查询单条数据 ...

  7. ElasticSearch入门:使用ES来实现模糊查询功能

    ElasticSearch入门:使用ES来实现模糊查询功能 需求描述 方案设计 代码设计 测试中遇到的问题 总结与心得 需求描述 本文针对在工作中遇到的需求:通过es来实现模糊查询来进行总结:模糊查询 ...

  8. Elasticsearch 实战 - 第四讲:ES 高级查询

    Elasticsearch 实战 - 第四讲:ES 高级查询 Elasticsearch 实战系列文章: 一.高级查询 1.简介 2.结果排序 3.分页查询 4.检索查询 5.关键字查询 6.高亮显示 ...

  9. Mybatis Plus 入门 简单的CRUD 使用详解 条件查询 分页查询 DML操作 MP代码生成器

    Mybatis Plus入门 MP是 MybatisPlus,简称MP,是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变.MP为简化开发.提高效率而生. 它已经封装好了 ...

最新文章

  1. spring mvc DispatcherServlet解读
  2. 电子设计常用总线--QSPI
  3. koa --- 使用Sequelize连接mysql
  4. 显示学生各科成绩和总成绩-面试被问到
  5. [转]带花树,Edmonds's matching algorithm,一般图最大匹配
  6. rds 如何学习数据库_如何将本地数据库迁移到云数据库 RDS 上?
  7. JS与Jquery学习笔记(一)
  8. 数值范围_量比指标怎么看?量比数值的意义
  9. 突发!四川长宁发生6.0级地震
  10. 金蝶K3cloud 7.6注册教程
  11. Unity 崩溃问题解决方法——之一
  12. 使用Selenium爬取淘宝商品
  13. 【艾琪出品】《计算机应用基础》【试题汇总4】
  14. 仙武:开局神级召唤!(二)
  15. 极速办公(excel)身份证中的出生日期如何提取
  16. hsi i均衡化 java_HSI颜色下图像的均衡化MATLAB
  17. Request method ‘GET‘ not supported 405错误辨析总结
  18. 学计算机专业表情包,大学专业恶搞表情包,你中枪了吗
  19. chrome开发者工具使用
  20. Kafka的监控指标

热门文章

  1. idea导入maven项目maven不显示maven Dependencies
  2. JIRA插件ScriptRunner安全漏洞SRPLAT-876
  3. pt100阻值温度c语言,pt100温度传感器阻值,pt100温度与阻值对照表
  4. matlab nan 无色_MATLAB中出现NAN怎么回事
  5. 华硕m80微型计算机,小就不能满足你了?华硕M80迷你台式机评测
  6. 常见NoSQL的对比及使用场景(Redis,memcached,mongodb)
  7. QT编译提示crashed的错误提示
  8. 网狐、6878 您所填写的推荐人不存在或者填写错误,请检查后再次注册
  9. 3.身体各个部位英文表示
  10. android自定义侧滑菜单代码,原生Android 侧滑菜单实践(部分)