北京網(wǎng)站制作公司興田德潤(rùn)實(shí)惠軟件開發(fā)培訓(xùn)
作者:Costin Leau
我很高興地宣布,經(jīng)過大約一年的開發(fā),Elasticsearch 查詢語(yǔ)言 (ES|QL) 已準(zhǔn)備好與世界共享,并已登陸 Elasticsearch 存儲(chǔ)庫(kù)。 ES|QL 是 Elasticsearch? 原生的強(qiáng)大聲明性語(yǔ)言,專為可組合性、表現(xiàn)力和速度而設(shè)計(jì)。
為什么要另一種語(yǔ)言?
Elasticsearch 支持多種語(yǔ)言,從古老的 queryDSL 到 EQL、KQL、SQL、Painless、Canvas/Timelion 等,隨著其采用率的增加,受眾及其需求也在增加。 它不再只是 “全文搜索”。 它涉及很多事情,例如日志探索、威脅搜尋、報(bào)告、警報(bào)和自定義處理。
作為我們自己產(chǎn)品的消費(fèi)者,我們想要一種與 Elasticsearch 交互的單一、整合的方式,這種方式可以使全面的計(jì)算功能接近數(shù)據(jù),并且無需昂貴地傳輸?shù)酵獠肯到y(tǒng)進(jìn)行自定義處理。
以下是使用 MySQL 演示 employees 數(shù)據(jù)集(進(jìn)行了大量修改)從測(cè)試套件中獲取的 ES|QL 查詢:
FROM employees
| EVAL hired_year = TO_INTEGER(DATE_FORMAT(hire_date, "YYYY"))
| WHERE hired_year > 1984
| STATS avg_salary = AVG(salary) BY languages
| EVAL avg_salary = ROUND(avg_salary)
| EVAL lang_code = TO_STRING(languages)
| ENRICH languages_policy ON lang_code WITH lang = language_name
| WHERE NOT IS_NULL(lang)
| KEEP avg_salary, lang
| SORT avg_salary ASC
| LIMIT 3
返回類似于以下內(nèi)容的響應(yīng):
{"columns": [{"name": "avg_salary", "type": "double"},{"name": "lang", "type": "keyword"}],"rows": [["43760.0", "Spanish"],["48644.0", "French"],["48832.0", "German"]]
}
單個(gè) ES|QL 查詢執(zhí)行過濾、處理、分組、重命名、排序、查找和列修剪。
查詢從上到下流動(dòng),就像數(shù)據(jù)一樣。 人們可以根據(jù)需要鏈接任意數(shù)量的命令,對(duì)它們重新排序,并使用內(nèi)置函數(shù)或其自身的評(píng)估。 ES|QL 提供了統(tǒng)一的查詢體驗(yàn),比現(xiàn)有的查詢界面更簡(jiǎn)單、更強(qiáng)大,并且將繼續(xù)可用。
專用查詢引擎
ES|QL 不僅僅是一種語(yǔ)言,還是 Elasticsearch 的成熟、專業(yè)的查詢和計(jì)算引擎。 沒有對(duì) QueryDSL 的翻譯或轉(zhuǎn)譯:所有 ES|QL 查詢都經(jīng)過詞法分析和解析、解析和語(yǔ)義分析、驗(yàn)證和優(yōu)化,然后是針對(duì)集群中的數(shù)據(jù)進(jìn)行分布式執(zhí)行的規(guī)劃階??段。 指定的目標(biāo)節(jié)點(diǎn)負(fù)責(zé)本地執(zhí)行,并通過使用 ES|QL 基礎(chǔ)設(shè)施執(zhí)行自己的本地重新規(guī)劃來利用本地?cái)?shù)據(jù)特征。
ES|QL 帶來了一種在設(shè)計(jì)時(shí)考慮到性能的新執(zhí)行引擎,該引擎一次對(duì)塊而不是對(duì)每行進(jìn)行操作,以矢量化和緩存局部性為目標(biāo),并支持專業(yè)化和多線程。 它是一個(gè)獨(dú)立于現(xiàn)有 Elasticsearch 聚合框架的組件,具有不同的性能特征。 在我們當(dāng)前的基準(zhǔn)測(cè)試中,幾個(gè)聚合有了顯著的改進(jìn)(下圖中的值越小越好)。
目標(biāo)是提供不同的功能,例如執(zhí)行多個(gè)鏈?zhǔn)椒纸M:
POST /_query?format=txt
{"query" : """FROM employees
| STATS c = COUNT(emp_no) BY languages
| STATS most_speakers_of_a_lang = MAX(c)"""
}
上面查詢顯示的結(jié)果為:
most_speakers_of_a_lang
-----------------------
21
請(qǐng)留意未來的博文,我們將探討 ES|QL 的功能、設(shè)計(jì)決策和架構(gòu)。
我在哪里可以得到它?
ES|QL 代碼目前在功能分支上可用,并將作為 Elasticsearch 中的技術(shù)預(yù)覽版發(fā)布。 這是一項(xiàng)免費(fèi)功能,可供所有人使用。 每天快照很快就會(huì)可供下載,因此請(qǐng)隨時(shí)查看代碼并自行構(gòu)建。 嘗試一下 ES|QL 并開始探索本地?cái)?shù)據(jù) - 請(qǐng)閱讀此處的文檔。
因?yàn)槲覀冋幱?ES|QL 的早期階段,可能存在一些未解決的問題、障礙,甚至是錯(cuò)誤,請(qǐng)?zhí)岢鰡栴}。 我們迫不及待地想與 Elasticsearch 社區(qū)分享 ES|QL!
我們代表 ES|QL 團(tuán)隊(duì)期待您的反饋!
本文中描述的任何特性或功能的發(fā)布和時(shí)間安排均由 Elastic 自行決定。 當(dāng)前不可用的任何特性或功能可能無法按時(shí)交付或根本無法交付。
原文:https://www.elastic.co/blog/elasticsearch-query-language-esql