查看更多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"
}
}
]
}