SpringBoot集成ES、使用Java API对其进行简单的测试

news2025/1/9 2:47:34

文章目录

  • 版本信息记录
  • 使用Java API配置ES客户端实现集成
    • pom.xml添加相关的Dependency
    • 使用javaConfig构建RestHighLevelClient对象
  • 给ES中存储文档数据,当然也可以更新文档数据
  • search API:搜索 address 中包含mill的所有人的年龄分布以及平均年龄
  • search API:按照年龄聚合,并且请求这些年龄段的这些人的平均薪资

版本信息记录

本博客记录SpringBoot集成ES相关组件的版本信息如下

名称版本号
ES服务端7.14.0
SpringBoot2.6.13
elasticsearch-rest-high-level-client7.15.2

温馨提示:部分配置可能因版本而存在差异,比如Java Client API当前版本就和最新版本存在巨大差异。因此具体解决方案请参照官方文档 《Elasticsearch-client》

使用Java API配置ES客户端实现集成

官方文档入口
在这里插入图片描述

pom.xml添加相关的Dependency

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

在这里插入图片描述

使用javaConfig构建RestHighLevelClient对象

    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost(esHost, port, schema)));
        return client;
    }

官方提供了如下集群模式下的多节点配置示例:

      RestHighLevelClient client = new RestHighLevelClient(
              RestClient.builder(
                      new HttpHost("localhost", 9200, "http"),
                      new HttpHost("localhost", 9201, "http")));

在此也可以将RequestOptions进行配置

    public static final RequestOptions COMMON_OPTIONS;
    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
        // builder.addHeader("Authorization", "Bearer " + TOKEN);
        // builder.setHttpAsyncResponseConsumerFactory(
        //         new HttpAsyncResponseConsumerFactory
        //                 .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));

        COMMON_OPTIONS = builder.build();
    }

完成的JavaConfig配置如下图所示:
在这里插入图片描述

给ES中存储文档数据,当然也可以更新文档数据

首先使用如下代码片段给ES的指定Index中存储文档

    @Test
    void testIndexRequest() throws IOException {
        // 即将存储到ES中的文档
        Product product = new Product("bk-1", "City bike", 123.0);
        // 指定Index
        IndexRequest indexReq = new IndexRequest("product");
        // 给该文档设置id,默认也会自动生成
        indexReq.id(product.getSkuId());
        // 将product实例序列化
        indexReq.source(JSON.toJSONString(product), XContentType.JSON);
        // 进行存储操作
        IndexResponse response = restHighLevelClient.index(indexReq, ElasticSearchConfig.COMMON_OPTIONS);
        System.out.println("response = " + response);
    }

如图所示,存储文档成功;
在这里插入图片描述
如果想更新该文档中的数据也可以使用如上代码片段,如图所示
在这里插入图片描述

search API:搜索 address 中包含mill的所有人的年龄分布以及平均年龄

在这里插入图片描述

    @Test
    void testESSearch() throws IOException {
        // 构建一个查询请求,指定的Index=bank
        SearchRequest searchReq = new SearchRequest("bank");

        // SearchSourceBuilder就是DSL;即检索条件
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        // query match_all
        searchSourceBuilder.query(QueryBuilders.termQuery("address","mill"));
        // 构建age分布的聚合
        TermsAggregationBuilder ageAgg = AggregationBuilders
                .terms("ageAgg").field("age").size(10);
        searchSourceBuilder.aggregation(ageAgg);
        // 构建age的平均聚合
        AvgAggregationBuilder ageAvg = AggregationBuilders
                .avg("ageAvg").field("age");
        searchSourceBuilder.aggregation(ageAvg);

        // 将检索条件封装给查询请求
        searchReq.source(searchSourceBuilder);
        SearchResponse result = restHighLevelClient.search(searchReq, ElasticSearchConfig.COMMON_OPTIONS);
        System.out.println("result = " + result);
    }

search API:按照年龄聚合,并且请求这些年龄段的这些人的平均薪资

在这里插入图片描述


    @Test
    void testAgeAvg() throws IOException {
        SearchRequest searchReq = new SearchRequest("bank");

        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(QueryBuilders.matchAllQuery())
                .aggregation(AggregationBuilders.terms("ageAgg").field("age").size(30)
                        .subAggregation(AggregationBuilders.avg("ageGroupBalanceAvg").field("balance")));
        searchReq.source(sourceBuilder);
        SearchResponse result = restHighLevelClient.search(searchReq, ElasticSearchConfig.COMMON_OPTIONS);
        System.out.println("result = " + result);
    }

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

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

相关文章

如何通过卖虚拟资料月入10万?看这几个卖资料案例

我微信好友里&#xff0c;有近4000个是做创业博主的同行。 你可能会好奇&#xff0c;其中60%的人都通过卖虚拟资料起家&#xff0c;这到底说明了什么呢&#xff1f; 嗯&#xff0c;事实上&#xff0c;这就意味着这些人选择了网络赚钱的首选项目&#xff0c;那就是销售各种资料…

UI 自动化测试框架:PO模式+数据驱动

1. PO 设计模式简介 什么是 PO 模式&#xff1f; PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类&#xff0c;并以页面为单位来写测试用例&#xff0c;实现页面对象和测试用例的分离。 PO 模式的设计思想与…

【C语言基础】函数的参数是指针

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

01、yudao-项目简介、功能列表、技术选型.md

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;以实战为线索&#xff0c;逐步深入SpringSecurity相关知识相关知识&#xff0c;打造完整的SpringSecurity学习步骤&#xff0c;提升工程化编码能力和思维能力&#xff0c;写出高质量代码。希望大家都能够从中有所收获&#…

干货分享|SCI论文投稿过程中能否修改作者信息和单位?(内附模板)

在提交论文过程中&#xff0c;许多新老作者在投稿返修阶段或者文章被接收后想要更改作者或者是更改作者单位。那么SCI论文可以修改作者及单位吗?如果能改&#xff0c;在哪一阶段改&#xff0c;又要如何改&#xff1f;今天小编和大家聊聊不同情况下的处理方式。 发表学术论文的…

<蓝桥杯软件赛>零基础备赛20周--第2周

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…

TCP三次握手和四次挥手以及TCP的11个状态

一、三个握手示意图 二、四次挥手示意图

HugeGraph Hubble 配置 https 协议的操作步骤

背景 HugeGraph 图数据库的 Server 端支持 https 配置&#xff0c;官方文档中有说明相对比较容易&#xff0c;而 Hubble 部署过程都是 http的。 我们有一个应用要嵌入 hubble 页面&#xff0c;而且部署为 https &#xff0c;那么 Hubble 是否支持配置 https 呢&#xff1f;网…

mysql索引为啥使用B+tree?

mysql索引为啥使用Btree&#xff1f; 索引数据结构 二叉树 红黑树 Hash表 B-Tree 二叉树&#xff08;Binary Tree&#xff09; 每个节点最多只有两个子节点&#xff0c; 左边的子节点都比当前节点小&#xff0c;右边的子节点都比当前节点大。 一棵深度为k&#xff0c;且有2…

私有化部署的理想选择,WorkPlus成为企业微信、钉钉的完美替代方案

在企业协同沟通领域&#xff0c;企业微信、钉钉、飞书和Teams等大厂平台一度成为主流选择&#xff0c;然而&#xff0c;它们的云端部署往往限制了企业的自主发展和核心数据的安全掌控。WorkPlus作为一款集开放性、灵活性和安全性于一体的沟通协作平台&#xff0c;成为了完美替代…

MySQL -- 数据类型

MySQL – 数据类型 文章目录 MySQL -- 数据类型一、数据类型1.数据类型分类2.数值类型2.1.tinyint2.2.bit2.3小数类型 3.字符串类型3.1.char3.2.varchar 4.时间和日期类型5.enum和set 一、数据类型 1.数据类型分类 2.数值类型 2.1.tinyint tinyint类型的数值范围是-128 ~ 127…

【蓝桥】串门

1、题目 问题描述 过年小蓝想要回家串门。 蓝桥村可以抽象为 n n n 个节点&#xff0c; n − 1 n-1 n−1 条边的一棵树&#xff0c;每条边有边权长度 w i w_i wi​。 小蓝可以选择任意一个点作为起点&#xff0c;然后选择一条路径&#xff0c;可以访问每个节点至少一次。…

使用vue3从零开始手撸一个后台管理架子。代码开源

毒蘑菇 - 管理 毒蘑菇 - 管理 开源地址 https://github.com/wurencaideli/dumogu-admin 线上DEMO https://admin.dumogu.top/ 吐槽地址 https://txc.qq.com/products/613546 包含后端服务&#xff0c;前端。前端采用vue3&#xff0c;vite&#xff0c;element-plus&#xff0…

详解接近传感芯片的工作原理及应用领域

接近传感芯片是代替限位开关等接触式检测方式&#xff0c;以无需接触检测对象进行检测为目的的传感器的总称。能检测对象的移动信息和存在信息转换为电气信号。在换为电气信号的检测方式中&#xff0c;包括利用电磁感应引起的检测对象的金属体中产生的涡电流的方式、捕测体的接…

初识Java 之 入门篇(新手必看)

博主回归学习状态的第二篇文章&#xff0c;希望对大家有所帮助 今日份励志文案:我愿用努力去弥补&#xff0c;跟别人天赋的差距 大家一起加油&#xff01;&#xff01;&#xff01;&#xff01; 目录 一.初识Java 二.编写和运行第一给Java程序时&#xff0c;可能会遇到的一些…

做自媒体一定要知道这个配音软件~

我们生活在一个飞速发展、变化多端的时代&#xff0c;科技不断创新&#xff0c;信息更新迅速。在这样一个时代里&#xff0c;许多年轻人选择投身短视频和自媒体行业。无论是专注于自媒体&#xff0c;还是副业分享业余时间记录生活的Vlog&#xff0c;都需要涉及视频配音和制作方…

ExcelPatternTool 开箱即用的Excel工具包现已发布!

文章目录 ExcelPatternTool功能特点&#xff1a;快速开始使用说明常规类型高级类型Importable注解Exportable注解IImportOption导入选项IExportOption导出选项单元格样式StyleMapping样式映射使用数据库作为数据源 示例Sample1&#xff1a;不同类型字段导出Sample2&#xff1a;…

CleanMyMac X破解许可证2023最新

Mac OS已经成为许多人的选择。作为苹果&#xff08;Apple&#xff09;公司独有的操作系统&#xff0c;Mac OS以其稳定性、安全性和用户友好性而闻名于世。本文将带你了解Mac OS是什么系统&#xff0c;有什么特点和优势&#xff0c;帮助读者全面了解这一操作系统&#xff0c;并为…

优化改进 | YOLOv2算法超详细解析(包括诞生背景+论文解析+技术原理等)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。YOLOv2是YOLO&#xff08;You Only Look Once&#xff09;目标检测算法的第二个版本&#xff0c;它在YOLOv1的基础上做了很多改进&#xff0c;包括使用更深的卷积神经网络Darknet-19作为特征提取器、使用Batch Normalizati…

Kubernetes 的有状态和无状态服务

Author&#xff1a;rab 目录 前言一、无状态服务案例1.1 yml 案例1.2 扩容与缩容1.2.1 扩容1.2.2 缩容 1.3 暂停与恢复1.3.1 暂停1.3.2 恢复 1.4 回滚 二、有状态服务案例2.1 yml 案例2.2 扩容与缩容2.2.1 扩容2.2.2 缩容 总结 前言 在 Kubernetes&#xff08;k8s&#xff09;…