Elasticsearch Java 客户端调用方法

Elasticsearch 提供了两种主要的 Java 客户端调用方式:High Level REST Client(官方推荐)和 Java API Client(8.x 版本后新增)。以下分别介绍两种方式的使用方法。


High Level REST Client(7.x-8.x 兼容)

适用于 Elasticsearch 7.x 和 8.x 版本,需添加 Maven 依赖:

org.elasticsearch.client
elasticsearch-rest-high-level-client
7.17.0

初始化客户端

RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);

索引文档

IndexRequest request = new IndexRequest("index_name")
.id("1")
.source("field1", "value1", "field2", "value2");
IndexResponse response = client.index(request, RequestOptions.DEFAULT);

搜索文档

SearchRequest searchRequest = new SearchRequest("index_name");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("field1", "value1"));
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);


Java API Client(8.x+ 推荐)

Elasticsearch 8.x 推出的新客户端,需添加依赖:

co.elastic.clients
elasticsearch-java
8.12.0

初始化客户端

RestClient restClient = RestClient.builder(
new HttpHost("localhost", 9200)).build();
ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
ElasticsearchClient client = new ElasticsearchClient(transport);

索引文档

Product product = new Product("1", "Elasticsearch Guide");
IndexResponse response = client.index(i -> i
.index("products")
.id(product.getId())
.document(product));

搜索文档

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


通用注意事项

  1. 连接池管理:确保客户端单例化,避免重复创建。
  2. 异常处理:捕获 IOExceptionElasticsearchException
  3. 版本兼容性:客户端版本应与 Elasticsearch 服务端主版本号一致。
  4. 异步操作:两种客户端均支持异步调用(如 client.indexAsync())。

示例代码完整结构

// 关闭客户端(finally 块中调用)
client.close();

两种方式均可实现完整 CRUD 操作,8.x 用户建议优先使用新 Java API Client 以获得更好的类型安全和流畅 API 体验。

posted on 2025-10-22 15:19  ycfenxi  阅读(0)  评论(0)    收藏  举报