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