API usage
Elastic Cloud Serverless projects are autoscaled environments, fully managed by Elastic and available on Elastic Cloud. Availability This functionality is generally available and ready for production usage. Serverless interfaces and procedures might differ from classic Elastic Stack deployments. The Elastic Stack includes Elastic's core products such as Elasticsearch, Kibana, Logstash, and Beats. Availability This functionality is generally available and ready for production usage. Unless stated otherwise on the page, this functionality is available when your Elastic Stack is deployed on Elastic Cloud Hosted, Elastic Cloud Enterprise, Elastic Cloud on Kubernetes, and self-managed environments. This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes.
Serverless
Generally available
Stack
Generally available
One can use JDBC through the official java.sql and javax.sql packages:
The former through java.sql.Driver and DriverManager:
String address = "jdbc:es://" + elasticsearchAddress;
Properties connectionProperties = connectionProperties();
Connection connection =
DriverManager.getConnection(address, connectionProperties);
- The server and port on which Elasticsearch is listening for HTTP traffic. The port is by default 9200.
- Properties for connecting to Elasticsearch. An empty
Propertiesinstance is fine for unsecured Elasticsearch.
Accessible through the 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();
- The server and port on which Elasticsearch is listening for HTTP traffic. By default 9200.
- Properties for connecting to Elasticsearch. An empty
Propertiesinstance is fine for unsecured Elasticsearch.
Which one to use? Typically client applications that provide most configuration properties in the URL rely on the DriverManager-style while DataSource is preferred when being passed around since it can be configured in one place and the consumer only has to call getConnection without having to worry about any other properties.
To connect to a secured Elasticsearch server the Properties should look like:
Properties properties = new Properties();
properties.put("user", "test_admin");
properties.put("password", "x-pack-test-password");
Once you have the connection you can use it like any other JDBC connection. For example:
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 doesn’t provide a connection pooling mechanism, thus the connections the JDBC driver creates are not pooled. In order to achieve pooled connections, a third-party connection pooling mechanism is required. Configuring and setting up the third-party provider is outside the scope of this documentation.