首页 > 编程语言 >利用JavaRestClient依赖使用java操作索引库

利用JavaRestClient依赖使用java操作索引库

时间:2024-03-11 19:12:36浏览次数:22  
标签:JavaRestClient java request new 索引 client elasticsearch org import

引入依赖

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.12.1</version>
        </dependency>

这里可能会出现这种情况,我导入的是7.12.1的版本,但有两个maven依赖的版本并不是我们想要的7.12.1。

这是因为我们继承了spring-boot-starter-parent父工程,他的版本控制中限制了这两项的依赖的版本,所以我们需要再配置下图中的版本

下列代码为利用JavaRestClient对ES进行的CRUD操作

lsty为自己取得索引库名

package cn.itcast.hotel;

import cn.itcast.hotel.pojo.Hotel;
import cn.itcast.hotel.pojo.HotelDoc;
import cn.itcast.hotel.service.IHotelService;
import com.alibaba.fastjson.JSON;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;
import java.util.List;

import static cn.itcast.hotel.constants.HotelConstants.MAPPING_TEMPLATE;

@SpringBootTest
public class HotelIndexTest {

    private RestHighLevelClient client;

    @Autowired
    private IHotelService hotelService;

    //创建索引库
    @Test
    void createIndex() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest("lsty");
        request.source(MAPPING_TEMPLATE, XContentType.JSON);
        client.indices().create(request, RequestOptions.DEFAULT);
    }

    //删除索引库
    @Test
    void deleteIndex() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("lsty");
        client.indices().delete(request, RequestOptions.DEFAULT);
    }

    //查询索引库是否存在
    @Test
    void ExistsIndex() throws IOException {
        GetIndexRequest request = new GetIndexRequest("lsty");
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }


    //向索引库添加文档
    @Test
    void testAddDocument() throws IOException {
        Hotel hotel = hotelService.getById(61083);//从数据库读取数据罢了,不重要
        
        HotelDoc hotelDoc = new HotelDoc(hotel);
        IndexRequest request = new IndexRequest("lsty").id(hotelDoc.getId().toString());
        request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);
        client.index(request,RequestOptions.DEFAULT);
    }

    //删除文档
    @Test
    void testGetDocumentById() throws IOException {
        GetRequest request = new GetRequest("lsty","61083");
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        String json = response.getSourceAsString();
        System.out.println(json);
    }

    //更新文档(也可以直接用添加文档全面覆盖)
    @Test
    void testUpdateDocumentById() throws IOException {
        UpdateRequest request = new UpdateRequest("lsty","61083");
        request.doc(
                "price","182",
                "starName","三钻"
        );
        client.update(request,RequestOptions.DEFAULT);
    }

    //删除文档
    @Test
    void testDeleteDocumentById() throws IOException {
        DeleteRequest request = new DeleteRequest("lsty","61083");
        client.delete(request,RequestOptions.DEFAULT);
    }

    //批量操作文档
    @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("lsty").id(hotelDoc.getId().toString()).source(JSON.toJSONString(hotelDoc),XContentType.JSON));
        }
        client.bulk(request,RequestOptions.DEFAULT);
    }

    //与ES创建链接
    @BeforeEach
    void setUp(){
        this.client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.230.100:9200")
        ));
    }

    //断开与ES的链接
    @AfterEach
    void tearDown() throws IOException {
        this.client.close();
    }


}

 

标签:JavaRestClient,java,request,new,索引,client,elasticsearch,org,import
From: https://www.cnblogs.com/cyknote/p/18066830

相关文章

  • Java高并发讲解:守护线程——在源代码中分析setDaemon()
    Java高并发讲解:守护线程——在源代码中分析setDaemon()提出问题我们都知道Java线程分为主线程和守护线程,守护线程是需要手动指定的(setDaemon(true)......
  • Java基础知识篇——Java基本介绍
    一、什么是JavaJava是SunMicrosystems于1995年首次发布的一种编程语言和计算平台。编程语言还是比较好理解的,什么是计算平台呢?计算平台是电脑中运行应用程序(软件的环境),包括硬件环境和软件环境。一般系统平台包括一台电脑的硬件体系结构,操作系统、运行时库。Java是快......
  • Java学习笔记——第十二天
    面向对象高级(三)内部类内部类是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,这个类就是内部类。场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时,就可以把这个事物设计成内部类。比如:汽车类中的发动机类,发动......
  • 解决Java中文显示乱码问题的原因与方案
    简介在Java编程中,经常会遇到中文显示乱码的问题,这给开发者带来了不少困扰。本文将深入探讨Java中文显示乱码问题的原因,并提供一些解决方案以帮助开发者解决这一问题。问题中文显示乱码通常表现为输出的中文字符变成了一些无法识别的符号或者乱码字符,这给程序的可读性和用户体......
  • Java的结构、equals字符串判断与反编译
    顺序结构Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句往下执行顺序结构是最简单的算法结构语句与语句之间,框与框之间是按上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构代码举例publicclas......
  • 熟悉又陌生的JavaWeb 第4天
    传送门JSP和JavaBean认识JavaBean在JSP中使用JavaBean为了好看,jsp里只有xml标签,也就是后来的jspx后缀文件的基础很不易读,不建议这么写<jsp:useBeanid="tagNewObj"class="com.lazyking.Student"/><jsp:setPropertyname="tagNewObj"property="id"param......
  • Java 8 新特性
    Java8Java8允许您通过::关键字传递方法或构造函数的引用。Lambda表达式List<String>names=Arrays.asList("banana","apple","orange","fruit","grape");//老版本Java排列字符串Collections.sort(names,newComparator<String>......
  • 一文学会JDBC实现java和mySQL的数据连接(尚硅谷学习课程代码+笔记+思路总结)
    JDBC是指数据库连接技术,用于java连接mySQL等数据库。本文详细介绍了尚硅谷课程中JDBC的学习内容和补充知识。概述java语言只提供规范接口,存在于java.sql.javax.sql包下,然后数据库软件根据java提供的规范实现具体的驱动代码(jar)jar包是java程序打成的一种压缩包格式,只要导入就......
  • Java多线程基础用法
    线程创建线程创建的三种方式:Thread(继承Thread类)自定义线程类继承Thread类重写run()方法。编写线程执行体创建线程对象,调用start()方法启动线程packagecom.lily.demo01;publicclassTestThreadextendsThread{@Overridepublicvoidrun(){for......
  • Java登陆第三十四天——使用Vite创建工程化的Vue3项目
    VueVue是基于标准HTML、CSS和JavaScript构建的前端框架,可以更高效地开发前端页面。ViteVite是Vue团队开发的项目管理工具。Maven的主要功能引入依赖项目管理使用Maven可以工程化的管理后端代码。npm的主要功能:引入依赖vite的主要功能:项目管理使用npm+vit......