網(wǎng)站開(kāi)發(fā)中怎么樣對(duì)接接口新媒體運(yùn)營(yíng)工作是什么
?博主專(zhuān)欄 : <mysql高手> <elasticsearch高手> <源碼解讀> <java核心> <面試攻關(guān)>
?博主的話 : 搬的每塊磚,皆為峰巒之基;公眾號(hào)搜索「碼到三十五」關(guān)注這個(gè)愛(ài)發(fā)技術(shù)干貨的coder,一起筑基
目錄
- 一、基本概念
- 二、主要功能和優(yōu)勢(shì)
- Elasticsearch SQL特點(diǎn)
- 三、啟用和使用SQL功能
- 四、Elasticsearch SQL的使用
- 4.1 語(yǔ)法
- 4.2 sql查詢
- 4.3 將SQL轉(zhuǎn)換為DSL
- 4.4 全文檢索
- MATCH函數(shù)
- QUERY()
- 4.5 分組統(tǒng)計(jì)
- 4.6 DESCRIBE
- 4.7 SHOW TABLES
- 4.8 查詢支持的函數(shù)
- 五、適用場(chǎng)景及潛在限制
一、基本概念
Elasticsearch是一個(gè)基于Lucene的開(kāi)源、分布式、RESTful搜索引擎。它提供了全文搜索、結(jié)構(gòu)化搜索、分析以及分布式索引等功能。Elasticsearch SQL是Elasticsearch的擴(kuò)展功能,允許用戶使用SQL語(yǔ)法查詢Elasticsearch數(shù)據(jù)。通過(guò)SQL接口,開(kāi)發(fā)者可以利用熟悉的SQL語(yǔ)言,編寫(xiě)更直觀、更易懂的查詢,并且避免對(duì)大量復(fù)雜的原生REST請(qǐng)求的編寫(xiě)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-EupnvsbF-1721093861434)(https://i-blog.csdnimg.cn/direct/9e79724515584560a3ec575d33f54904.jpeg#pic_center)]
二、主要功能和優(yōu)勢(shì)
- 易用性:使用熟悉的SQL語(yǔ)法,降低了學(xué)習(xí)成本。
- 靈活性:支持復(fù)雜的查詢和聚合操作。
- 性能:Elasticsearch本身的分布式架構(gòu)和高效查詢引擎保證了查詢性能。
- 集成性:通過(guò)JDBC驅(qū)動(dòng),可以與各種SQL工具和應(yīng)用程序集成。
Elasticsearch SQL特點(diǎn)
1. 本地集成
Elasticsearch SQL是專(zhuān)門(mén)為Elasticsearch構(gòu)建的。每個(gè)SQL查詢都根據(jù)底層存儲(chǔ)對(duì)相關(guān)節(jié)點(diǎn)有效執(zhí)行。
2. 沒(méi)有額外的要求
不依賴其他的硬件、進(jìn)程、運(yùn)行時(shí)庫(kù),Elasticsearch SQL可以直接運(yùn)行在Elasticsearch集群上
3. 輕量且高效
像SQL那樣簡(jiǎn)潔、高效地完成查詢
三、啟用和使用SQL功能
要在Elasticsearch中啟用和使用SQL功能,你需要安裝X-Pack插件。X-Pack插件包含了許多擴(kuò)展功能,包括SQL接口。安裝完成后,需要在Elasticsearch配置文件中啟用X-Pack插件,并重啟Elasticsearch服務(wù)。
# 安裝X-Pack插件
./bin/elasticsearch-plugin install x-pack# 啟用X-Pack插件
# 在elasticsearch.yml配置文件中添加以下配置
xpack.sql.enabled: true
在啟用SQL功能后,你可以通過(guò)REST API、命令行工具或JDBC驅(qū)動(dòng)來(lái)執(zhí)行SQL查詢。Elasticsearch SQL的語(yǔ)法與標(biāo)準(zhǔn)的SQL語(yǔ)法非常相似,支持SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY等常見(jiàn)SQL語(yǔ)句。
四、Elasticsearch SQL的使用
4.1 語(yǔ)法
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 ] [, ...] ) ) ]
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-ZN8DC9ek-1721093861436)(https://i-blog.csdnimg.cn/direct/9dd378cca9294abcb6cecd3b49c3114a.png)]
目前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 是指查詢返回結(jié)果的數(shù)據(jù)格式
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-i4AKhlnx-1721093861437)(https://i-blog.csdnimg.cn/direct/287895433292497ca6392411edf7ddff.png)]
4.3 將SQL轉(zhuǎn)換為DSL
GET /_sql/translate
{
"query":"SELECT * FROM es_order limit 1"
}
結(jié)果如下:
{"size" : 1,"_source" : {"includes" : ["id","orderNo","orderTime"],"excludes" : [ ]},"docvalue_fields" : [{"field" : "id"},{"field" : "orderNo"},{"field" : "orderTime"}],"sort" : [{"_doc" : {"order" : "asc"}}]
}
4.4 全文檢索
當(dāng)使用MATCH或QUERY函數(shù)時(shí),會(huì)啟用全文搜索功能,SCORE函數(shù)可以用來(lái)統(tǒng)計(jì)搜索評(píng)分。
MATCH函數(shù)
MATCH(field_exp, constant_exp [, options])
field_exp:匹配字段
constant_exp:匹配常量表達(dá)式
用法:
GET /_sql?format=txt
{
"query":"select * from es_order where MATCH(address, '武漢') or MATCH(productType, '手機(jī)') limit 10"
}
QUERY()
使用QUERY函數(shù)查詢address中包含Street的記錄。
POST /_sql?format=txt
{
"query":"select id,orderNo,name,address,SCORE() from es_order where QUERY('address: 武漢') limit 10"
}
4.5 分組統(tǒng)計(jì)
GET /_sql?format=txt
{
"query":"select city, count(*) as age_cnt from es_order group by city"
}
這種方式要更加直觀、簡(jiǎn)潔。
HAVING
我們可以使用HAVING語(yǔ)句對(duì)分組數(shù)據(jù)進(jìn)行二次篩選,比如篩選分組記錄數(shù)量大于1000的信息,查詢語(yǔ)句如下。
POST /_sql?format=txt
{"query":"select city, count(*) as age_cnt from es_order group by city having count(*) > 1000"
}
ORDER BY
使用ORDER BY語(yǔ)句對(duì)數(shù)據(jù)進(jìn)行排序,比如按照統(tǒng)計(jì)字段從高到低排序,查詢語(yǔ)句如下。
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、不支持較復(fù)雜的子查詢。所以,有一些相對(duì)復(fù)雜一些的功能,還得借助于DSL方式來(lái)實(shí)現(xiàn)
4.6 DESCRIBE
使用DESCRIBE語(yǔ)句查看索引中有哪些字段,比如查看es_order索引的字段,查詢語(yǔ)句如下。
POST /_sql?format=txt
{"query": "DESCRIBE es_order"
}
4.7 SHOW TABLES
使用SHOW TABLES查看所有的索引
POST /_sql?format=txt
{"query": "SHOW TABLES"
}
4.8 查詢支持的函數(shù)
使用SQL查詢ES中的數(shù)據(jù),不僅可以使用一些SQL中的函數(shù),還可以使用一些ES中特有的函數(shù)。SHOW FUNCTIONS語(yǔ)句查看所有支持的函數(shù),比如搜索所有帶有DATE字段的函數(shù)可以使用如下語(yǔ)句。
POST /_sql?format=txt
{"query": "SHOW FUNCTIONS LIKE '%DATE%'"
}
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-eC2dU8qP-1721093861439)(https://i-blog.csdnimg.cn/direct/eed4483e4e4f4e43bdb5709b7d35b178.png)]
五、適用場(chǎng)景及潛在限制
Elasticsearch SQL適用于需要對(duì)大量數(shù)據(jù)進(jìn)行復(fù)雜查詢的場(chǎng)景,如數(shù)據(jù)分析、報(bào)表生成、數(shù)據(jù)探索等。然而,由于SQL查詢的復(fù)雜性,它可能不適用于所有場(chǎng)景。例如,對(duì)于需要高并發(fā)、低延遲的場(chǎng)景,原生REST查詢可能更合適。
此外,雖然Elasticsearch SQL提供了SQL接口,但它并不是完全兼容SQL。例如,它不支持所有的SQL函數(shù)和特性。因此,在使用Elasticsearch SQL時(shí),需要了解它的限制,并根據(jù)實(shí)際情況選擇使用。
總結(jié)來(lái)說(shuō),Elasticsearch SQL提供了一種直觀、易用的方式查詢Elasticsearch數(shù)據(jù)。它允許開(kāi)發(fā)者利用熟悉的SQL語(yǔ)言,編寫(xiě)更直觀、更易懂的查詢,并避免對(duì)大量復(fù)雜的原生REST請(qǐng)求的編寫(xiě)。然而,它的適用場(chǎng)景和性能特點(diǎn)需要在實(shí)際使用中仔細(xì)考慮。