elasticsearch SQL:在Elasticsearch中啟用和使用SQL功能

?博主首頁 : 「碼到三十五」 ,同名公眾號 :「碼到三十五」,wx號 : 「liwu0213」
?博主專欄 : <mysql高手> <elasticsearch高手> <源碼解讀> <java核心> <面試攻關>
?博主的話 : 搬的每塊磚,皆為峰巒之基;公眾號搜索「碼到三十五」關注這個愛發技術干貨的coder,一起筑基

目錄

      • 一、基本概念
      • 二、主要功能和優勢
        • Elasticsearch SQL特點
      • 三、啟用和使用SQL功能
      • 四、Elasticsearch SQL的使用
        • 4.1 語法
        • 4.2 sql查詢
        • 4.3 將SQL轉換為DSL
        • 4.4 全文檢索
          • MATCH函數
          • QUERY()
        • 4.5 分組統計
        • 4.6 DESCRIBE
        • 4.7 SHOW TABLES
        • 4.8 查詢支持的函數
      • 五、適用場景及潛在限制

一、基本概念

Elasticsearch是一個基于Lucene的開源、分布式、RESTful搜索引擎。它提供了全文搜索、結構化搜索、分析以及分布式索引等功能。Elasticsearch SQL是Elasticsearch的擴展功能,允許用戶使用SQL語法查詢Elasticsearch數據。通過SQL接口,開發者可以利用熟悉的SQL語言,編寫更直觀、更易懂的查詢,并且避免對大量復雜的原生REST請求的編寫。

在這里插入圖片描述

二、主要功能和優勢

  1. 易用性:使用熟悉的SQL語法,降低了學習成本。
  2. 靈活性:支持復雜的查詢和聚合操作。
  3. 性能:Elasticsearch本身的分布式架構和高效查詢引擎保證了查詢性能。
  4. 集成性:通過JDBC驅動,可以與各種SQL工具和應用程序集成。
Elasticsearch SQL特點

1. 本地集成
Elasticsearch SQL是專門為Elasticsearch構建的。每個SQL查詢都根據底層存儲對相關節點有效執行。
2. 沒有額外的要求
不依賴其他的硬件、進程、運行時庫,Elasticsearch SQL可以直接運行在Elasticsearch集群上
3. 輕量且高效
像SQL那樣簡潔、高效地完成查詢

三、啟用和使用SQL功能

要在Elasticsearch中啟用和使用SQL功能,你需要安裝X-Pack插件。X-Pack插件包含了許多擴展功能,包括SQL接口。安裝完成后,需要在Elasticsearch配置文件中啟用X-Pack插件,并重啟Elasticsearch服務。

# 安裝X-Pack插件
./bin/elasticsearch-plugin install x-pack# 啟用X-Pack插件
# 在elasticsearch.yml配置文件中添加以下配置
xpack.sql.enabled: true

在啟用SQL功能后,你可以通過REST API、命令行工具或JDBC驅動來執行SQL查詢。Elasticsearch SQL的語法與標準的SQL語法非常相似,支持SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY等常見SQL語句。

四、Elasticsearch SQL的使用

4.1 語法
SELECT select_expr [, ...]
[ FROM table_name ]
[ WHERE condition ]
[ GROUP BY grouping_element [, ...] ]
[ HAVING condition]
[ ORDER BY expression [ ASC | DESC ] [, ...] ]
[ LIMIT [ count ] ]
[ PIVOT ( aggregation_expr FOR column IN ( value [ [ AS ] alias ] [, ...] ) ) ]

在這里插入圖片描述
目前FROM只支持單表

4.2 sql查詢
# 使用curl命令查詢
curl -X GET "localhost:9200/_sql?format=txt" -H 'Content-Type: application/json' -d'
{"query": "SELECT * FROM indexName WHERE age > 30"
}'

format=txt 是指查詢返回結果的數據格式

在這里插入圖片描述

4.3 將SQL轉換為DSL
GET /_sql/translate
{
"query":"SELECT * FROM es_order limit 1"
}

結果如下:

{"size" : 1,"_source" : {"includes" : ["id","orderNo","orderTime"],"excludes" : [ ]},"docvalue_fields" : [{"field" : "id"},{"field" : "orderNo"},{"field" : "orderTime"}],"sort" : [{"_doc" : {"order" : "asc"}}]
}
4.4 全文檢索

當使用MATCH或QUERY函數時,會啟用全文搜索功能,SCORE函數可以用來統計搜索評分。

MATCH函數
MATCH(field_exp,   constant_exp [, options]) 
field_exp:匹配字段
constant_exp:匹配常量表達式

用法:

GET /_sql?format=txt
{
"query":"select * from es_order where MATCH(address, '武漢') or MATCH(productType, '手機') limit 10"
}
QUERY()

使用QUERY函數查詢address中包含Street的記錄。

POST /_sql?format=txt
{
"query":"select id,orderNo,name,address,SCORE()  from es_order where QUERY('address: 武漢') limit 10"
}
4.5 分組統計
GET /_sql?format=txt
{
"query":"select city, count(*) as age_cnt from es_order group by city"
}

這種方式要更加直觀、簡潔。

HAVING
我們可以使用HAVING語句對分組數據進行二次篩選,比如篩選分組記錄數量大于1000的信息,查詢語句如下。

POST /_sql?format=txt
{"query":"select city, count(*) as age_cnt from es_order group by city having count(*) > 1000"
}

ORDER BY
使用ORDER BY語句對數據進行排序,比如按照統計字段從高到低排序,查詢語句如下。

POST /_sql?format=txt
{"query":"select city, count(*) cc as age_cnt from es_order group by city having count(*) > 1000 order by cc "
}

注意: 目前Elasticsearch SQL還存在一些限制。例如:不支持JOIN、不支持較復雜的子查詢。所以,有一些相對復雜一些的功能,還得借助于DSL方式來實現

4.6 DESCRIBE

使用DESCRIBE語句查看索引中有哪些字段,比如查看es_order索引的字段,查詢語句如下。

POST /_sql?format=txt
{"query": "DESCRIBE es_order"
}
4.7 SHOW TABLES

使用SHOW TABLES查看所有的索引

POST /_sql?format=txt
{"query": "SHOW TABLES"
}
4.8 查詢支持的函數

使用SQL查詢ES中的數據,不僅可以使用一些SQL中的函數,還可以使用一些ES中特有的函數。SHOW FUNCTIONS語句查看所有支持的函數,比如搜索所有帶有DATE字段的函數可以使用如下語句。

POST /_sql?format=txt
{"query": "SHOW FUNCTIONS LIKE '%DATE%'"
}

在這里插入圖片描述

五、適用場景及潛在限制

Elasticsearch SQL適用于需要對大量數據進行復雜查詢的場景,如數據分析、報表生成、數據探索等。然而,由于SQL查詢的復雜性,它可能不適用于所有場景。例如,對于需要高并發、低延遲的場景,原生REST查詢可能更合適。

此外,雖然Elasticsearch SQL提供了SQL接口,但它并不是完全兼容SQL。例如,它不支持所有的SQL函數和特性。因此,在使用Elasticsearch SQL時,需要了解它的限制,并根據實際情況選擇使用。

總結來說,Elasticsearch SQL提供了一種直觀、易用的方式查詢Elasticsearch數據。它允許開發者利用熟悉的SQL語言,編寫更直觀、更易懂的查詢,并避免對大量復雜的原生REST請求的編寫。然而,它的適用場景和性能特點需要在實際使用中仔細考慮。


關注公眾號獲取更多技術干貨 !

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42612.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42612.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42612.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務注冊Eureka

目錄 一、背景 1、概念 2、CAP 理論 3、常見的注冊中心 二、Eureka 三、搭建 Eureka Server 1、搭建注冊中心 四、服務注冊 五、服務發現 六、Eureka 和 Zooper 的區別 一、背景 1、概念 遠程調用就類似于一種通信 例如&#xff1a;當游客與景區之間進行通信&…

代碼隨想錄算法訓練營第六十三天 | prim算法、kruskal算法、復習

53. 尋寶 — prim算法 題目鏈接&#xff1a;https://kamacoder.com/problempage.php?pid1053 文檔講解&#xff1a;https://programmercarl.com/kamacoder/0053.%E5%AF%BB%E5%AE%9D-prim.html 思路 本題是最小生成樹的模板題&#xff0c;最小生成樹可以使用 prim算法&#xf…

bash shell 重定向輸入和輸出

shell 提供的重定向操作符 操作符作用>將命令的輸出發到一個文件中如果文件存在&#xff0c;則新的文件數據會覆蓋已經存在的文件>>將命令的輸出追加到一有文件如果文件不存在&#xff0c;則創建新的文件<將文件內容重定向到命令<<內聯輸入重定向(inline in…

Xubuntu24.04之設置高性能模式兩種方式(二百六十一)

簡介: CSDN博客專家,專注Android/Linux系統,分享多mic語音方案、音視頻、編解碼等技術,與大家一起成長! 優質專欄:Audio工程師進階系列【原創干貨持續更新中……】?? 優質專欄:多媒體系統工程師系列【原創干貨持續更新中……】?? 優質視頻課程:AAOS車載系統+AOSP…

蒼穹外賣--新增員工

代碼開發 package com.sky.controller.admin;import com.sky.constant.JwtClaimsConstant; import com.sky.dto.EmployeeDTO; import com.sky.dto.EmployeeLoginDTO; import com.sky.entity.Employee; import com.sky.properties.JwtProperties; import com.sky.result.Result…

Springboot各個版本維護時間

Springboot各個版本維護時間

MQTT教程--服務器使用EMQX和客戶端使用MQTTX

什么是MQTT MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一種輕量級、基于發布-訂閱模式的消息傳輸協議&#xff0c;適用于資源受限的設備和低帶寬、高延遲或不穩定的網絡環境。它在物聯網應用中廣受歡迎&#xff0c;能夠實現傳感器、執行器和其它設備…

【Linux】shell基礎知識點(updating)

1.輸出重定向2.多命令批量執行&#xff08;; 、&&、 ||&#xff09;3.腳本不同方式執行的區別&#xff08;source、bash、sh、./&#xff09;4.理解環境變量5.export6.引號的使用last.命令相關 1.輸出重定向 3種數據流&#xff1a; stdin&#xff1a;標準輸入&#xf…

jmeter持續學習之----性能初級一些概念和指標

服務端為什么要進行性能測試 大量用戶下&#xff0c;系統能否穩定運行&#xff08;比較多&#xff09; 用于硬件服務器的選型 用于軟件技術的選型 性能測試關注的點 用戶角度:響應時間 資源占用:并發用戶數,TPS,資源占用(cpu,內存,JVM) 性能測試策略 基準測試:單用戶測試,對…

去了字節跳動,才知道年薪40W的測試有這么多?

最近脈脈職言區有一條討論火了&#xff1a; 哪家互聯網公司薪資最‘厲害’&#xff1f; 下面的評論多為字節跳動&#xff0c;還炸出了很多年薪40W的測試工程師 我只想問一句&#xff0c;現在的測試都這么有錢了嗎&#xff1f; 前幾天還有朋友說&#xff0c;從騰訊跳槽去了字節&…

8.8.8.8 IP地址的作用

在跟著韋東山老師的學習手冊中看見了關于8.8.8.8 IP用于檢測網絡狀態&#xff0c;然后搜索了關于此IP的相關作用如下&#xff1a; 公共DNS服務&#xff1a;8.8.8.8是Google提供的兩個公共DNS服務器地址之一&#xff08;另一個是8.8.4.4&#xff09;。DNS&#xff08;域名系統&a…

代碼隨想錄訓練營第三十天 452用最少數量的箭引爆氣球 435無重疊區間 763劃分字母區間

第一題&#xff1a; 原題鏈接&#xff1a;452. 用最少數量的箭引爆氣球 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;先根據每個元素的第一個值進行排序&#xff0c;然后從第一個元素開始遍歷&#xff0c;這里要注意我們初始化結果值的時候直接初始化為1&#x…

強化基石,引領未來:完善配套設施與提升服務水平

完善配套設施與提升服務水平對于產業園運營具有重要意義。它們不僅能夠提升園區的硬件環境和整體形象&#xff0c;增強園區的吸引力和競爭力&#xff1b;還能夠優化營商環境&#xff0c;降低企業運營成本&#xff0c;提高運營效率&#xff1b;同時推動園區創新&#xff0c;形成…

基于Java技術的網吧管理系統

你好呀&#xff0c;我是計算機學姐碼農小野&#xff01;如果有相關需求&#xff0c;可以私信聯系我。 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;Java技術&#xff0c;B/S結構 工具&#xff1a;MyEclipse&#xff0c;MySQL 系統展示 首頁 個人中…

PDF轉Markdown的開源工具解析

Marker&#xff1a;PDF轉Markdown的開源工具解析 Marker是一個由VikParuchuri在GitHub上開發的開源項目&#xff0c;其核心功能是將PDF文件轉換為Markdown格式。以下是對Marker項目的詳細解析&#xff1a; 項目概述&#xff1a; 項目鏈接&#xff1a;https://github.com/VikP…

【技術追蹤】DiffuMatting:使用摳圖級別注釋合成任意對象(ECCV-2024)

萬物生&#xff1a;Diffusion與綠幕摳圖&#xff0c;影視領域的福音~ 論文&#xff1a;DiffuMatting: Synthesizing Arbitrary Objects with Matting-level Annotation 代碼&#xff1a;https://github.com/HUuxiaobin/DiffuMatting &#xff08;即將開源&#xff09; 0、摘要 …

2024年06月CCF-GESP編程能力等級認證C++編程一級真題解析

本文收錄于專欄《C等級認證CCF-GESP真題解析》&#xff0c;專欄總目錄&#xff1a;點這里。訂閱后可閱讀專欄內所有文章。 一、單選題&#xff08;每題 2 分&#xff0c;共 30 分&#xff09; 第 1 題 在C中&#xff0c;下列不可做變量的是( )。 A. five-Star B. five_star C…

(補充):java各種進制和文本、圖像、音頻在計算機中的存儲方式

文章目錄 前言一、進制1 逢幾進一2 常見進制在java中的表示3 進制中的轉換(1)任意進制轉十進制(2)十進制轉其他進制二、計算機中的存儲1 計算機的存儲規則(文本數據)(1)ASCII碼表(2)編碼規則的發展演化2 計算機的存儲規則(圖片數據)(1)分辨率、像素(2)黑白圖與灰度…

Knife4j的介紹與使用

目錄 一、簡單介紹1.1 簡介1.2 主要特點和功能&#xff1a; 二、使用步驟&#xff1a;2.1 添加依賴&#xff1a;2.2 yml數據源配置2.3 創建knife4j配置類2.4 注解的作用 最后 一、簡單介紹 1.1 簡介 Knife4j 是一款基于Swagger的開源文檔管理工具&#xff0c;主要用于生成和管…

Java客戶端調用SOAP方式的WebService服務實現方式分析

簡介 在多系統交互中&#xff0c;有時候需要以Java作為客戶端來調用SOAP方式的WebService服務&#xff0c;本文通過分析不同的調用方式&#xff0c;以Demo的形式&#xff0c;幫助讀者在生產實踐中選擇合適的調用方式。 本文JDK環境為JDK17。 結論 推薦使用Axis2或者Jaxws&#…