Skip to content

Latest commit

 

History

History
202 lines (155 loc) · 5.33 KB

clients-java-getting-started.asciidoc

File metadata and controls

202 lines (155 loc) · 5.33 KB

Get started with the Java client

This page guides you through the installation process of the Java client, shows you how to initialize the client, and how to perform basic {es} operations with it.

See the Java client documentation for more detailed usage instructions.

Note

The same client is used for {es3}, on-premise and managed Elasticsearch. Some API endpoints are however not available in {es3}.

Requirements

  • Java 8 or later.

  • A JSON object mapping library to allow seamless integration of your application classes with the {es} API. The examples below show usage with Jackson.

Installation

You can add the Java client to your Java project using either Gradle or Maven.

Use the version with the highest version number found on Maven Central, like 8.16.1. We refer to it as elasticVersion in the configuration examples below.

Using Gradle

You can install the Java client as a Gradle dependency:

dependencies {
    implementation "co.elastic.clients:elasticsearch-java:${elasticVersion}"
    implementation "com.fasterxml.jackson.core:jackson-databind:2.17.0"
}

Using Maven

You can install the Java client as a Maven dependency, add the following to the pom.xml of your project:

<project>
    <dependencies>

        <dependency>
            <groupId>co.elastic.clients</groupId>
            <artifactId>elasticsearch-java</artifactId>
            <version>${elasticVersion}</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.17.0</version>
        </dependency>

    </dependencies>
</project>

Initialize the client

Initialize the client using your API key and {es} endpoint:

// URL and API key
String serverUrl = "https://...elastic.cloud";
String apiKey = "VnVhQ2ZHY0JDZGJrU...";

// Create the low-level client
RestClient restClient = RestClient
    .builder(HttpHost.create(serverUrl))
    .setDefaultHeaders(new Header[]{
        new BasicHeader("Authorization", "ApiKey " + apiKey)
    })
    .build();

// Create the transport with a Jackson mapper
ElasticsearchTransport transport = new RestClientTransport(
    restClient, new JacksonJsonpMapper());

// And create the API client
ElasticsearchClient esClient = new ElasticsearchClient(transport);

To get API keys for the {es} endpoint for a project, see [elasticsearch-get-started].

Using the API

After you initialized the client, you can start ingesting documents.

Creating an index and ingesting documents

The following is an example of indexing a document, here a Product application object in the products index:

Product product = new Product("bk-1", "City bike", 123.0);

IndexResponse response = esClient.index(i -> i
    .index("products")
    .id(product.getSku())
    .document(product)
);

logger.info("Indexed with version " + response.version());

Searching

Now that some data is available, you can search your documents using the search API:

String searchText = "bike";

SearchResponse<Product> response = esClient.search(s -> s
    .index("products")
    .query(q -> q
        .match(t -> t
            .field("name")
            .query(searchText)
        )
    ),
    Product.class
);

A few things to note in the above example:

  • The search query is built using a hierarchy of lambda expressions that closely follows the {es} HTTP API. Lambda expressions allows you to be guided by your IDE’s autocompletion, without having to import (or even know!) the actual classes representing a query.

  • The last parameter Product.class instructs the client to return results as Product application objects instead of raw JSON.

Updating

You can update your documents using the update API:

Product product = new Product("bk-1", "City bike", 123.0);

esClient.update(u -> u
        .index("products")
        .id("bk-1")
        .upsert(product),
    Product.class
);

Delete

You can also delete documents:

esClient.delete(d -> d.index("products").id("bk-1"));

Deleting an index

esClient.indices().delete(d -> d.index("products"));