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"
      }
    }
  ]
}
发布了9 篇原创文章 · 获赞 1 · 访问量 3406

猜你喜欢

转载自blog.csdn.net/y1006597541/article/details/101015616
今日推荐