You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch 8.3.0 Java API客户端DeleteRequest代码示例咨询

Elasticsearch 8.3.0 新版Java API客户端单条文档删除实现

以下代码全部基于官方co.elastic.clients包下的新版Java API Client编写,完全适配8.3.0版本,未使用任何已废弃的High Level Rest Client、Transport Client接口。

前置:客户端初始化

首先需要初始化新版客户端实例,无认证场景代码如下:

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;

// 初始化底层Rest客户端
RestClient restClient = RestClient.builder(new HttpHost("127.0.0.1", 9200)).build();
// 构建传输层,使用Jackson做JSON序列化
ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
// 初始化ES客户端
ElasticsearchClient esClient = new ElasticsearchClient(transport);

场景1:已知文档ID,使用DeleteRequest删除

原生DeleteRequest要求必须传入文档ID,适合明确知道待删除文档ID的场景:

import co.elastic.clients.elasticsearch.core.DeleteResponse;

// 传入参数
String indexName = "你的业务索引名";
String targetDocId = "待删除文档的ID";

DeleteResponse response = esClient.delete(req -> req
        .index(indexName)
        .id(targetDocId)
);

// 处理返回结果
System.out.printf("操作结果:%s,文档版本号:%d%n", 
        response.result().jsonValue(), 
        response.version());

场景2:仅知道匹配条件,按条件删除单条文档

如果没有文档ID,仅能通过字段匹配条件定位文档,无法直接使用DeleteRequest,需要用DeleteByQueryRequest实现,核心要加size(1)配置,限制最多删除1条匹配文档,避免条件不唯一时批量删错数据:

提示:如果条件可能命中多条文档,建议先通过相同查询条件搜索拿到目标文档ID,再用上面的按ID删除方式,准确性更高。

import co.elastic.clients.elasticsearch.core.DeleteByQueryResponse;
import co.elastic.clients.json.JsonData;

// 传入参数
String indexName = "你的业务索引名";
// 示例匹配规则:title字段精确等于"待删除标题"、createTime字段小于指定时间戳
// 可根据业务替换为term、match、range等任意查询组合
DeleteByQueryResponse response = esClient.deleteByQuery(req -> req
        .index(indexName)
        .query(query -> query
                .bool(bool -> bool
                        .must(
                                m -> m.term(t -> t.field("title").value("待删除标题")),
                                m -> m.range(r -> r.field("createTime").lt(JsonData.of(1690000000000L)))
                        )
                )
        )
        .size(1) // 限制最多删除1条,防止误删
);

// 处理返回结果
System.out.printf("实际删除文档数:%d%n", response.deleted());

注意事项

  • 客户端使用完成后需要调用esClient.close()释放底层连接资源,该方法会自动关闭关联的transport和restClient实例
  • 如果集群开启了账号密码+HTTPS认证,初始化RestClient时需要补充凭证配置:
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.BasicCredentialsProvider;

BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY, 
        new UsernamePasswordCredentials("你的ES账号", "你的ES密码"));

RestClient restClient = RestClient.builder(new HttpHost("127.0.0.1", 9200, "https"))
        .setHttpClientConfigCallback(builder -> builder
                .setDefaultCredentialsProvider(credsProvider)
                // 自签证书场景可配置自定义SSL上下文,生产环境建议使用正规证书
        )
        .build();
  • 删除操作属于不可逆写操作,生产环境执行前建议先做查询校验,确认匹配的文档符合预期。

内容的提问来源于stack exchange,提问作者Java

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:09:24