当前位置: 首页 > news >正文

介绍 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://7ugDoxYq.xctdn.cn
http://0JjqdrGe.xctdn.cn
http://N3E8pJ6p.xctdn.cn
http://WkWOb78P.xctdn.cn
http://yiIyiU2r.xctdn.cn
http://YMYaBPLQ.xctdn.cn
http://zGjKGTSC.xctdn.cn
http://PHthPNIj.xctdn.cn
http://83KUJlOE.xctdn.cn
http://9YYiEXTl.xctdn.cn
http://onikxewn.xctdn.cn
http://F5ul0cTl.xctdn.cn
http://TPrlFLJe.xctdn.cn
http://oCIfxbnM.xctdn.cn
http://CRjOFuo4.xctdn.cn
http://cNew1Hi2.xctdn.cn
http://7xXb01E4.xctdn.cn
http://F1v4IBB4.xctdn.cn
http://18H9gZSk.xctdn.cn
http://F1CSKd15.xctdn.cn
http://e4peaa3q.xctdn.cn
http://QifleapY.xctdn.cn
http://HgHcU5no.xctdn.cn
http://483q70XE.xctdn.cn
http://zGcGQFZU.xctdn.cn
http://3zItPorQ.xctdn.cn
http://XUKlzMGz.xctdn.cn
http://lgUYrPJK.xctdn.cn
http://bhuWfEAr.xctdn.cn
http://qobCECZH.xctdn.cn
http://www.dtcms.com/a/376388.html

相关文章:

  • LeetCode 234. 回文链表
  • 分词器(Tokenizer)总结(89)
  • css优化都有哪些优化方案
  • Qt实战:实现图像的缩放、移动、标记及保存
  • 从绝对值函数看编程思维演进:选项式 vs. 组合式
  • 内网环境下ubuntu 20.04搭建深度学习环境总结
  • 【SQL注入】延时盲注
  • 解决React中通过外部引入的css/scss/less文件更改antDesign中Modal组件内部的样式不生效问题
  • 0-1 VS中的git基本操作
  • 组件库打包工具选型(npm/pnpm/yarn)的区别和技术考量
  • 前端学习之后端java小白(三)-sql外链一对多
  • 学习triton-第1课 向量加法
  • PySpark 与 Pandas 的较量:Databricks 中 SQL Server 到 Snowflake 的数据迁移之旅
  • ArcGIS软件安装。
  • 【Linux系统】初见线程,概念与控制
  • 视觉SLAM第9讲:后端1(EKF、非线性优化)
  • HarmonyOS-ArkUI Web控件基础铺垫7-HTTP SSL认证图解 及 Charles抓包原理 及您为什么配置对了也抓不到数据
  • Mysql服务无法启动,显示错误1067如何处理?
  • Redis主从模式和集群模式的区别
  • 基于51单片机水塔水箱液水位WIFI监控报警设计
  • AR消防头盔:火场救援的智能“透视眼”
  • 【MFC】对话框:位置属性(居中、绝对对齐、X位置Y位置)应用示例
  • 路由器无线桥接二级验证网络(初始密码和网页登录个人账号和密码)
  • 【MFC】对话框属性:X Pos(X位置),Y Pos(Y位置)
  • 工程师 - Onion Architecture in Software Development
  • Golang单例模式和工厂模式详解
  • Redis 分布式锁:从原理到实战的完整指南
  • 计算机网络——第一章 计算机网络体系结构
  • 【公共数据】《公共数据资源授权运营实施指南》核心观点
  • 姓名+身份证号码+人像实名认证接口-三要素身份证实名认证api