ElasticSearch Java SQL API基本使用

ElasticSearch Java API使用

ElasticSearch的Java API中可以通过官方的java.sql和javax.sql包使用JDBC,来进行ElasticSearch中的SQL相关操作。本文对这里的两种API进行说明,具体内容见:ElasticSearch API Usage

本文内容仅是使用API进行ElasticSearch进行连接,不包括ElasticSearch SQL的具体使用,这部分内容参见ElasticSearch的官方文档的如下内容:

java.sql包

java.sql包中,通过java.sql.Driver和DriverManager来进行ES的连接,并进行SQL操作。

String address = "jdbc:es://" + elasticsearchAddress;     
Properties connectionProperties = connectionProperties(); 
Connection connection =
    DriverManager.getConnection(address, connectionProperties);
  • Elasticsearch服务监听HTTP的服务器和端口,端口默认为9200。
  • 对于连接到Elasticsearch的属性,对于不安全的Elasticsearch可以使用空属性,

javax.sql包

使用javax.sql包,则可通过javax.sql.DataSource API进行访问:

EsDataSource dataSource = new EsDataSource();
String address = "jdbc:es://" + elasticsearchAddress;     
dataSource.setUrl(address);
Properties connectionProperties = connectionProperties(); 
dataSource.setProperties(connectionProperties);
Connection connection = dataSource.getConnection();

API的选择和使用示例

那么以上连个Java API使用哪一个? 一般情况下:

  • DriverManager样式:适用于在URL中提供大多数配置属性的客户端应用程序,
  • DataSource样式:适用于配置在多个位置进行传递,这种方式可以在一个位置进行配置,多个使用者只需调用getConnection即可,而不必担心任何其他属性。

如果需要连接到受保护的Elasticsearch服务器,连接时的属性需要配置如下:

Properties properties = new Properties();
properties.put("user", "test_admin");
properties.put("password", "x-pack-test-password");

使用以上的API建立连接后,就可以像其他任何JDBC连接一样使用ElasticSearch的Java API了, 例如:

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));
    assertThat(e.getMessage(), containsString("Unable to convert "
            + "value [Don Quixote] of type [TEXT] to [Integer]"));
    assertFalse(results.next());
}

主要注意的是,Elasticsearch SQL不提供连接池机制,因此JDBC驱动程序创建的连接不被池化管理。 为了实现池化连接,需要第三方连接池机制。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值