Elasticsearch клиент для Java: полное руководство по подключению и работе

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Elasticsearch клиент для Java: полное руководство

Elasticsearch — это мощная распределённая поисковая и аналитическая система на базе Lucene. Для взаимодействия с ней из Java-приложений существует официальный клиент, который предоставляет удобный API для индексации, поиска и управления данными. В этой статье мы подробно разберём установку, настройку и основные возможности Elasticsearch Java клиента, а также приведём практические примеры кода.

Что такое Elasticsearch Java клиент?

Elasticsearch Java клиент — это официальная библиотека, предназначенная для взаимодействия с кластером Elasticsearch из Java-приложений. Она поддерживает два основных подхода:

  • Low-level REST Client — низкоуровневый клиент, работающий напрямую с HTTP-запросами. Даёт полный контроль, но требует ручного формирования JSON.
  • High-level REST Client — высокоуровневая обёртка, предоставляющая объектно-ориентированный API для типовых операций (индексация, поиск, обновление). Рекомендуется для большинства проектов.

Начиная с Elasticsearch 7.0, рекомендуется использовать именно High-level REST Client, так как он более удобен и безопасен.

Установка и подключение

Для подключения клиента к проекту на Java (Maven) добавьте следующую зависимость в файл pom.xml:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.17.0</version>
</dependency>

Если вы используете Gradle, добавьте строку:

implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.17.0'

После добавления зависимости создайте экземпляр клиента:

import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.RestClient;
import org.apache.http.HttpHost;

public class ElasticsearchClientExample {
    public static void main(String[] args) {
        RestHighLevelClient client = new RestHighLevelClient(
            RestClient.builder(new HttpHost("localhost", 9200, "http"))
        );
        // Ваш код работы с Elasticsearch
        try {
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Основные операции с клиентом

Создание индекса

Перед началом работы с данными необходимо создать индекс (аналог базы данных в SQL). Пример:

import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.RequestOptions;

public void createIndex(RestHighLevelClient client, String indexName) throws IOException {
    CreateIndexRequest request = new CreateIndexRequest(indexName);
    CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
    System.out.println("Индекс создан: " + response.isAcknowledged());
}

Индексация документа

Документы в Elasticsearch представляют собой JSON-объекты. Для добавления документа используйте IndexRequest:

import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.common.xcontent.XContentType;
import java.util.HashMap;
import java.util.Map;

public void indexDocument(RestHighLevelClient client, String indexName) throws IOException {
    Map<String, Object> jsonMap = new HashMap<>();
    jsonMap.put("title", "Elasticsearch клиент для Java");
    jsonMap.put("content", "Подробное описание работы с Elasticsearch из Java.");
    jsonMap.put("views", 150);

    IndexRequest request = new IndexRequest(indexName)
        .id("1")
        .source(jsonMap);

    IndexResponse response = client.index(request, RequestOptions.DEFAULT);
    System.out.println("Документ добавлен с ID: " + response.getId());
}

Поиск документов

Для поиска используется SearchRequest и SearchSourceBuilder. Пример поиска по полю title:

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.SearchHit;

public void searchDocuments(RestHighLevelClient client, String indexName) throws IOException {
    SearchRequest searchRequest = new SearchRequest(indexName);
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchQuery("title", "Elasticsearch"));
    searchRequest.source(searchSourceBuilder);

    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    for (SearchHit hit : searchResponse.getHits().getHits()) {
        System.out.println("Найден документ: " + hit.getSourceAsString());
    }
}

Обновление и удаление документов

Для обновления используйте UpdateRequest, для удаления — DeleteRequest:

import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;

public void                    

Рекомендаций