查看更多Elasticsearch、Logstash、Kibana的問題處理和案例
前文
Elasticsearch在較高版本中內置SQL查詢的功能,猜想本質上應該是將SQL語句轉化爲原生的DSL語句,再使用原生進行查詢,可以讓不熟悉ES的用戶能通過SQL語句快速查詢結果,降低使用門檻減少學習成本。另外,ES也提供Java客戶端以JDBC的方式連接查詢,但該方式是收費的。所以,如果用戶不想購買服務建議使用官方提供的免費的restful的方式去查詢,例如Java REST Client。當不熟悉ES原生的DSL語句的時候,可以先使用SQL編寫查詢語句,然後再使用ES自帶的請求將SQL語句翻譯成DSL語句,最後使用Java Low Level REST Client或者Java High Level REST Client的方式查詢數據。
轉化方式
在_sql後面添加/translate
POST /_sql/translate
{
"query": "select * from \"test_0919\""
}
返回結果
{
"size" : 1000,
"_source" : {
"includes" : [
"ip"
],
"excludes" : [ ]
},
"docvalue_fields" : [
{
"field" : "in_KBps"
}
],
"sort" : [
{
"_doc" : {
"order" : "asc"
}
}
]
}
最終將該返回結果作爲請求Body, POST /test_0919/_search作爲請求頭,即可達到與SQL相同的查詢效果。
POST /test_0919/_search
{
"size" : 1000,
"_source" : {
"includes" : [
"ip"
],
"excludes" : [ ]
},
"docvalue_fields" : [
{
"field" : "in_KBps"
}
],
"sort" : [
{
"_doc" : {
"order" : "asc"
}
}
]
}