介绍
这是 Elasticsearch 的官方 Java API 客户端的文档。客户端为所有 Elasticsearch API 提供强类型请求和响应。
特征
- 所有 Elasticsearch API 的强类型请求和响应。
- 所有 API 的阻塞和异步版本。
- 使用流畅的构建器和功能模式可以在创建复杂的嵌套结构时编写简洁但可读的代码。
- 通过使用对象映射器(例如 Jackson)或任何 JSON-B 实现来无缝集成应用程序类。
- 将协议处理委托给 http 客户端,例如 Java 低级 REST 客户端,负责处理所有传输级问题:HTTP 连接池、重试、节点发现等。
服务器兼容性政策
Elasticsearch Java 客户端向前兼容;这意味着客户端支持与更高或同等次要版本的 Elasticsearch 进行通信。 Elasticsearch 语言客户端仅向后兼容默认发行版,并且不做任何保证。
向前兼容是指较新版本的软件或系统能够与旧版本的硬件、软件或文件格式进行良好交互的能力,即新版本能够向下兼容于旧版本。
入门
本页面将引导您完成 Java 客户端的安装过程,向您展示如何实例化客户端以及如何使用它执行基本的 Elasticsearch 操作。
要求
- Java 8 或更高版本。
- 一个 JSON 对象映射库,允许您的应用程序类与 Elasticsearch API 无缝集成。下面的示例显示了 Jackson 的用法。
安装
使用 Jackson 在 Gradle 项目中安装
dependencies {
implementation 'co.elastic.clients:elasticsearch-java:8.13.2'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.17.0'
}
使用 Jackson 在 Maven 项目中安装
在项目的 pom.xml
中,添加以下存储库定义和依赖项:
<project>
<dependencies>
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>8.13.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.0</version>
</dependency>
</dependencies>
</project>
连接
可以使用 API 密钥和 Elasticsearch 端点连接到 Elastic Cloud。
// URL and API key
String serverUrl = "https://localhost:9200";
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);
您可以在部署的“我的部署”页面上找到您的 Elasticsearch 端点:
您可以在“管理”页面的“安全”下生成 API 密钥。
操作
本部分将引导您完成 Elasticsearch 的基本且最重要的操作。有关更多操作和更高级的示例,请参阅使用 Java API 客户端页面。
创建索引
这是创建 product
索引的方法:
esClient.indices().create(c -> c
.index("products")
);
索引文档
这是索引文档的简单方法,这里是 Product
应用程序对象:(添加文档)
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());
获取文件
您可以使用以下代码获取文档:
GetResponse<Product> response = esClient.get(g -> g
.index("products") //get 请求,带有索引名称和标识符。
.id("bk-1"),
Product.class // 目标类,此处为 Product 。
);
if (response.found()) {
Product product = response.source();
logger.info("Product name " + product.getName());
} else {
logger.info ("Product not found");
}
搜索文件
您可以通过以下方式使用 Java 客户端创建单个匹配查询:
String searchText = "bike";
SearchResponse<Product> response = esClient.search(s -> s
.index("products")
.query(q -> q
.match(t -> t
.field("name")
.query(searchText)
)
),
Product.class
);
更新文件
这是更新文档的方法,例如添加新字段:
Product product = new Product("bk-1", "City bike", 123.0);
esClient.update(u -> u
.index("products")
.id("bk-1")
.upsert(product),
Product.class
);
删除文档
esClient.delete(d -> d.index("products").id("bk-1"));
删除索引
esClient.indices().delete(d -> d
.index("products")
);