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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介:

本节书摘来自华章计算机《深入理解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选项,因为后者并不保留换行符。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
JSON API 数据格式
学好Elasticsearch系列-索引的批量操作
学好Elasticsearch系列-索引的批量操作
243 1
|
索引 Python
Python Elasticsearch批量操作客户端2
Python Elasticsearch批量操作客户端
130 0
|
JSON 测试技术 数据格式
Python Elasticsearch批量操作客户端 1
Python Elasticsearch批量操作客户端
125 0
|
运维 Java 程序员
方法 | Elasticsearch Jest 批量操作bug 根因定位排查
本文介绍Elasticsearch Jest 批量操作bug 根因定位排查的方法。
1616 0
|
API 索引
【Elasticsearch】-批量操作
在ES中,提供BULK API来批量操作文档,在单个请求调用中执行多个索引或删除文档、更新文档的操作。这减少了开销,可以大大提高索引速度。
308 0
|
API
方法 | Elasticsearch Jest 批量操作bug 根因定位排查
1、背景 使用Jest进行批量插入数据的时候,偶尔会出现如下的bug One or more of the items in the Bulk request failed, check BulkResult.getItems() for more information. 起初认为是偶发,就把并发数调小,就再没有关注。
657 0
|
分布式计算 Hadoop 索引
|
2月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
68 5
|
3月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
273 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
4月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo