ElasticSearch Java SQL API基本使用

本文详细介绍了如何使用Java API通过JDBC连接ElasticSearch并执行SQL操作,包括使用java.sql和javax.sql包的具体步骤,以及如何配置连接属性和执行基本的SQL查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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驱动程序创建的连接不被池化管理。 为了实现池化连接,需要第三方连接池机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值