SpringBoot+Elasticsearch使用resthighlevelclient对象删除指定的文档数据

这篇具有很好参考价值的文章主要介绍了SpringBoot+Elasticsearch使用resthighlevelclient对象删除指定的文档数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringBoot+Elasticsearch使用resthighlevelclient对象删除指定的文档数据

使用客户端删除

在 Kibana 中,你可以使用 Dev Tools 或者 Console 来执行 Elasticsearch 查询和删除操作。

​ 以下是一个使用 Dev Tools 执行删除文档的示例:

​ 1.打开 Kibana,转到左侧导航栏的 “Dev Tools” 或者 “Console”。

​ 2.在 Dev Tools 或者 Console 中输入如下删除请求:

POST /your_index/_delete_by_query
{
  "query": {
    "term": {
      "name.keyword": "张三"
    }
  }
}

请替换 /your_index/ 为你实际的索引名称。这个请求会删除索引中所有 “name” 字段值为 “张三” 的文档。

  1. 然后点击 “Run” 或者使用快捷键执行该请求。

请注意,name.keyword 是默认情况下使用的字符串字段的名称,确保在你的映射中使用了正确的字段名称。如果你的 “name” 字段不是关键字类型(keyword),你可能需要调整查询条件。

确保在执行删除操作之前做好备份,并谨慎操作,因为删除操作是不可逆的。


1、第一种

在Spring Boot中使用RestHighLevelClient删除Elasticsearch中的文档数据,你可以通过以下方式实现:

import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;

@Service
public class ElasticsearchService {

    @Autowired
    private RestHighLevelClient elasticsearchClient;

    public void deleteDocumentByName(String name, String indexName, String typeName) throws IOException {
        // 构建DeleteRequest
        DeleteRequest deleteRequest = new DeleteRequest(indexName, typeName, name);

        // 可以设置其他参数,如路由、超时等
        // deleteRequest.routing("your-routing");
        // deleteRequest.timeout("10s");

        // 执行删除请求
        DeleteResponse deleteResponse = elasticsearchClient.delete(deleteRequest, RequestOptions.DEFAULT);

        // 处理删除响应
        String index = deleteResponse.getIndex();
        String id = deleteResponse.getId();
        long version = deleteResponse.getVersion();
        System.out.println("Deleted document with id " + id + " from index " + index + " with version " + version);
    }
}

在上面的代码中,首先构建了一个DeleteRequest对象,指定了要删除的文档的索引、类型(如果有)、文档ID。然后使用RestHighLevelClientdelete方法执行删除请求,并通过DeleteResponse获取删除的结果。

请注意,Elasticsearch 7.x 版本已经移除了类型(type)的概念,因此在新的索引中,typeName参数可能是可选的,具体取决于你的Elasticsearch版本和索引的映射设置。如果你的索引中没有使用类型,可以将typeName设置为null或者省略。


2、第二种在 Elasticsearch 7.x 以前

如果你的Elasticsearch索引中有一个字段名为 “name”,并且你想要删除该字段值为 “张三” 的文档,可以使用 Elasticsearch 的 Query DSL 来构建一个删除请求。以下是一个示例代码,演示如何使用 RestHighLevelClient 来删除具有特定 “name” 值的文档:

import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;

@Service
public class ElasticsearchService {

    @Autowired
    private RestHighLevelClient elasticsearchClient;

    public void deleteDocumentByName(String name, String indexName) throws IOException {
        // 构建查询请求,查找具有特定 name 值的文档
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.termQuery("name", name));

        SearchRequest searchRequest = new SearchRequest(indexName);
        searchRequest.source(searchSourceBuilder);

        // 执行查询请求
        SearchResponse searchResponse = elasticsearchClient.search(searchRequest, RequestOptions.DEFAULT);

        // 遍历查询结果,获取文档 ID 并删除文档
        for (var hit : searchResponse.getHits().getHits()) {
            String documentId = hit.getId();
            deleteDocumentById(indexName, documentId);
        }
    }

    private void deleteDocumentById(String indexName, String documentId) throws IOException {
        // 构建删除请求
        DeleteRequest deleteRequest = new DeleteRequest(indexName, documentId);

        // 执行删除请求
        DeleteResponse deleteResponse = elasticsearchClient.delete(deleteRequest, RequestOptions.DEFAULT);

        // 处理删除响应
        String index = deleteResponse.getIndex();
        String id = deleteResponse.getId();
        long version = deleteResponse.getVersion();
        System.out.println("Deleted document with id " + id + " from index " + index + " with version " + version);
    }
}

上面的代码首先构建一个搜索请求,使用 QueryBuilders.termQuery 来匹配具有特定 “name” 值的文档。然后,遍历搜索结果,获取文档的 ID,并使用 deleteDocumentById 方法删除相应的文档。请确保在实际使用中进行适当的错误处理和资源管理。


3、第三种在 Elasticsearch 7.x 中

在 Elasticsearch 7.x 中,不再支持直接删除文档时使用 SearchRequest 查询文档然后删除的方式,而是直接使用 DeleteByQueryRequest 来执行删除操作。以下是一个正确的示例代码:

import org.elasticsearch.action.delete.DeleteByQueryRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;

@Service
public class ElasticsearchService {

    @Autowired
    private RestHighLevelClient elasticsearchClient;

    public void deleteDocumentByName(String name, String indexName) throws IOException {
        // 构建删除请求,删除具有特定 name 值的文档
        DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest(indexName);
        deleteByQueryRequest.setQuery(QueryBuilders.termQuery("name", name));

        // 执行删除请求
        elasticsearchClient.deleteByQuery(deleteByQueryRequest, RequestOptions.DEFAULT);

        System.out.println("Deleted documents with name " + name + " from index " + indexName);
    }
}

在这个示例中,使用了 DeleteByQueryRequest 来构建删除请求,并通过 QueryBuilders.termQuery 指定要删除的文档的条件(在这里是 “name” 字段等于 “张三”)。然后,通过 elasticsearchClient.deleteByQuery 执行删除操作。请确保在实际使用中进行适当的错误处理和资源管理。


4、批量删除

要批量删除 Elasticsearch 中符合特定条件的文档,你可以使用 DeleteByQueryRequest。以下是一个示例代码,演示如何使用 RestHighLevelClient 批量删除具有特定 “name” 值的文档:

import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;

@Service
public class ElasticsearchService {

    @Autowired
    private RestHighLevelClient elasticsearchClient;

    public void deleteDocumentsByName(String name, String indexName) throws IOException {
        // 构建批量删除请求
        BulkRequest bulkRequest = new BulkRequest();

        // 构建查询请求,查找具有特定 name 值的文档
        bulkRequest.add(new DeleteByQueryRequest(indexName)
                .setQuery(QueryBuilders.termQuery("name", name)));

        // 执行批量删除请求
        elasticsearchClient.bulk(bulkRequest, RequestOptions.DEFAULT);

        System.out.println("Deleted documents with name " + name + " from index " + indexName);
    }
}

在这个示例中,使用了 BulkRequest 来批量构建删除请求。对于每个删除请求,使用 DeleteByQueryRequest 来指定要删除的文档的条件(在这里是 “name” 字段等于 “张三”)。然后,通过 elasticsearchClient.bulk 执行批量删除操作。请确保在实际使用中进行文章来源地址https://www.toymoban.com/news/detail-818805.html

到了这里,关于SpringBoot+Elasticsearch使用resthighlevelclient对象删除指定的文档数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch7.3学习(十六)----RestHighLevelClient Java api实现索引的创建、删除、是否存在、关闭、开启

    注意:导入的包区别,不同的包创建索引的方式不同。博主亲身实践,具体体现在createIndexRequest.mapping()里面。读者可自行试验。  由此可以猜想一下: 可以看到上述两种方式导入的包的子类名是相同的,但是具体对索引的操作方式可能是不同的。具体的区别博主暂时还不清

    2024年02月16日
    浏览(36)
  • SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)

    上一节讲述了 SpringBoot 实现 elasticsearch 索引操作,这一章节讲述 SpringBoot 实现 elasticsearch 查询操作。 案例用到的索引库结构

    2024年02月11日
    浏览(35)
  • ElasticSearch系列 - SpringBoot整合ES:restHighLevelClient.count(countRequest, RequestOptions.DEFAULT)

    restHighLevelClient.count(countRequest, RequestOptions.DEFAULT) 是 Elasticsearch Java High Level REST Client 中用于执行计数请求的方法。 具体来说,它接受两个参数: countRequest:一个 CountRequest 对象,表示计数请求的参数,包括要计数的索引、查询条件等。 RequestOptions.DEFAULT:一个 RequestOptions 对象

    2024年02月08日
    浏览(48)
  • 项目中使用es(二):使用RestHighLevelClient操作elasticsearch

    写在前面 之前写了有关elasticsearch的搭建和使用springboot操作elasticsearch,这次主要简单说下使用RestHighLevelClient工具包操作es。 搭建环境和选择合适的版本 环境还是以springboot2.7.12为基础搭建的,不过这不重要,因为这次想说的是RestHighLevelClient操作elasticsearch,RestHighLevelClient版本

    2024年02月14日
    浏览(31)
  • Java使用Springboot集成Es官方推荐(RestHighLevelClient)

    SpringBoot集成ElasticSearch的四种方式(主要讲解ES官方推荐方式) TransportClient:这种方式即将弃用 官方将在8.0版本彻底去除 Data-Es:Spring提供的封装的方式,由于是Spring提供的,所以每个SpringBoot版本对应的ElasticSearch,具体这么个对应的版本,自己去官网看 ElasticSearch SQL:将Elasti

    2023年04月08日
    浏览(28)
  • spring data elasticsearch使用7.x客户端兼容es 8.x和使用ssl构建RestHighLevelClient

    es在7.x中默认加入elastic security组件所以java client需要使用ssl连接es server. es 8.x 中废弃了 RestHighLevelClient ,使用新版的 java api client ,但是spring data elasticsearch还未更新到该版本.所以需要兼容es 8.x 如下是RestHighLevelClient构建方法: spring data elasticsearch客户端依赖(基于spring boot2.7使用最新

    2024年02月13日
    浏览(34)
  • Elasticsearch-RestHighLevelClient基础操作

    该篇文章参考下面博主文章 Java中ElasticSearch的各种查询(普通,模糊,前缀,高亮,聚合,范围) 【es】java使用es中三种查询用法from size、search after、scroll 删除索引会把索引中已经创建好的数据也删除,就好像我们在mysql中删除库,会把库的数据也删除掉一样。 类似关闭数据

    2024年02月08日
    浏览(32)
  • Elasticsearch:RestHighLevelClient实现搜索、分页、排序、高亮

    1.引入依赖 2.自定义搜索DTO 3.封装工具类、实现 分页、高亮、排序 反射工具类 ReflectUtil 是我自定义的,原理是反射,可以引入hutool的工具包,同样也可以实现该结果

    2024年02月11日
    浏览(33)
  • RestHighLevelClient实现ElasticSearch关联查询之父子文档

    RestHighLevelClient实现ElasticSearch关联查询之父子文档今天分享,承接上一篇内容: DSL操作关联查询 这篇我们通过javaAPI的方式实现: 一、springboot 配置 1、pom文件引用: 2、初始化配置es操作类 3、业务层引用 二、核心伪代码 1、创建父子索引 kibana查看 2、判断索引是否存在 3、删

    2024年02月10日
    浏览(30)
  • springboot整合RestHighLevelClient

    yml config https://www.cnblogs.com/tanghaorong/p/16344391.html

    2024年02月05日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包