ES6.3自带了sql查询,但是官网上的JDBC连接es6.3文档写的很马虎,本人实现后以作记录,首先安装官网安装ES6.3.
安装后先建立index
PUT /library/book/_bulk?refresh {"index":{"_id": "Leviathan Wakes"}} {"name": "Leviathan Wakes", "author": "James S.A. Corey", "release_date": "2011-06-02", "page_count": 561} {"index":{"_id": "Hyperion"}} {"name": "Hyperion", "author": "Dan Simmons", "release_date": "1989-05-26", "page_count": 482} {"index":{"_id": "Dune"}} {"name": "Dune", "author": "Frank Herbert", "release_date": "1965-06-01", "page_count": 604}
es的jdb jar
https://artifacts.elastic.co/maven/org/elasticsearch/plugin/jdbc/6.3.0/jdbc-6.3.0.jar
es的jdbc jar依赖
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-jdbc-with-dependencies-6.3.0.zip
代码如下
package com.es; import java.sql.*; import java.util.Properties; /** * Created by Administrator on 2018/6/16 0016. */ public class EsSQL { public static void main(String args[]) throws SQLException { String driver = "org.elasticsearch.xpack.sql.jdbc.jdbc.JdbcDriver"; try { Class.forName(driver).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } String address = "jdbc:es://127.0.0.1:9200"; Properties connectionProperties = new Properties(); Connection connection = null; try { connection = DriverManager.getConnection(address, connectionProperties); } catch (SQLException e) { e.printStackTrace(); } Statement statement = connection.createStatement(); ResultSet results = statement.executeQuery("SELECT * FROM library WHERE release_date < '2000-01-01';"); while (results.next()) { System.out.println(results.getString(1)); } //关闭资源 results.close(); statement.close(); connection.close(); } }
但是 还是会报错 ,报错信息如下
Exception in thread "main" java.sql.SQLInvalidAuthorizationSpecException: current license is non-compliant for [jdbc] at org.elasticsearch.xpack.sql.client.shared.JreHttpUrlConnection$SqlExceptionType.asException(JreHttpUrlConnection.java:306) at org.elasticsearch.xpack.sql.client.shared.JreHttpUrlConnection.parserError(JreHttpUrlConnection.java:183) at org.elasticsearch.xpack.sql.client.shared.JreHttpUrlConnection.request(JreHttpUrlConnection.java:158) at org.elasticsearch.xpack.sql.client.HttpClient.lambda$post$0(HttpClient.java:101) at org.elasticsearch.xpack.sql.client.shared.JreHttpUrlConnection.http(JreHttpUrlConnection.java:62) at org.elasticsearch.xpack.sql.client.HttpClient.lambda$post$1(HttpClient.java:100) at java.security.AccessController.doPrivileged(Native Method) at org.elasticsearch.xpack.sql.client.HttpClient.post(HttpClient.java:99) at org.elasticsearch.xpack.sql.client.HttpClient.query(HttpClient.java:77) at org.elasticsearch.xpack.sql.jdbc.net.client.JdbcHttpClient.query(JdbcHttpClient.java:51) at org.elasticsearch.xpack.sql.jdbc.jdbc.JdbcStatement.initResultSet(JdbcStatement.java:162) at org.elasticsearch.xpack.sql.jdbc.jdbc.JdbcStatement.execute(JdbcStatement.java:153) at org.elasticsearch.xpack.sql.jdbc.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:42) at com.es.EsSQL.main(EsSQL.java:32)
是因为
JDBC driver required a platinum license