SpringBoot2.2.X整合ElasricSearch7.8

2023-11-19

这里默认大家已经掌握es基础语法 es版本为7.8
pom

 <!--引入es-high-level-client的坐标-->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.8.0</version>
        </dependency>
        <!--ElasticSearch相关结束-->

properties配置文件

# 应用名称
spring.application.name=search
# 应用服务 WEB 访问端口
server.port=12000
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

配置类

/**
 * @create: 2022/7/2
 * @author: Tony Stark
 */
@Configuration
public class StaticSearchConfig {

    public static final RequestOptions COMMOM_OPTIONS;
    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
        COMMOM_OPTIONS=builder.build();
    }

    @Bean
    public RestHighLevelClient esRestClient(){
        return new RestHighLevelClient(RestClient.builder(
                new HttpHost("localhost",1001,"http")
        ));
    }

}

单元测试

添加数据

    @Autowired
    private RestHighLevelClient esRestClient;
     @Test
    public void testEsClient() throws IOException {
        IndexRequest indexRequest = new IndexRequest();
        indexRequest.id("1");
        indexRequest.index("bank");
        indexRequest.source("username","zhangsan","age",19);
        //添加数据     请求参数使用默认的
        esRestClient.index(indexRequest, RequestOptions.DEFAULT);
    }

检索数据

 /**
     * 检索测试
     * @throws IOException
     */
    @Test
    public void testEsSearch() throws IOException {
        SearchRequest searchRequest = new SearchRequest();
        //指定查询索引
        searchRequest.indices("bank");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        //查询所有address中带有mill的
        builder.query(QueryBuilders.matchQuery("address","mill"));

        //构造聚合条件 terms为聚合条件的名字  根据age聚合  size 显示多少条
        TermsAggregationBuilder aggregationBuilder1 = AggregationBuilders.terms("aggAgg").field("age").size(10);
        //添加聚合条件
        builder.aggregation(aggregationBuilder1);
        //聚合条件二  聚合名称为balanceAvg   根据balance求平均值
        AvgAggregationBuilder aggregationBuilder2 = AggregationBuilders.avg("balanceAvg").field("balance");
        //添加聚合条件二
        builder.aggregation(aggregationBuilder2);
        System.out.println(builder.toString());
        searchRequest.source(builder);
        //执行检索
        SearchResponse searchResponse = esRestClient.search(searchRequest,     StaticSearchConfig.COMMOM_OPTIONS);
        System.out.println(searchResponse);
        //分析结果
            //获取所有查到的数据   所有命中数据  最外层
        SearchHits hits = searchResponse.getHits();
            //获取所有响应数据中的命中数据  内层hits
        SearchHit[] hitsHits = hits.getHits();
        for (SearchHit hitsHit : hitsHits) {
            //遍历每条数据   获取索引
            String index = hitsHit.getIndex();
            long primaryTerm = hitsHit.getPrimaryTerm();
            System.out.println(index +" " +primaryTerm);
//            Map<String, Object> sourceAsMap = hitsHit.getSourceAsMap();
//            Set<Map.Entry<String, Object>> entries = sourceAsMap.entrySet();
//            for (Map.Entry<String, Object> entry : entries) {
//                System.out.println(entry.getKey());
//                System.out.println(entry.getValue());
//            }
            String sourceAsString = hitsHit.getSourceAsString();
           	//Account类为自己创建pojo类
            Account account = JSON.parseObject(sourceAsString, Account.class);
            System.out.println(account);
            //分析聚合结果  获取所有聚合数据
            Aggregations aggregations = searchResponse.getAggregations();
              //根据聚合的名字取出聚合信息
            Terms aggAgg = aggregations.get("aggAgg");
            Avg balanceAvg = aggregations.get("balanceAvg");
            for (Terms.Bucket bucket : aggAgg.getBuckets()) {
                System.out.println("年龄:"+bucket.getKey()+"------->人数:"+bucket.getDocCount());
            }
            System.out.println(balanceAvg.getName()+"平均工资---->"+balanceAvg.getValue());
        }

    }

部分结果

MallSearchApplicationTests.Account(account_number=472, balance=25571, firstname=Lee, lastname=Long, age=32, gender=F, address=288 Mill Street, employer=Comverges, email=leelong@comverges.com, city=Movico, state=MT)
年龄:38------->人数:2
年龄:28------->人数:1
年龄:32------->人数:1
balanceAvg平均工资---->25208.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot2.2.X整合ElasricSearch7.8 的相关文章

随机推荐

  • Android10.0 os定制化系列讲解导读

    一 前言 本专栏主要是作者本人在10 0 frameworks定制化实战功能系列的解读 在从事几年的frameworks定制化功能的经验的积累 开发过平板 广告机 会议机 车机等一系列系统上层定制的功能性开发 写博客的目的 一方面是整理自己
  • Centos 8 替换镜像源

    1 替换 1 1 备份 mkdir etc yum repos d bak mv etc yum repos d etc yum repos d bak 1 2 下载 curl o etc yum repos d CentOS Base r
  • 【100%通过率 】【华为OD机试真题c++ /python】寻找符合要求的最长子串【 2022 Q4 A卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 知识点双指针 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一个字符串 s 找出这样一个子串 1 该子串中的任意一个字符最多出现2次 2 该子串不包含指定
  • SQL入门书籍内容汇总

    转头一晃 SQL入门书籍看完了 并且在画思维导图和整理笔记的过程中又一次加深了印象 不过也仅仅停留在课本层面上 不进行实际操作终将不知道你有没有学会如何运用 当然肯定不会自己创建一些数据库了 这个事不用质疑的 不过却可以读懂里面的一些用法
  • 【RK3399】I3399烧写Android系统详解

    00 目录 文章目录 00 目录 01 驱动安装 02 Android镜像文件烧写 03 问题讨论 04 附录 01 驱动安装 1 1 没有安装驱动的时候 显示感叹号 1 2 解压DriverAssitant v5 1 1 zip 1 3
  • 展锐8541芯片CPU推理MNN模型加速的若干问题

    一 在只有CPU的嵌入式设备上部署AI模型时 可以采取以下方法来提高模型的运行速度 1 量化模型 将浮点数模型转换为定点数模型 可以减少模型的计算和存储需求 从而提高模型的运行速度 2 剪枝模型 通过删除模型中不必要的连接和神经元 可以减少
  • 如何安装虚拟机?安装虚拟机的详细步骤

    1 下载虚拟机软件 首先 在官方网站上下载需要的虚拟机软件 如VMware VirtualBox等 注意软件版本的兼容性 最好选择最新版本 2 安装虚拟机软件 下载完成后 双击安装文件 按照提示完成安装 期间需要设置虚拟机软件的安装路径等信
  • C语言实现推箱子小游戏

    一 设计目的 用简单的C语言知识制作的推箱子游戏 通过上下左右键将所有箱子移动到目标位置 2 让我们更好地了解和巩固C语言知识 并实际运用 同时运用一些不太常见的知识点 二 功能描述 1 模块功能 本程序可分为初始界面 进行游戏 判定通关三
  • C++ list——push_back()与insert()

    push back 是把插入元素直接放入链表结尾 不多表述 insert 是把元素插入指定位置 摘自MSDN IDE VS2012 Parameters Parameter D
  • 使用UncaughtExceptionHandler进行未知异常得捕获

    UncaughtExceptionHandler UncaughtExceptionHandler使用场景 Thread类源代码 UncaughtExceptionHandler使用代码 UncaughtExceptionHandler使用
  • 场景法

    场景法 通过运用场景来对系统的功能点或业务流程的描述 从而提高测试效果 场景法一般包含基本流和备用流 从一个流程开始 通过描述经过的路径来确定的过程 经过遍历所有的基本流和备用流来完成整个场景 基本流 通过一个正确的事件流实现正确流程 备选
  • chatgpt赋能python:如何用Python实现抢购?

    如何用Python实现抢购 Python是一种灵活多样的编程语言 可以用它来完成各种任务 其中之一就是抢购 在电商大促销的节日 抢购商品通常需要竞争非常激烈 但是使用Python编写抢购脚本可以让您获得更高的成功率 以下是一些建议 通过Py
  • ①GD32Keil编译环境搭建及编译Demo

    进入 兆易官网 下载对应芯片的演示套件 下载解压后文件内容如下 安装keil5 我的keil5 下的pack包 打开demo包下的一个例程 提示如下
  • vue-router 2.0 常用基础知识点之router.push()

    router push location 除了使用
  • 红帽rhce认证考试科目有哪些?

    红帽RHCE认证考试主要考察的科目包括 RH124 主要考察Linux基础 文件和目录管理 用户和组管理 文件和目录权限管理 进程管理 系统服务 网络配置 日志分析等内容 RH134 主要考察自动化安装 文件编辑 任务计划 系统进程优先级管
  • 在Linux中安装Cmake过程中,遇到有关于openSSL的问题

    在Linux中安装Cmake过程中 遇到有关于openSSL的问题 以下是个人在安装cmake的过程中遇到的一些问题 如有什么错误之处欢迎各位大佬留言 共同进步 提示 Could Not Find OpenSSL try to set th
  • 【CV中的Attention机制】模块梳理合集

    文章目录 0 总述 1 SENet CVPR18 2 SKNet CVPR19 3 CBAM ECCV18 BAM BMVC18 scSE MICCAI18 4 Non Local Network CVPR19 5 GCNet ICCVW1
  • 手把手教你爬取并下载英雄联盟所有英雄皮肤高清大图

    利用requests和urlretrieve爬取并下载英雄联盟所有英雄皮肤高清大图 不知道屏幕前的你是不是也是一名loler 最近学习爬虫 印象中以前看过爬取英雄联盟的帖子 所以也就自己试了试 结果很是满意 先上效果图 亲女儿拉克丝 下面开
  • IO多路复用--[select

    因为在简历上写了netty的项目 因此还是将网络底层的那点东西搞清楚 首先希望明确的是 BIO NIO IO多路复用这是不同的东西 我会在本文中详细讲出来 本文参考资料 JAVA IO模型 IO多路复用 select poll epoll介
  • SpringBoot2.2.X整合ElasricSearch7.8

    这里默认大家已经掌握es基础语法 es版本为7 8 pom