在 Java 中操作 Elasticsearch 进行索引(index)的 CRUD(Create, Read, Update, Delete)操作,通常会使用官方提供的 Elasticsearch Java High Level REST Client 或者 Elasticsearch Java Low Level REST Client。这里以 High Level REST Client 为例,给出索引操作的实战代码示例。假定您已经添加了 Elasticsearch Java Client 的依赖到您的项目中,并且已配置好与 Elasticsearch 服务器的连接。
准备工作
首先,确保已导入相关依赖。如果您使用 Maven,添加以下依赖到 pom.xml
文件中:
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>最新稳定版</version> <!-- 替换为实际使用的 Elasticsearch 版本对应的客户端版本 -->
</dependency>
</dependencies>
配置 Elasticsearch 客户端
创建一个 ElasticsearchClient
实例,配置连接参数:
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.PutMappingRequest;
import org.elasticsearch.common.xcontent.XContentType;
// ...
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("your_elasticsearch_host", 9200, "http"), // 替换为您的 Elasticsearch 主机地址、端口和协议
new HttpHost("your_elasticsearch_host", 9201, "http") // 如果有多个节点,可以添加更多 HttpHost
)
);
索引操作
创建索引(Create)
定义索引名和映射(mapping):
String indexName = "my_index";
String mappingSource = "{\n" +
" \"properties\": {\n" +
" \"title\": {\n" +
" \"type\": \"text\"\n" +
" },\n" +
" \"author\": {\n" +
" \"type\": \"keyword\"\n" +
" }\n" +
" }\n" +
"}";
创建索引:
CreateIndexRequest request = new CreateIndexRequest(indexName);
request.source(mappingSource, XContentType.JSON);
CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
if (createIndexResponse.isAcknowledged()) {
System.out.println("索引 " + indexName + " 创建成功");
} else {
System.out.println("索引 " + indexName + " 创建失败");
}
读取索引(Read)
检查索引是否存在:
GetIndexRequest getIndexRequest = new GetIndexRequest(indexName);
boolean exists = client.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
if (exists) {
System.out.println("索引 " + indexName + " 存在");
} else {
System.out.println("索引 " + indexName + " 不存在");
}
更新索引(Update)
索引一旦创建,其名称和映射通常不直接更改。但如果确实需要更新映射,可以使用 PutMappingRequest
类。请注意,不是所有的映射更新都是实时无损的,具体取决于更新类型和 Elasticsearch 版本。以下是一个简单的映射更新示例:
String updatedMappingSource = "{...}"; // 新的映射源
PutMappingRequest putMappingRequest = new PutMappingRequest(indexName);
putMappingRequest.source(updatedMappingSource, XContentType.JSON);
AcknowledgedResponse response = client.indices().putMapping(putMappingRequest, RequestOptions.DEFAULT);
if (response.isAcknowledged()) {
System.out.println("索引 " + indexName + " 映射更新成功");
} else {
System.out.println("索引 " + indexName + " 映射更新失败");
}
删除索引(Delete)
删除指定索引:
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(indexName);
AcknowledgedResponse deleteResponse = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
if (deleteResponse.isAcknowledged()) {
System.out.println("索引 " + indexName + " 删除成功");
} else {
System.out.println("索引 " + indexName + " 删除失败");
}
关闭客户端
在完成所有操作后,记得关闭客户端以释放资源:
client.close();
以上代码展示了如何使用 Elasticsearch Java High Level REST Client 进行索引的 CRUD 操作。请注意,实际应用中应处理可能出现的异常,并遵循良好的编程实践,如使用 try-with-resources 语句自动关闭客户端。此外,对于生产环境,请确保遵循最佳安全实践,如使用身份验证、授权和 SSL/TLS 加密。