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驅動程序創建的連接不被池化管理。 爲了實現池化連接,需要第三方連接池機制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章