最新elasticsearch7(三、jdbc链接sql查询)

文章目录

采坑

这节我们来说下如何使用sql来查询es,网上很多使用 NLPChina提供的elasticsearch-sql包,比如gitlab上给出的案例

public void testJDBC() throws Exception {
        Properties properties = new Properties();
        properties.put("url", "jdbc:elasticsearch://127.0.0.1:9300/" + TestsConstants.TEST_INDEX);
        DruidDataSource dds = (DruidDataSource) ElasticSearchDruidDataSourceFactory.createDataSource(properties);
        Connection connection = dds.getConnection();
        PreparedStatement ps = connection.prepareStatement("SELECT  gender,lastname,age from  " + TestsConstants.TEST_INDEX + " where lastname='Heath'");
        ResultSet resultSet = ps.executeQuery();
        List<String> result = new ArrayList<String>();
        while (resultSet.next()) {
              System.out.println(resultSet.getString("lastname") + "," + resultSet.getInt("age") + "," + resultSet.getString("gender"))
        }
        ps.close();
        connection.close();
        dds.close();
    }

不过一切并没有那么顺利,我想也是因为maven中央仓只更新到6.2的版本不匹配的缘故

2020-02-07 16:17:00,965 [Druid-ConnectionPool-Create-1995338497] ERROR c.alibaba.druid.pool.DruidDataSource 
[ElasticSearchDruidDataSource.java : 1823] - create connection error
java.lang.NoSuchFieldError: createErrorCount

于是我把elasticsearch-sql代码拉下来,用maven在本地打7.5.1.0版本jar包上传,这时候又报了druid一个方法找不到异常,我将druid也更新到1.1.21的最新版本,接着报:

 ERROR c.a.d.p.ElasticSearchDruidDataSource [ElasticSearchDruidDataSource.java : 2508] - 
 create connection Error
java.lang.NoClassDefFoundError: org/elasticsearch/xpack/client/PreBuiltXPackTransportClient

跟踪下了异常,原来是因为x-pack-transport的maven依赖在elasticsearch-sql 7.5.1.0包中是<scope>provided</scope>,于是我在项目中加上了依赖:

		<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>x-pack-transport</artifactId>
            <version>7.5.1</version>
        </dependency>

不过新版本的ES其实已经废弃PreBuiltXPackTransportClient方式,推荐采用high level api了,而elasticsearch-sql 7.5.1.0仍然在沿用我还是有点疑惑。带着疑惑继续测试又出现其他问题:

ERROR c.a.d.p.ElasticSearchDruidDataSource [ElasticSearchDruidDataSource.java : 2508] - create connection Error
java.lang.NoClassDefFoundError: org/elasticsearch/action/GenericAction
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
[DruidAbstractDataSource.java : 1791] - {dataSource-1} failContinuous is true

从异常来看应该是缺了哪个插件的包,这时我也开始考虑方向问题,就算找到这个包会不会有其他新的bug,普遍存在的一个问题就是所用的ES版本较旧,maven仓没更新也可能是其并不支持。

新方案

想了半天还是决定看下官网上有什么建议,毕竟sql的优势es应该也是很看重的。果不其然sql使用有一个章节,我们看到jdbc部分,在pom文件中添加:

		<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>x-pack-transport</artifactId>
            <version>7.5.1</version>
            <scope>provided</scope>
        </dependency>
        
		<repositories>
		  <repository>
		    <id>elastic.co</id>
		    <url>https://artifacts.elastic.co/maven</url>
		  </repository>
		</repositories>

以为maven中央仓没有上传较新的依赖,所以需要添加下repository。api部分 有接口的使用,我这里还是给个用例。

	public void jdbc() throws SQLException {
        EsDataSource dataSource = new EsDataSource();
        String address = "jdbc:es://192.168.9.226:9200";
        dataSource.setUrl(address);
        Properties connectionProperties = new Properties();
        dataSource.setProperties(connectionProperties);
        Connection connection = dataSource.getConnection();
        PreparedStatement ps = connection.prepareStatement("select * from sign2 limit 10");
        ResultSet resultSet = ps.executeQuery();
        List<String> result = new ArrayList<String>();
        while (resultSet.next()) {
              System.out.println(resultSet.getString("appId"));
        }
        ps.close();
        connection.close();
    }

执行可能会遇到下面异常:java.sql.SQLInvalidAuthorizationSpecException: current license is non-compliant for [jdbc],这是因为你的es没有授权,打开订阅页 我们可以看到es分了5个等级,我们往下面拉
在这里插入图片描述
可以看到,如果要使用jdbc的话,理论上要有白金级的授权才行。
在这里插入图片描述
es虽然没有学习版开发所有权限,还是提供了试用的,我们只需要开启授权后也能免费使用30天:

POST /_license/start_trial?acknowledge=true

授权成功后我们可以查看下状态,通过get方式:

GET /_license

结尾

当然,如果是我们生产所需,这种试行方式肯定是不行的,下节我们就来看下最新Elasticsearch7的破解方法吧。当然还是建议大家去官网去购买:D

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
elasticsearch-jdbc是一个用于将关系型数据库中的数据导入到Elasticsearch中的工具。它是基于Java开发的,可以通过配置文件指定数据库连接信息和导入规则。你可以在以下链接中找到详细的参数配置信息: 要使用elasticsearch-jdbc,你需要下载相关的jar文件,包括elasticsearch-jdbc本身以及其依赖的jar文件。你可以在以下链接中找到elasticsearch-jdbc的jar文件: 此外,你还需要下载elasticsearch-6.7.1.jar、elasticsearch-core-6.7.1.jar和lucene-core-7.7.0.jar等相关的jar文件。 通过elasticsearch-jdbc,你可以定义数据源和目标索引等信息,并使用SQL语句来查询和筛选要导入的数据。然后,elasticsearch-jdbc会将查询结果转换为Elasticsearch的文档(document),并将其导入到指定的索引中。这样,你就可以通过Elasticsearch进行灵活的全文搜索和分析了。 总结一下,elasticsearch-jdbc是一个用于将关系型数据库中的数据导入到Elasticsearch的工具,你可以通过详细的参数配置来指定数据库连接和导入规则。你还需要下载相关的jar文件,包括elasticsearch-jdbc本身和其依赖的jar文件,以及elasticsearch-6.7.1.jar、elasticsearch-core-6.7.1.jar和lucene-core-7.7.0.jar等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [elasticsearch-jdbc](https://blog.csdn.net/CHS007chs/article/details/80691511)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [JDBC 连接 ElasticSearch](https://blog.csdn.net/u014646662/article/details/89554631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值