Elasticsearch案例-SQL轉DSL語句

查看更多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 API

在_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"
      }
    }
  ]
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章