《深入理解ElasticSearch》——2.4 批量操作

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介:

本节书摘来自华章计算机《深入理解ElasticSearch》一书中的第2章,第2.4节,作者:[美] 拉斐尔·酷奇(Rafa Ku) 马雷克·罗戈任斯基(Marek Rogoziński)更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.4 批量操作

在本书的几个范例中,我们使用了批量索引格式携带数据,这种方式允许我们高效地发送数据至ElasticSearch。ElasticSearch提供了批量操作功能来读取数据和检索。值得一提的是,这些操作与批量索引类似,允许用户将多个请求归到一组,尽管每个请求可能有各自的目标索引和类型。现在,让我们看看都有哪些批量操作功能。
2.4.1 批量取
批量取(MultiGet)可以通过_mget端点(endpoint)操作,它允许使用一个请求获取多个文档。与实时获取功能类似,文档获取也是实时的,ElasticSearch会返回那些被索引的文档,而不论这些文档可用于搜索还是暂时对查询不可见。请查看下面的操作:


697b2ecaddc8c6aed154c5a514d2c0496cb91949

该操作获取了两个特定的文档,其中索引名和类型在URL中定义。同时在前面的范例中,我们也设置了要获取的字段名(通过使用字段请求参数,即request参数)。ElasticSearch返回了如下形式的文档集:

56ebc524e9537ab775f6b19c312854cd65879a37

前面的范例也可以写成这种更紧凑的形式:

<a href=https://yqfile.alicdn.com/e7b14197e7735946edb8e8b7421706d994bee8cb.png" >

这种形式更便于批量获取具有如下特点的文档集:不同文档有不同的目标索引及类型,或者不同文档返回的字段组合不同。在当前范例中,URL中包含的信息被看作默认值。例如,我们查看下面这个查询:

<a href=https://yqfile.alicdn.com/33e5940762f7097204233393503c5a6130db377b.png" >

该查询返回了ID为1跟3的两个文档,但是第一个文档从索引library_backup中获取,而第二个文档则从索引library中获取(因为URL中定义的索引名为library,因此将它作为默认值)。除此之外,在第一个文档中,我们限制只返回文档的otitle字段。
随着ElasticSearch 1.0的发布,MultiGet API允许用户设置要操作文档的版本。如果文档的版本与请求版本不一致,则ElasticSearch不会执行相应操作。另外,还有两个参数:version,该参数允许用户传递感兴趣的版本信息;version_type,拥有internal和external两个取值。
2.4.2 批量查询
与批量取类似,批量查询允许用户将多个查询请求打包到一组。不过它的分组略有不同,更像批量索引操作。ElasticSearch将输入解析成一行一行的文本,而文本行(每一对)包含了目标索引、其他参数以及查询串等信息。请查看下面这个简单的范例:

e1cd48c2fed3c7db0a8e7077f852c511bf2134c1

正如你所见,查询请求被发送到_msearch端点。URL中的索引名及类型是可选的,并且会作为剩余输入行的默认参数。剩余行可用于存储搜索类型信息(search_type)以及查询执行的路由或提示信息(preference)。因为这些参数并不是必需的,在某些特殊情况下,行中可以包含空对象({})甚至行本身为空。请求的偶数行负责携带真正的查询。现在,让我们看看该请求的查询结果:


<a href=https://yqfile.alicdn.com/012846f35a1ae46b34cbcc02fbd802a33e2c95b5.png" >


<a href=https://yqfile.alicdn.com/add7989f1e251f9de2adf648d7ff6b0d537fea1d.png" >

返回的JSON结果包含了与批量搜索中的查询相对应的响应对象(response object)数组。如前所述,批量查询允许我们将多个独立的查询打包到一个请求中,因此,与之对应的,不同查询的返回文档可能具有不同的结构(本范例省略了)。
请记住,批量搜索就像批量索引一样,请求中不允许包含任何多余的值。每一行都有明确的用途,因此,请确保每行后面都紧随换行符,并且确保用于发送查询的工具没有对发送的数据做任何修改。这就是为什么我们在使用curl命令行时,使用了--data-binary选项而不是-d选项,因为后者并不保留换行符。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
相关文章
|
JSON API 数据格式
学好Elasticsearch系列-索引的批量操作
学好Elasticsearch系列-索引的批量操作
375 1
|
运维 Java 程序员
方法 | Elasticsearch Jest 批量操作bug 根因定位排查
本文介绍Elasticsearch Jest 批量操作bug 根因定位排查的方法。
1731 0
|
索引 Python
Python Elasticsearch批量操作客户端2
Python Elasticsearch批量操作客户端
257 0
|
JSON 测试技术 数据格式
Python Elasticsearch批量操作客户端 1
Python Elasticsearch批量操作客户端
243 0
|
API 索引
【Elasticsearch】-批量操作
在ES中,提供BULK API来批量操作文档,在单个请求调用中执行多个索引或删除文档、更新文档的操作。这减少了开销,可以大大提高索引速度。
448 0
方法 | Elasticsearch Jest 批量操作bug 根因定位排查
1、背景 使用Jest进行批量插入数据的时候,偶尔会出现如下的bug One or more of the items in the Bulk request failed, check BulkResult.getItems() for more information. 起初认为是偶发,就把并发数调小,就再没有关注。
|
分布式计算 Hadoop 索引
|
6月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
3265 0
|
7月前
|
安全 Java Linux
Linux安装Elasticsearch详细教程
Linux安装Elasticsearch详细教程
1251 1
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
457 5

热门文章

最新文章