自实现Elasticsearch-JDBC,结合JFinal使用

1、介绍

个人实现 elasticsearch的jdbc驱动,略微参考官方 x-pack-sql-jdbc (7.6.2,其他版本未测试),相当于精简官方jdbc,同时又绕过权限问题


2、源码

https://gitee.com/wsitm/elasticsearch-jdbc.git


3、引用

自行使用源码打包,或

image.png

取pack目录下我打包好的jar文件。然后放在在项目下

image.png

选中“elasticsearch-jdbc-1.0.0-SNAPSHOT.jar”,右键-> Add as Library。

其实比较建议自己构建一个私有仓库再引用,相对方便。这个是个人兴趣,所有我就不发布到maven仓库了,太麻烦

另外,该工具使用fastjson作核心数据处理,必须在 pom 引用

        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.78</version>
        </dependency>


4、使用

import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.druid.DruidPlugin;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.util.List;

public class TestActiveRecord {

    private static DruidPlugin dp;
    private static ActiveRecordPlugin arp;
    private final static String SOURE = "es";

    @Before
    public void initDb() {
        System.err.println("Db starting...");

        String url = "jdbc:es://192.168.0.1:9200/";
        String username = "xxx";
        String password = "xxxxxx";
        String driverClass = "stu.elasticsearch.jdbc.EsDriver";
        dp = new DruidPlugin(url, username, password, driverClass);
        arp = new ActiveRecordPlugin(SOURE, dp);

        // 与 jfinal web 环境唯一的不同是要手动调用一次相关插件的start()方法
        dp.start();
        arp.start();
        System.err.println("Db started");
    }

    @After
    public void stopDb() {
        dp.stop();
        arp.stop();
        System.err.println("Db stoped");
    }


    @Test    public void test1() throws IOException {
        List<Record> list = Db.use(SOURE).find("SELECT * FROM \\\"filebeat-*\\\" LIMIT 10");

        list.forEach(record -> {
            record.getColumns()
                    .forEach((k, v) -> {
                        System.out.print(k + ": " + v + ", ");
                    });
            System.out.println("\n");
        });

    }

}


没有任何多余的配置,就和查其他数据库一样

5、结果

image.png


如果在springboot配置,也是和其他数据库一样,可以查看我的博客https://blog.csdn.net/LZY_1993/article/details/120648559

评论区

chcode

2021-10-08 13:46

steven_lhcb_9527

2021-10-08 15:39

太强了

zzutligang

2021-10-10 16:41

必须赞!不过就是不知道对sql语句支持到什么程度

wsitm

2021-10-10 18:22

@zzutligang 这个去官方查看,我并不是对SQL转换(原SQL发送过去的),只是将查询数据封装成JDBC形式而已