Elasticsearch(二)集成Spring Boot 基本的API操作

news2024/11/26 18:46:16

目录

一、集成Spring Boot

 1、创建项目

2、pom文件 查看springboot集成的依赖

3、增加es的config类

二、索引相关API

1、创建索引

2、获取索引,判断其是否存在

3、删除索引

三、文档相关API

1、添加文档

2、获取文档,判断是否存在

3、获取文档信息

4、更新文档信息

5、删除文档信息

6、同文档批量导入数据

7、条件查询文档信息


一、集成Spring Boot

Java使用对应的rest风格调用ES是通过client依赖包进行操作的

配置需要的 maven 依赖

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

 1、创建项目

如果创建项目后拉取不到对应依赖,springboot 可以选用低一些的稳定版本例如 2.3.2.RELEASE 版本

2、pom文件 查看springboot集成的依赖

(当然也可自定义ES版本)

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

3、增加es的config类

package com.example.elasticsearch_springboot_demo.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ElasticSearchClientConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http"),
                        new HttpHost("localhost", 9201, "http")));
        return client;
    }
}

二、索引相关API

1、创建索引

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

    /**
     * 【索引相关】索引创建
     */
    @Test
    void testCreateIndex() throws IOException {
        // 1、创建索引请求
        CreateIndexRequest request = new CreateIndexRequest("m_index");
        // 2、客户端执行请求 IndicesClient,执行创建请求 并获得响应结果
        CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
        // 3、查看响应结果
        System.out.println(createIndexResponse);
    }
}

2、获取索引,判断其是否存在

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

   /**
     * 【索引相关】获取索引,判断其是否存在
     */
    @Test
    void  testExistIndex() throws IOException {
        // 1、获取索引请求
        GetIndexRequest request = new GetIndexRequest("m_index");
        // 2、客户端执行请求 IndicesClient,执行请求后获得是否存在结果
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        // 3、查看结果
        System.out.println(exists);
    }
}

3、删除索引

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

   /**
     * 【索引相关】删除索引
     */
    @Test
    void  testDeleteIndex() throws IOException {
        // 1、删除索引请求
        DeleteIndexRequest request = new DeleteIndexRequest("m_index");
        // 2、客户端执行请求 IndicesClient,执行删除请求 并获得响应结果
        AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
        // 3、查看结果
        System.out.println(delete.isAcknowledged());
    }
}

三、文档相关API

先定义一个User类

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class User {

    private String name;

    private Integer age;

}

1、添加文档

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

   /**
     * 【文档相关】添加文档
     */
    @Test
    void  testAddDocument() throws IOException {
        // 1、user对象
        User user = new User("marvin", 26);

        // 2、创建请求对象,并组装文档数据
        IndexRequest request = new IndexRequest("m_index");
        // 定义文档内容
        // 规则 put /m_index/_doc/1
        request.id("1");
        request.timeout(TimeValue.timeValueSeconds(1));
        request.timeout("1s");
        //将user数据放入请求json
        request.source(JSON.toJSONString(user), XContentType.JSON);

        // 3、客户端发送请求,获取响应的结果
        IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
        // 4、查看结果
        System.out.println(indexResponse.toString());// 对应的文档信息
        System.out.println(indexResponse.status());// 执行命令的返回状态

    }
}

2、获取文档,判断是否存在

get /index/doc/1

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

   /**
     * 【文档相关】获取文档,判断是否存在 get /index/doc/1
     */
    @Test
    void testIsExistsDocument() throws IOException {
        GetRequest getRequest = new GetRequest("m_index", "1");
        // 不获取返回的_source 的上下文
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        getRequest.storedFields("_none_");

        boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
    }
}

3、获取文档信息

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

   /**
     * 【文档相关】获取文档信息
     */
    @Test
    void testGetDocument() throws IOException {
        GetRequest getRequest = new GetRequest("m_index", "1");
        GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(documentFields.getSourceAsString());// 打印文档内容
        System.out.println(documentFields);// 返回的全部内容和命令是一样的
    }
}

4、更新文档信息

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

   /**
     * 【文档相关】更新文档信息
     */
    @Test
    void testUpdateDocument() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("m_index", "1");
        updateRequest.timeout("1s");

        User user = new User("jerry", 28);
        updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);

        UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(updateResponse.status());
    }
}

5、删除文档信息

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

   /**
     * 【文档相关】删除文档信息
     */
    @Test
    void testDeleteDocument() throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest("m_index", "1");
        deleteRequest.timeout("1s");

        DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println(deleteResponse.status());
    }
}

6、同文档批量导入数据

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

   /**
     * 【文档相关】特殊的,批量导入数据
     */
    @Test
    void  testBulkDocument() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");

        List<User> userList = new ArrayList<>();
        userList.add(new User("marvin1", 26));
        userList.add(new User("marvin2", 26));
        userList.add(new User("marvin3", 26));
        userList.add(new User("marvin4", 26));
        userList.add(new User("marvin5", 26));
        userList.add(new User("marvin6", 26));

        // 批处理请求
        for (int i=0; i<userList.size();i++){
            // 批量更新和批量删除,就再这里修改对应请求就可以了
            bulkRequest.add(new IndexRequest("m_index")
                    .id(""+(i+1))
                    .source(JSON.toJSONString(userList.get(i)), XContentType.JSON));
        }
        BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulkResponse.hasFailures());// 是否失败,返回false 代表成功!

    }
}

7、条件查询文档信息

@SpringBootTest
class ElasticSearchSpringbootDemoApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

   /**
     * 查询
     * searchRequest 搜索请求
     * SearchSourceBuilder 搜索条件构造
     */
    @Test
    void testSearch() throws IOException {
        // 1、创建搜索请求
        SearchRequest searchRequest = new SearchRequest("m_index");

        // 2、构建搜索条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        /**
         * 查询条件,可以使用QueryBuilders快速匹配
         */
        //精确匹配:termQuery
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "marvin");
        //匹配所有
        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();

        sourceBuilder.query(termQueryBuilder);
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));


        // 3、将查询条件放入请求
        searchRequest.source(sourceBuilder);
        // 4、执行请求
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        // 5、所有结果都封装在 SearchHits 里面,通过getHits()得到
        System.out.println(JSON.toJSONString(searchResponse.getHits()));
        System.out.println("===================================");

        //循环输出每一条数据结果为map结构
        for (SearchHit documentFields : searchResponse.getHits().getHits()){
            System.out.println(documentFields.getSourceAsMap());// 转换为map结构
        }

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2207230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java后端面试----某团一面

美团一面 1.介绍一下你的第一个项目 这个就不多说了&#xff0c;主要是根据自己的简历上面的项目进行一个简短的概括使用的技术栈和什么背景解决了什么问题等等。 2.线程安全的类有哪些&#xff0c;平时有使用过哪些&#xff0c;主要解决什么问题 在Java中线程安全的类比如…

对后端返回的日期属性进行格式化(扩展 Spring MVC 的消息转换器)

格式化之前 格式化之后&#xff1a; 解决方式 方式一 在属性中加上注解&#xff0c;对日期进行格式化 JsonFormat(pattern "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//JsonFormat(pattern &quo…

echarts按需引入解决项目大小问题

背景&#xff1a; 按需加载缩减项目大小&#xff0c;提升项目性能和可用性 实现&#xff1a; 创建echarts.js main.js进行配置 页面中引用 效果 全量导入 按需加载&#xff1a;

Chrome清除nslookup解析记录 - 强制http访问 - 如何禁止chrome 强制跳转https

步骤&#xff1a; 地址栏输入 chrome://net-internals/#hsts在Delete domain 栏的输入框中输入要http访问的域名&#xff0c;然后点击“delete”按钮最后在Query domain 栏中搜索刚才输入的域名&#xff0c;点击“query”按钮后如果提示“Not found”即可&#xff01; 办法来自…

Linux系统:apt upgrade与apt update 命令的作用

一.sudo apt update命令 sudo apt update命令的主要作用是更新本地软件包列表。‌ 它不会下载或安装新的软件包&#xff0c;而是更新本地系统中软件包的列表&#xff0c;以反映远程存储库中的最新可用软件包信息。这确保了软件包管理器&#xff08;APT&#xff09;具有最新的软…

第十六周周报:单发的目标检测系列

目录 摘要 Abstract 一、SSD 1.1 模型结构 1.2 代码 二、YOLO 三、Termius 总结 摘要 本周主要学习单阶段的目标检测算法&#xff0c;如SSD、YOLO模型。详细学习了每个模型的原理&#xff0c;以及SSD和YOLO模型之间的异同。在本篇博客中将展示SSD的PyTorch实现代码&am…

Django使用uwsgi和nginx进行手动部署

在Django项目中使用uWSGI和Nginx进行部署是一种常见的生产环境配置。以下是一个详细的步骤指南&#xff0c;帮助你完成这个过程。 前提条件 有一个已经开发好的Django项目。服务器已安装Python、pip、Nginx和uWSGI。有一个有效的域名(可选&#xff0c;但推荐)。 步骤一&#xf…

CPU指令融合技术概述

什么是指令融合&#xff1f; 某些指令&#xff0c;例如add $3,$2,0, 只会使用rd/rs两个字段&#xff0c;但是这条指令却占用了全部32个bit, 这样会使得代码密度不高&#xff0c;指令域的有效利用率不高&#xff1b;这样&#xff0c;在实现某些功能的情况下&#xff0c;会使得CP…

Java创建线程池和线程池的七个核心参数

线程池的工作流程是&#xff1a;当一个任务被提交到线程池时&#xff0c;线程池会根据当前的线程数量和工作队列的状态来决定如何处理这个任务。如果当前运行的线程数量小于corePoolSize&#xff0c;则创建新线程执行任务&#xff1b;如果大于等于corePoolSize&#xff0c;则将…

毕设开源 大数据电影数据分析与可视化系统(源码+论文)

文章目录 0 前言1 项目运行效果2 设计概要3 最后 0 前言 &#x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师…

完全免费安卓远程安卓方案:FRP+ADB甲壳虫方案,远程手机不是问题。

引言 在当今这个数字化时代&#xff0c;无论是在个人项目还是商业应用中&#xff0c;能够从公网访问到内网设备的能力变得越来越重要&#xff0c;尤其是安卓终端设备&#xff0c;在必要的情况下&#xff0c;从安卓远程到安卓进行紧急指导救援是未来一种重要的趋势. 通过合理的…

Java - WebSocket

一、WebSocket 1.1、WebSocket概念 WebSocket是一种协议&#xff0c;用于在Web应用程序和服务器之间建立实时、双向的通信连接。它通过一个单一的TCP连接提供了持久化连接&#xff0c;这使得Web应用程序可以更加实时地传递数据。WebSocket协议最初由W3C开发&#xff0c;并于2…

3种常用的缓存读写策略详解

在详解3种常用的缓存读写之前&#xff0c;我们先要了解什么事缓存读写。 缓存读写是指在使用缓存技术时&#xff0c;对数据进行读取和更新的操作过程。缓存是一种用于提高系统性能和可扩展性的技术&#xff0c;通过减少对慢速存储&#xff08;如数据库&#xff09;的访问次数&…

CAN总线仲裁机制

文章目录 1、什么是CAN总线仲裁&#xff1f;2、仲裁机制3、仲裁过程 1、什么是CAN总线仲裁&#xff1f; CAN总线上的每个节点都能监测到总线上发送的数据&#xff0c;当总线空闲时每个节点都能够进行报文发送&#xff0c;多个节点同时发送报文时&#xff0c;最终由哪个节点来进…

中间件有哪些分类?

中间件的分类 中间件是位于操作系统和应用程序之间的软件&#xff0c;它提供了一系列服务来简化分布式系统中的应用程序开发和集成。中间件可以根据其功能和用途被分为不同的类别。以下是中间件的一些主要分类&#xff1a; 1. 通信处理&#xff08;消息&#xff09;中间件&am…

Sentinel 1.80(CVE-2021-44139)

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性 Report a Sentinel Security Vulnerability …

华为eNSP实验:以太网交换---MAC地址漂移防止与检测

一&#xff1a;MAC地址漂移 MAC地址漂移是一种网络攻击技术&#xff0c;它利用了网络设备&#xff08;如交换机&#xff09;的动态学习特性来改变网络流量的路径。这种攻击可能导致数据包被错误地转发到未经授权的设备上&#xff0c;从而造成信息泄露或拒绝服务攻击。为了防止…

ViirtualBox+Vagrant快速创建虚拟机,固定IP地址

ViirtualBoxVagrant配置虚拟机共分三步 1.ViirtualBox的安装 2.Vagrant的安装 3.VirtualBoxVagrant配置虚拟机 1.安装virtual Box 2.进入官网 下载 https://www.virtualbox.org/wiki/Downloads 下载对应版本 https://www.virtualbox.org/wiki/Download_Old_Builds_6_1 使用…

物联网中的远距离通信LoRa无线技术

LoRa&#xff08;Long Range Radio&#xff09;远距离无线传输技术是基于扩频调制技术的低功耗、远距离无线通信技术&#xff0c;采用扩频调制&#xff0c;通过将原始信号与一个伪随机序列进行编码&#xff0c;使得信号的带宽显著增加&#xff0c;从而在更宽的频谱上传输。这种…

《征服数据结构》并查集(DSU)

摘要&#xff1a; 1&#xff0c;并查集的介绍 2&#xff0c;并查集的查找 3&#xff0c;并查集的合并 1&#xff0c;并查集的介绍 并查集(Disjoint-set data structure&#xff0c;不交集数据结构)是用于处理一些不交集的合并以及查询问题&#xff0c;它是非常重要的一种数据结…