介绍 Python Elasticsearch Client 的 ES|QL 查询构建器

作者:来自 Elastic Miguel Grinberg

学习如何使用 ES|QL 查询构建器,这是一个新的 Python Elasticsearch client 功能,可以更轻松地使用熟悉的 Python 语法构建 ES|QL 查询。

想要获得 Elastic 认证吗?快来了解下一期 Elasticsearch Engineer 培训什么时候开始!

Elasticsearch 拥有大量新功能,可以帮助你根据使用场景构建最佳搜索解决方案。深入学习我们的示例笔记本,了解更多内容,开始免费云试用,或者立即在本地机器上尝试 Elastic。


我们很高兴地宣布 Python Elasticsearch client 的新 ES|QL 查询构建器模块。有了它,你可以使用熟悉的 Python 语法为 ES|QL 引擎构建查询。

介绍

ES|QL 是一种专门为数据分析设计的查询语言。新的 Python 查询构建器让你可以在 Python 应用中轻松构建和运行 ES|QL 查询。

查询构建器功能在当前版本的 Python Elasticsearch client 中已经可用,从 8.19 版本开始。这个包叫做 elasticsearch,可以用你喜欢的 Python 安装工具安装。例如,下面是使用 pip 安装的方法:

pip install elasticsearch

如果你的应用使用的 Python Elasticsearch client 版本低于 8.19,那么你需要升级它才能使用查询构建器。

在 Python 中创建 ES|QL 查询

下面的示例使用 Python 查询构建器创建一个 ES|QL 查询对象:

from elasticsearch.esql import ESQLquery = (ESQL.from_("employees").keep("first_name", "last_name", "height").eval(height_feet="height * 3.281",height_cm="height * 100",).sort("date_hired DESC").limit(3)
)

当打印或转换为字符串时,该对象会生成一个标准的 ES|QL 查询:

>>> print(query)
FROM employees
| KEEP first_name, last_name, height
| EVAL height_feet = height * 3.281, height_cm = height * 100
| SORT date_hired DESC
| LIMIT 3

你可以将 query 对象直接传递给 Python Elasticsearch client 的 ES|QL 端点来执行查询:

from elasticsearch import Elasticsearch
client = Elasticsearch(hosts=[os.environ['ELASTICSEARCH_URL']])
response = client.esql.query(query=str(query))

响应对象包含所有返回列的描述以及结果行:

>>> from pprint import pprint
>>> pprint(response.body)
{'columns': [{'name': 'first_name', 'type': 'text'},{'name': 'last_name', 'type': 'text'},{'name': 'height', 'type': 'double'},{'name': 'height_feet', 'type': 'double'},{'name': 'height_cm', 'type': 'double'}],'is_partial': False,'took': 11,'values': [['Adrian', 'Wells', 2.424, 7.953144, 242.4],['Aaron', 'Gonzalez', 1.584, 5.1971, 158.4],['Miranda', 'Kramer', 1.55, 5.08555, 155]]}

Python ES|QL 模块包含所有 ES|QL 命令、函数和操作符的 Python 封装。下一个示例展示了一个使用 LENGTH 函数和条件子句的更高级查询:

from elasticsearch.esql import ESQL, functionsquery = (ESQL.from_("employees").keep("first_name", "last_name", "height").where(functions.length(E("first_name")) < 4)
)

这是生成的 ES|QL 查询:

>>> print(query)
FROM employees
| KEEP first_name, last_name, height
| WHERE LENGTH(first_name) < 4

想尝试这个功能吗?可以查看 Python Elasticsearch client 文档中关于创建 ES|QL 查询的内容以获取更多信息。

使用 DSL 模块的 ES|QL 查询

ES|QL 查询构建器也集成在 Python Elasticsearch client 的 DSL 模块中。所有文档类都包含 esql_from() 便捷方法来创建基本的 ES|QL 查询。例如,假设已定义 Employee 文档类,可以创建一个查询以返回所有员工(默认情况下 ES|QL 允许的最大结果数为 1000),如下所示:

query = Employee.esql_from()

这个查询对象可以根据需要与额外的 ES|QL 命令链式调用。为了减少查询出错的可能,每当需要引用字段时,可以使用文档类的类属性,而不是使用字符串:

query = (Employee.esql_from().where(functions.length(Employee.first_name) < 4).sort(Employee.date_hired.desc()).limit(100)
)

如果需要,该查询可以像上面一样进行评估,但文档类提供了 esql_execute() 方法,该方法使用 DSL 模块的管理连接运行查询。此方法还会将原始结果转换为返回文档实例的迭代器:

for emp in Employee.esql_execute(query):print(f"{emp.first_name} {emp.last_name} is {emp.height:.2f}m tall")

如果你想了解更多关于 ES|QL 查询构建器与 DSL 模块集成的信息,可以查看我们的 Elastic 文档。

结论

我们希望你在下次需要在 Python 应用中使用 ES|QL 时尝试新的 ES|QL 查询构建器。请注意,该功能目前以技术预览形式发布。如果你有任何问题、反馈或遇到问题,请在 GitHub 上的 Python Elasticsearch client 仓库中创建一个 issue。

原文:https://www.elastic.co/search-labs/blog/esql-query-builder-python-elasticsearch-client

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/922169.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/922169.shtml

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

相关文章

三坐标测量仪:高精度测量内径检测手段及其实际运用

在工业制造领域中&#xff0c;内径尺寸的精准度直接关系到产品的装配性能、运行稳定性乃至使用寿命。传统检测方法如卡尺、内径千分尺等难以满足高精度、复杂结构件的需求。三坐标测量仪技术的出现&#xff0c;打破了这一困境&#xff0c;成为当前工业领域实现高精度内径检测的…

DIPMARK:一种隐蔽、高效且具备鲁棒性的大语言模型水印技术

摘要水印技术为通过在数据中嵌入隐蔽信息来保障数据安全提供了一种很有前景的方法。该领域的一个首要挑战在于&#xff0c;在水印嵌入过程中保持原始数据的分布。我们的研究拓展并优化了现有的水印框架&#xff0c;着重强调了保持分布&#xff08;DiP&#xff09;水印的重要性。…

IMU传感器价格与高精度惯性导航系统供应商分析

本段将对IMU传感器价格及高精度惯性导航系统的市场情况进行概览。IMU传感器作为惯性导航的重要组成部分&#xff0c;其价格水平受到技术、需求和供应商竞争等多重因素的影响。随着无人机、自动驾驶车辆等新兴应用场景的兴起&#xff0c;IMU传感器的市场需求逐渐攀升。这不仅带动…

3-9〔OSCP ◈ 研记〕❘ WEB应用攻击▸利用REST API提权

郑重声明&#xff1a; 本文所有安全知识与技术&#xff0c;仅用于探讨、研究及学习&#xff0c;严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任&#xff0c;本人不承担任何责任。 如需转载&#xff0c;请注明出处且不得用于商业盈利。 …

UE5 基础应用 —— 07 - 角色蓝图 简单使用

目录 一、角色蓝图 1.1 Pawn / Character 1.2 角色基类 1.3 角色基类设置 1.3.1 基础设置 1.3.2 角色移动和相机旋转 1.3.3 角色移动 —— 锁定视角 1.3.4 角色跳跃 1.4 角色派生类设置 1.4.1 添加动画蓝图 一、角色蓝图 1.1 Pawn / Character Pawn / Character 有什…

流畅的Python(二) 丰富的序列

流畅的Python 第二章&#xff1a;丰富的序列 摘要&#xff1a;在日常Python开发中&#xff0c;我们频繁与各种数据结构打交道&#xff0c;其中序列类型&#xff08;如列表、元组、字符串&#xff09;是基石。然而&#xff0c;你是否曾因对它们理解不深&#xff0c;而在性能优化…

嵌入式 - ARM6

一、按键1. 初始化key.c手册C32 - IOMUXC1. 复用功能配置IOMUXC_SW_MUX_CTL_PAD_UART1_CTS_B: 低四位&#xff08;0101&#xff09; IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18, 0);SION(信号监控)1: 0 //0 DISABLED — Input Path is determined by functionality MUX_…

菊水PBZ电源在蓄电池充放电测试中的应用探讨

通过高速双极性电源PBZ系列进行蓄电池恒流&#xff0c;恒压充电的方法 对于仪器厂商来说&#xff0c;要求“请按照使用说明书使用”是产品的使用方针&#xff0c;或者说是正确用法。但是&#xff0c;作为具有代表性的通用产品&#xff0c;直流电源的实际使用方法可谓五花八门&…

Zephyr嵌入式实时操作系统安装配置

Zephyr简介 Zephyr 是一款由 Linux 基金会 托管的开源实时操作系统(RTOS),专为资源受限的嵌入式设备(从微控制器到小型边缘计算节点)设计,广泛应用于物联网(IoT)、工业自动化、消费电子、医疗设备、汽车电子等领域。其核心优势在于轻量级、高可配置性和对多架构硬件的广…

Linux系统 SELinux 安全管理与故障排查

一、SELinux 安全上下文管理1. SELinux 简介SELinux&#xff08;Security-Enhanced Linux&#xff09;是 Linux 内核的强制访问控制&#xff08;MAC&#xff09;安全子系统&#xff0c;通过基于标签的访问控制实现细粒度权限管理&#xff0c;遵循最小权限原则。SELinux 有三种工…

解密完全二叉树顺序存储之堆结构

前言:各位老铁好&#xff0c;在前面博客中&#xff0c;笔者分享了有关二叉树的博客&#xff0c;在那篇博客中&#xff0c;笔者讲到了完全二叉树的存储结构中有两种存储方式&#xff0c;一种是顺序存储&#xff0c;一种是链式存储&#xff0c;链式存储笔者已经带各位老铁实现过了…

通过针刺!鹏辉能源移动电源电池革新之作 Secu 系列:不燃电解液加持,充电宝安全新选择

9月11日&#xff0c;鹏辉能源对外发布新一代移动电源高安全电池Secu系列。该产品通过采用不燃的电解液破解移动电源产品安全难题&#xff0c;直击当下移动电源安全事故频发的行业痛点&#xff0c;为移动电源行业带来更安全、更可靠的半固态电池解决方案。数字化时代&#xff0c…

软件定义汽车(SDV)与区域电子电气架构(Zonal EEA)的技术革新

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

在 Docker Compose 中解决文件权限不足的问题

在使用 Docker 和 Docker Compose 构建应用时&#xff0c;由于容器中的文件权限不足而导致某些容器可能无法访问宿主机上的文件&#xff0c;或者容器内的文件系统无法正确读取或写入文件。问题描述在我的项目中&#xff0c;我使用 Docker Compose 来启动多个服务&#xff0c;并…

认知语义学对人工智能自然语言处理的深层语义分析:理论启示与实践路径

摘要随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;已成为其核心驱动力之一。然而&#xff0c;尽管以大型语言模型&#xff08;LLMs&#xff09;为代表的现代NLP系统在处理语言任务上取得了前所未有的成功&#xf…

React19 中的交互操作

需要安装的库 antd-mobile、use-immer在App.jsx 中引入组件 Actionimport "./App.css" import Action from "./pages/action" function App() {return (<><Action></Action></>) }export default Appaction.jsx 组件import LearnI…

仓颉编程语言青少年基础教程:数组类型

仓颉编程语言青少年基础教程&#xff1a;数组类型 数组本质上是有序、同类型数据的集合容器&#xff0c;其核心作用是高效组织、访问和处理批量数据&#xff0c;同时结合语言特性&#xff0c;为开发者提供简洁、高性能的数据管理方式。例如&#xff1a; main() { let v1: …

C++微基础蓝桥杯之旅9.9-9.12

这里主要还是强制类型转换的使用//打印字符ASCII码值 //输入一个除空格以外的可见字符 //输出其ASCII值--十进制整数 #include <iostream> using namespace std;int main() {char ch;cin >> ch;//字符cout << (int)ch << endl; return 0; }//打印字符…

逻辑漏洞(上)- 突破功能限制漏洞、用户信息泄露(逻辑漏洞入门)

漏洞介绍&#xff1a; 在网络攻防实战中&#xff0c;常会遇到各种前端限制&#xff0c;绕过限制的方法大多是改包或者修改前端代码来实现的。 漏洞环境&#xff1a;docker docker-compose up -d 启动环境后&#xff1a;访问 http://127.0.0.1:8983/web/# 发现查询按钮是无法使用…

tsv文件简介

初步了解tsv文件在很多 OCR&#xff08;光学字符识别&#xff09;项目中&#xff0c;.tsv文件是标准的训练数据标注文件&#xff0c;主要用于存储 “图像路径 - 对应文本标签” 的映射关系&#xff0c;同时可能包含图像尺寸、文本长度等辅助信息&#xff0c;方便模型读取训练数…