介紹 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
英文地址,請注明出處:http://en.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;方便模型讀取訓練數…