ES elasticsearch 6.3.0的sql功能简单试用

安装ES6.3.0 之前文章已经安装过,请看之前的安装

因为6.3.0自带了SQL工具,一起安装的,安装目录的bin下面,

这样记动,bin/elasticsearch-sql-cli

如下图所示, 就是启动成功

用sql 命令简单的查询一下数据,不过是第一版本的SQL功能支持,可能对于嵌套的查询支持不是很友好

sql> select * from java_demo_index where prodId>6 order by prodId desc
   | ;
     catId     |match.prodName |   prodDesc    |    prodId     |   prodName    |query.match.prodName
---------------+---------------+---------------+---------------+---------------+--------------------
6              |null           |智能手机3          |8              |iphone8s       |null                
6              |null           |智能手机3          |7              |iphone8s       |null   

第二方式 直接请求等到数据 

注意后面的参数 _xpack/sql?format=txt"   -d 后面加单引号‘’ 数据体   其中format=txt 文本方式输出,还可以用JSON方式输出

format=json 其他的格式支持包括:yaml、smile、cbor 、txt、csv、tsv等等,我们可以通过 format 参数指定。

curl -X POST "http://192.168.11.237:9200/_xpack/sql?format=txt" -H 'Content-Type: application/json' -d'
{
    "query": "SELECT * FROM java_demo_index ORDER BY prodId  DESC LIMIT 5"
};
     catId     |match.prodName |   prodDesc    |    prodId     |   prodName    |query.match.prodName
---------------+---------------+---------------+---------------+---------------+--------------------
6              |null           |智能手机3          |8              |iphone8s       |null                
6              |null           |智能手机3          |7              |iphone8s       |null                
6              |null           |智能手机           |6              |iphone6s       |null                
6              |null           |智能手机3          |6              |iphone8s       |null                
6              |null           |智能手机3          |5              |iphone8s       |null     

下面以JSON方式输出

[root@p7 /]# curl -X POST "http://192.168.11.237:9200/_xpack/sql?format=json" -H 'Content-Type: application/json' -d'
{
    "query": "SELECT * FROM java_demo_index ORDER BY prodId  DESC LIMIT 5"
> }'
{"columns":[
{"name":"catId","type":"text"},{"name":"match.prodName","type":"text"},{"name":"prodDesc","type":"text"},{"name":"prodId","type":"text"},{"name":"prodName","type":"text"},{"name":"query.match.prodName","type":"text"}],"rows":[["6",null,"智能手机3","8","iphone8s",null],["6",null,"智能手机3","7","iphone8s",null],["6",null,"智能手机","6","iphone6s",null],["6",null,"智能手机3","6","iphone8s",null],["6",null,"智能手机3","5","iphone8s",null]
]}

第三种方式 SQL JDBC

String address = "jdbc:es://" + elasticsearchAddress;    

Properties connectionProperties = connectionProperties();

Connection connection = DriverManager.getConnection(address, connectionProperties);

try (Statement statement = connection.createStatement();

        ResultSet results = statement.executeQuery(

            "SELECT name, page_count FROM library ORDER BY page_count DESC LIMIT 1")) {

    assertTrue(results.next());

    assertEquals("Don Quixote", results.getString(1));

    assertEquals(1072, results.getInt(2));

    SQLException e = expectThrows(SQLException.class, () -> results.getInt(1));

    assertTrue(e.getMessage(), e.getMessage().contains("unable to convert column 1 to an int"));

    assertFalse(results.next());

}

具体的实现方式参考如下

https://www.elastic.co/guide/en/elasticsearch/reference/master/sql-jdbc.html

另外用插件访问,用sql查询,有些还是不能用

SQL转DLS 方式访问

http://192.168.11.237:9200/_xpack/sql/translate/

{"query":"SELECT * FROM java_demo_index ORDER BY prodId  DESC LIMIT 5"}

如果如下,后续再接着研究

猜你喜欢

转载自blog.csdn.net/limingcai168/article/details/81774487