下载
    https://opendistro.github.io/for-elasticsearch-docs/docs/install/plugins/#sql

    注意:OpenDistro for Elasticsearch SQL 插件的版本必须和ES的版本保持一致,否则在使用的时候,会报版本不一致的错误。
    下载下来后,直接在ES的安装目录下执行如下命令安装插件:

    1. elasticsearch-plugin install file:///data/pack/opendistro_sql-x.x.x.zip

    执行完后,便成功安装上插件了,是不是很简单,同时对应的Kibana也便支持_opendistro/sql命令
    image.png

    哈哈,关联语句都可以查,是不是很香。当前OpenDistro for Elasticsearch SQL 已经支持的基础SQL语句如下:

    1. SQL Select
    2. SQL Delete
    3. SQL Where
    4. SQL Order By
    5. SQL Group By
    6. SQL Having
    7. SQL Inner Join
    8. SQL Left Join
    9. SQL Show
    10. SQL Describe
    11. SQL AND & OR
    12. SQL Like
    13. SQL COUNT distinct
    14. SQL In
    15. SQL Between
    16. SQL Aliases
    17. SQL Not Null
    18. SQL(ES) Date
    19. SQL avg()
    20. SQL count()
    21. SQL max()
    22. SQL min()
    23. SQL sum()
    24. SQL Nulls
    25. SQL isnull()
    26. SQL floor
    27. SQL trim
    28. SQL log
    29. SQL log10
    30. SQL substring
    31. SQL round
    32. SQL sqrt
    33. SQL concat_ws
    34. SQL union and minus

    光是安了插件肯定还是不够的,我们怎么在代码中直接使用SQL来操作ES的数据?
    那就需要OpenDistro for Elasticsearch SQL-JDBC登场啦~
    https://github.com/opendistro-for-elasticsearch/sql-jdbc

    1. <dependency>
    2. <groupId>com.amazon.opendistroforelasticsearch.client</groupId>
    3. <artifactId>opendistro-sql-jdbc</artifactId>
    4. <version>1.13.0.0</version>
    5. </dependency>

    opendistro-sql-jdbc的版本试过,可以和ES版本不一致。

    1. public static void main(String[] args) throws Exception{
    2. String url = "jdbc:elasticsearch://http://localhost:9200";
    3. Connection con = DriverManager.getConnection(url);
    4. Statement stmt = con.createStatement();
    5. String sql = "SELECT COUNT(*) m, sum(time_create) as t FROM ad GROUP BY level HAVING m >= 3 ORDER BY time_create DESC";
    6. // 执行查询
    7. ResultSet rs = stmt.executeQuery(sql);
    8. while (rs.next()){
    9. System.out.println(rs.getString("t"));
    10. }
    11. con.close();
    12. }

    代码中:url=”jdbc:elasticsearch:……”为固定写法,JDBC以此识别出需要使用opendistro-sql-jdbc连接数据源。上述执行结果如下:
    既然JDBC可以的话,那么结合Spring-Data,使用jdbcTemplate操作ES当然一样可以,代码如下:

    1. @Autowired
    2. private JdbcTemplate jdbcTemplate;
    3. @GetMapping("/query")
    4. public List<Map<String, Object>> queryAll() {
    5. String sql = "select * from ad";
    6. //执行sql语句
    7. List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
    8. return maps;
    9. }