阻塞和异步客户端编辑

API 客户端有两种类型:阻塞和异步。异步客户端上的所有方法都返回标准的 CompletableFuture

两种类型都可以根据您的需要同时使用,共享相同的传输对象。

ElasticsearchTransport transport = ...

// Synchronous blocking client
ElasticsearchClient client = new ElasticsearchClient(transport);

if (client.exists(b -> b.index("products").id("foo")).value()) {
    logger.info("product exists");
}

// Asynchronous non-blocking client
ElasticsearchAsyncClient asyncClient =
    new ElasticsearchAsyncClient(transport);

asyncClient
    .exists(b -> b.index("products").id("foo"))
    .whenComplete((response, exception) -> {
        if (exception != null) {
            logger.error("Failed to index", exception);
        } else {
            logger.info("Product exists");
        }
    });

虽然我们不会深入探讨 Java 中的异步编程,但请记住处理异步任务的失败。很容易忽略它们,导致错误未被发现。

以上示例的源代码可以在 Java API 客户端测试 中找到。