java客户端实现SQL查询ES
背景:
ES 从6.3版本之后开始支持SQL 查询,通过kibana等客户端,可以像查询MySql一样, 查询ES的index,并且支持一次可以查询多个索引,但其原理还是将SQL转成DSl来查询,如下在kibana上面利用SQL查询ES
// 通过该SQL查询
POST _xpack/sql?format=txt
{
"query":"select * from testIndex"
}
将该SQL转换成DSL
POST /_sql/translate
{
"query": "select * from info"
}
但是这通过kibana这种客户端平台来查询ES, 如何在代码中利用SQL查询ES呢?
先来看一下目前Java支持的几种客户端
- TransportClient
- Java Low Level REST Client
- Java High Level REST Client
- JDBC
目前第一种方式 在ES 8.xx版本中已经废弃了, 第二方式需要自定义拼接参数,比较麻烦,第三种方式有比较丰富的API,但是无法支持直接通过SQL查询,也无法将SQL转成DSL,第四种方式的话是需要一个额外的xpack插件,但是其需要开通会员才能使用sql进行查询。
那有没有可以将SQL转换成DSL的工具呢? 通过搜索, 在github上面发现了NPLChain 提供的一个开源工具: elasticsearch-sql , github地址 ,其是通过TransportClient客户端连接ES及查询,最核心的就是可以将sql转换成一个queryAction对象,这个对象也就是我们通过客户端连接时需要组装的一个查询对象。
maven依赖如下:
<dependency>