• elasticsearch6-RestClient操作文档


    请添加图片描述
    个人名片:

    博主酒徒ᝰ.
    个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
    本篇励志三人行,必有我师焉。

    请添加图片描述
    本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

    五、RestClient操作文档

    Elasticsearch中的RestClient是一种非Java API,用于与Elasticsearch集群进行交互。RestClient提供了一种简单、直观的方式来操作和管理Elasticsearch中的文档。
    RestClient使用HTTP协议来与Elasticsearch集群进行通信。它支持多种请求类型,例如GET、POST、PUT、DELETE等,并且可以发送请求到指定的索引、类型和ID。RestClient是Elasticsearch官方推荐的API之一,它具有以下优点:

    • 简单易用 RestClient API的设计非常简洁,易于学习和使用。通过简单的HTTP请求,开发人员可以轻松地创建、查询、更新和删除Elasticsearch中的文档。

    • 全面的功能支持 RestClient支持Elasticsearch中的大部分功能,包括全文搜索、结构化搜索、聚合查询等。它还提供了监控和管理Elasticsearch集群的功能,可以帮助开发人员了解集群的状态和运行情况,并及时发现和解决问题。

    • 跨平台支持 RestClient是基于HTTP协议的API,它可以在任何支持HTTP协议的平台上使用。无论是Java、Python、Ruby还是其他编程语言,都可以使用RestClient
      API与Elasticsearch集群进行交互。

    • 灵活的定制 RestClient API是Elasticsearch中的非侵入式API,它可以在不修改原有代码的情况下,轻松地对Elasticsearch进行定制和扩展。

    RestClient操作文档的作用主要有以下几点:

    • 文档的CRUD操作 RestClient可以用于创建、读取、更新和删除Elasticsearch中的文档。这些操作可以通过简单的HTTP请求实现,开发人员只需要提供文档的JSON表示形式和相应的请求方法即可。

    • 结构化搜索 RestClient提供了结构化搜索的功能,可以帮助开发人员根据指定的字段进行搜索和过滤操作。这些操作可以通过简单的查询字符串或JSON格式的查询请求实现。

    • 全文搜索 RestClient提供了全文搜索的功能,可以帮助开发人员根据文本内容进行搜索和匹配操作。这些操作可以通过简单的查询字符串或JSON格式的查询请求实现。

    • 聚合查询 RestClient提供了聚合查询的功能,可以帮助开发人员对大量数据进行分组、汇总和统计。这些操作可以通过简单的查询字符串或JSON格式的查询请求实现。

    • 数据分析和监控 RestClient提供了数据分析和监控的功能,可以帮助开发人员了解Elasticsearch集群的状态和运行情况,并及时发现和解决问题。这些操作可以通过监控API实现。

    案例:利用JavaRestClient实现文档的CRUD
    初始化:

    @SpringBootTest
    public class HotelDocumentTest {
        @Autowired
        private IHotelService hotelService;
    
        @Autowired
        private RestHighLevelClient client;
    
        @BeforeEach
        void setup() {
            this.client = new RestHighLevelClient(RestClient.builder(
                    HttpHost.create("http://192.168.179.128:9200")
            ));
        }
    
        @AfterEach
        void tearDown() throws IOException {
            this.client.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    1. 新增文档

    @Test
    void testIndexDocument() throws IOException {
        Hotel hotel = hotelService.getById(36934L);
        HotelDoc hotelDoc = new HotelDoc(hotel);
        IndexRequest request = new IndexRequest("hotel").id(hotelDoc.getId().toString());
        request.source(JSON.toJSONString(hotelDoc), XContentType.JSON);
        client.index(request, RequestOptions.DEFAULT);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2. 查询文档

    @Test
    void testGetDocumentById() throws IOException {
        GetRequest request = new GetRequest("hotel", "36934");
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        String json = response.getSourceAsString();
        HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
        System.out.println(hotelDoc);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3. 删除文档

    @Test
    void testDeleteDocument() throws IOException {
        DeleteRequest request = new DeleteRequest("hotel", "36934");
        client.delete(request, RequestOptions.DEFAULT);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4. 修改文档

    1. 全量修改 = 插入数据
    2. 增量修改 存在修改该字段,不存在则自动添加字段
    @Test
    void testUpdateDocument() throws IOException {
         UpdateRequest request = new UpdateRequest("hotel", "36934");
         request.doc(
                 "price", "954",
                 "startName", "四钻"
         );
         client.update(request, RequestOptions.DEFAULT);
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    5. 批量导入文档

    @Test
    void testBulk() throws IOException {
    	List<Hotel> list = hotelService.list();
    	
    	BulkRequest request = new BulkRequest();
    	for (Hotel hotel : list) {
    	    HotelDoc hotelDoc = new HotelDoc(hotel);
    	    request.add(new IndexRequest("hotel")
    	            .id(hotelDoc.getId().toString())
    	            .source(JSON.toJSONString(hotelDoc), XContentType.JSON));
    	}
    	client.bulk(request, RequestOptions.DEFAULT);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    小结:

    文档操作的基本步骤:
    初始化RestHighLevelClient
    创建XxxRequest。XXX是Index、Get、Update、Delete、Bulk
    准备参数(Index、Update、Bulk时需要)
    发送请求。调用RestHighLevelClient#.xxx()方法,xxx是index、get、update、delete、bulk
    解析结果(Get时需要)

  • 相关阅读:
    Hadoop大数据平台搭建(超详细步骤)
    抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。
    MySQL的索引优化
    基于STM32两轮自平衡小车系统设计与控制
    基于多目标粒子群求解含风、光、柴油机、储能的微电网多目标优化问题附Matlab
    【SpringBoot】快速入门
    patch-package给依赖打补丁实例详解
    java基于springboot+vue的旅游心得分享攻略系统 elementui
    笔记·Pandas几类数据读写方法对比
    TCp并发服务器
  • 原文地址:https://blog.csdn.net/m0_65144570/article/details/132928015