elasticSearch从零整合springboot项目实操

news2025/5/26 0:10:38

 type会被弃用 ,就是说之后的elasticSearch中只会存在 索引(indices) 和  一行(document)  和字段(fields)

elasticSearch 和solr的区别最大的就是 es对应的 是 json的格式 。 solr有xml和josn等等。但是es更强

核心数据原理

对于某个字段搜索出来的结果有很多, 更具相似的设置对应的文档的权重进行排序。

就像是这样建立索引

             

        

ik分词器,如果想要自定义的搜索的标签可以自行加到ik分词器中。ik分词器作为一个插件,需要手动的添加到elasticSearch中的plugin中。 

分词算法,有ik_smart 和ik_max_word ,其中ik_smart为最少切分 ,ik_max_word是最细粒度切分。 

ik_max_word:能够将所有的可能都展示出来

ik_smart: 展示的比较少

如何定义自定义的分词

可以看见 狂神说,不是一个分词。

可以在ik分词器中自定义一个 狂神说

之后启动 es 和kibana 的bat ,再npm run start  页面head 

这样,狂神说就变成了一个分词

es是支持Rest风格的api

这里进行添加数据

这里尝试在同一个索引库中添加  类属于不同类型 的数据

结论:直接报错。 说在7.0版本上一个索引库只能够有一个类型 。可以看出 这个类型没有任何作用。  对应如前面说所的,type这个字段在8.0将会被删除。

其实这玩意本质就是一个数据库。

get 这就不用说了,

上手springboot整合es  Test

@SpringBootTest
class JueJiuApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
    TokenGenerate tokenGenerate;

@Autowired
    RestHighLevelClient highLevelClient;


@Autowired
    EssayService essayService;
    @Test
    void contextLoads() {

        }
        /**处理 Essay的数据
         *
         * 这里将mysql的数据都batch到es中
         *
         * */
        @Test
    void  mysqlAndES(){
            List<Essay> list = essayService.list();
           list.forEach(one->{
               System.out.println(one.toString());


           });

        }
        @Test
   void  createIndex() throws IOException {
     /**
      * 创建一个索引
      * */
       String   indexName = "juejiu";
       CreateIndexRequest  createIndexRequest = new CreateIndexRequest(indexName);
       highLevelClient.indices().create( createIndexRequest , RequestOptions.DEFAULT);

    /**查询索引的信息
     * */

//            GetIndexRequest getIndexRequest = new GetIndexRequest(indexName);
//            GetIndexResponse getIndexResponse = highLevelClient
//                    .indices().get(getIndexRequest, RequestOptions.DEFAULT);
//            System.out.println("----------------打印出索引的信息" + getIndexResponse);

    /**
     *  删除索引信息
     * */
//            DeleteIndexRequest  deleteIndexRequest = new DeleteIndexRequest(indexName)    ;
//            AcknowledgedResponse delete = highLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
//            System.out.println("----------------删除出索引的信息" + delete.toString());
//            System.out.println("----------------删除出索引的信息" + delete.isAcknowledged());


        }

    @Test
  void   saveToES() throws IOException {
      String   indexName = "juejiu";
       IPage<EssayDto> iPage = new Page<>();
       iPage.setCurrent(1);
       iPage.setSize(100);
        EssayVo essayVo = new EssayVo();
        IPage<EssayDto> page = essayService.getPage(iPage, essayVo);

        BulkRequest bulkRequest = new BulkRequest();

        page.getRecords().forEach(one->{
          IndexRequest indexRequest = new IndexRequest()
                  .source(JSON.toJSONString(one), XContentType.JSON)
                  .index(indexName);
          bulkRequest.add(indexRequest);
      });

      BulkResponse bulkResponse = highLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
      System.out.println("---------bulk的结果"+ (!bulkResponse.hasFailures()));

  }

  @Test
    /***/

  void  searchResult() throws IOException {
      String   indexName = "juejiu";
      SearchRequest searchRequest = new SearchRequest(indexName);
      SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
      Query query = new Query(4,1);
      searchSourceBuilder.from(query.getCurrent());
      searchSourceBuilder.size(query.getSize());

      /***
       * 添加查询条件
       * */



      searchRequest.source(searchSourceBuilder);

      SearchResponse search = highLevelClient.search(searchRequest, RequestOptions.DEFAULT);
      System.out.println(search);
      System.out.println("-----------");
      System.out.println(search.getHits());
      search.getHits().forEach(one->{


          System.out.println("单个的hit"+one.getSourceAsString());
      });




  }

springboot整合ES实现 论坛的 es替换查询

  String   indexName = "juejiu";
        SearchRequest searchRequest = new SearchRequest(indexName);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.from(query.getCurrent());
        searchSourceBuilder.size(query.getSize());

        /***
         * 添加查询条件
         * */

        searchRequest.source(searchSourceBuilder);
        SearchResponse search = highLevelClient.search(searchRequest, RequestOptions.DEFAULT);


           /**
            * 暂停原代码  不返回page对象
            *
            * */
//
//        System.out.println("-----------------------------"+query.toString());
//            System.out.println("-----------------------------"+essayVo.toString());
//        IPage<EssayDto> iPage = new Page<>();
//        iPage.setCurrent(query.getCurrent());
//        iPage.setSize(query.getSize());
//        IPage<EssayDto> list = essayService.getPage(iPage,essayVo);
//        HashMap hashMap = new HashMap<>();
//      list.getRecords().stream().map(one -> {
//            Date createTime = one.getCreateTime();
//            String essayTitle = one.getEssayTitle();
//            hashMap.put(createTime, essayTitle);
//            return  null;
//        }).collect(Collectors.toList());
//        System.out.println("----------------------------------------");
//        System.out.println(hashMap);
       IPage<EssayDto> iPage = new Page();
       List<EssayDto> list = new ArrayList<>();
        search.getHits().forEach(one->{
            Map<String, Object> sourceAsMap = one.getSourceAsMap();
            EssayDto essayDto = new EssayDto();
            essayDto.setEssayId((Integer) sourceAsMap.get("essayId"));
            essayDto.setEssayTitle(sourceAsMap.get("essayTitle").toString());
            essayDto.setEssayContext(sourceAsMap.get("essayContext").toString());
            essayDto.setEssayPageViewTimes((Integer) sourceAsMap.get("essayPageViewTimes"));
            essayDto.setCreateTime(Date.from(LocalDateTime.parse(sourceAsMap.get("createTime").toString(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).atZone(ZoneId.systemDefault()).toInstant()));
            Map<String, Object> userMap = (Map<String, Object>) sourceAsMap.get("user");
            User user = new User();
            user.setId((Integer) userMap.get("id"));
            user.setAccount(userMap.get("account").toString());
            user.setPassword(userMap.get("password").toString());

            user.setAvatar(userMap.get("avatar").toString());
            user.setPhone(userMap.get("phone").toString());
            user.setRealName(userMap.get("realName").toString());
            user.setEmail(userMap.get("email").toString());
            user.setSex((Integer) userMap.get("sex"));
//            user.setBirthday(String.valueOf(Date.parse(userMap.get("birthday").toString())));
            essayDto.setUser(user);
            Map<String, Object> tagMap = (Map<String, Object>) sourceAsMap.get("tag");
            Tag tag = new Tag();
            tag.setTagId((Integer) tagMap.get("tagId"));
            tag.setTagName(tagMap.get("tagName").toString());
            essayDto.setTag(tag);
            essayDto.setUserId((Integer) sourceAsMap.get("userId"));
            essayDto.setEssayPageViewTimes((Integer) sourceAsMap.get("essayPageViewTimes"));
            essayDto.setCreateTime(Date.from(LocalDateTime.parse(sourceAsMap.get("createTime").toString(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).atZone(ZoneId.systemDefault()).toInstant()));
            essayDto.setEssayId((Integer) sourceAsMap.get("essayId"));
            essayDto.setUser(user);
            essayDto.setTag(tag);
            list.add(essayDto);
        });
        iPage.setRecords(list);
        iPage.setCurrent(query.getCurrent());
        iPage.setSize(query.getSize());

        return Result.SUCCESS(iPage);

单体的es 实现easy

后续提供更新策略 和多条件等结果

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

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

相关文章

2024mathorcup妈妈杯C题数学建模无水印高质量论文新鲜出炉

以下展示部分正文内容&#xff1a;完整内容见文末名片 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片…

全新付费进群系统源码 带定位完整版 附教程

搭建教程 Nginx1.2 PHP5.6-7.2均可 最好是7.2 第一步上传文件程序到网站根目录解压 第二步导入数据库&#xff08;dkewl.sql&#xff09; 第三步修改/config/database.php里面的数据库地址 第四步修改/config/extra/ip.php里面的域名 第四步设置伪静态thinkphp 总后台账…

ML在骨科手术术前、书中、术后方法应用综述【含数据集】

达芬奇V手术机器人 近年来,人工智能(AI)彻底改变了人们的生活。人工智能早就在外科领域取得了突破性进展。然而,人工智能在骨科中的应用研究尚处于探索阶段。 本文综述了近年来深度学习和机器学习应用于骨科图像检测的最新成果,描述了其贡献、优势和不足。以及未来每项研究…

哈希函数算法

概述 为了实现哈希集合这一数据结构&#xff0c;有以下几个关键问题需要解决&#xff1a; 哈希函数&#xff1a;能够将集合中任意可能的元素映射到一个固定范围的整数值&#xff0c;并将该元素存储到整数值对应的地址上。冲突处理&#xff1a;由于不同元素可能映射到相同的整…

干货 | 百亿节点,毫秒级延迟,基于nebula的大规模图应用实践

背景 2017年9月携程金融成立&#xff0c;在金融和风控业务中&#xff0c;有多种场景需要对图关系网络进行分析和实时查询&#xff0c;传统关系型数据库难以保证此类场景下的关联性能&#xff0c;且实现复杂性高&#xff0c;离线关联耗时过长&#xff0c;因此对图数据库的需求日…

TypeScript 忽略红色波浪线

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…

【noVNC】使用noVNC实现浏览器网页访问vnc(基于web的远程桌面)

1.VNC本身提供的http连接方式&#xff0c;可传输文件&#xff0c;画面有卡顿&#xff0c;需要安装jre 2.noVNC访问方式&#xff0c;不可传输文件&#xff0c;画面较为流畅&#xff0c;不用安装插件运行环境 一、noVNC 是什么 Web 端的Vnc软件&#xff0c;通过noVNC&#xff0…

计算机体系架构

冯诺依曼架构 我们编写的程序存储在哪里呢&#xff1f;CPU内部的结构其实很简单&#xff0c;除了ALU、控制单元、寄存器和少量Cache&#xff0c;根本没有多余的空间存放我们编写的代码&#xff0c;我们需要额外的存储器来存放我们编写的程序&#xff08;指令序列&#xff09;。…

逆向案例十六——简单webpack逆向,财联社信息

网址链接&#xff1a;财联社A股24小时电报-上市公司动态-今日股市行情报道 数据包sign参数为加密&#xff0c;可以直接搜索找参数的位置&#xff0c;搜索不到的情况下&#xff0c;在断点跟栈&#xff1a; 确定js文件所在位置&#xff0c;并打上断点。 点击加载刷新页面。可以发…

阿里云部署LAMP环境搭建门户网站

目录 数据库配置 1、在账号管理页面&#xff0c;单击创建账号&#xff0c;输入数据库账号名称选择普通账号&#xff0c;输入密码后确认创建 2、在创建数据库面板中&#xff0c;创建数据库&#xff0c;输入数据库名称&#xff0c;选择上一步创建的账号&#xff0c;选择要授予账…

第6章 6.4.1 案例一:爬取亚洲各地区的实时时间(MATLAB入门课程)

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 本案例将引导大家爬取亚洲各地区的实时时间。我们将从下面这个网…

【攻防世界】supersqli(堆叠注入)

进入题目环境&#xff0c;有输入框与注入参数&#xff0c;推测类型为SQL注入&#xff1a; 测试--注入类型为数字型还是字符型&#xff0c;构造payload&#xff1a;?inject1 or 12 并提交&#xff1a; 发现页面依然正常&#xff0c;说明注入类型为字符型&#xff0c;则继续检查…

matplotlib_vs_ggplot2

参考博客 https://markusdumke.github.io/articles/2017/11/make-matplotlib-look-like-ggplot/#exactline theme_bw.mplstyle # ggplot style with white background # adapted from http://www.huyng.com/posts/sane-color-scheme-for-matplotlib/patch.linewidth: 1 patch…

Vitis HLS 学习笔记--ap_int.h / ap_fixed.h(1)

目录 目录 1. 概述 2. 简要规则 3. 浮点运算的复杂性 2.1 对阶 3.2 尾数运算 3.3 规格化和舍入 3.4 特殊值的处理 4. 示例&#xff08;ap_fixed.h&#xff09; 5. 量化模式&#xff08;ap_fixed.h&#xff09; 5.1 AP_SAT* 模式会增加资源用量 1. 概述 ap_int.h 和…

CTFshow电子取证——内存取证2

接上回 JiaJia-CP-2 2.佳佳在网页上登录了自己的邮箱&#xff0c;请问佳佳的邮箱是&#xff1f; 因为是在网页上登陆的邮箱 用iehistory插件 查看一下网页历史记录 为了方便分析&#xff0c;使用grep命令正则匹配一下 **com 的记录 vol.py -f JiaJia_Co.raw --profileWin…

【ELK】ELK企业级日志分析系统

搜集日志&#xff1b;日志处理器&#xff1b;索引平台&#xff1b;提供视图化界面&#xff1b;客户端登录 日志收集者&#xff1a;负责监控微服务的日志&#xff0c;并记录 日志存储者&#xff1a;接收日志&#xff0c;写入 日志harbor&#xff1a;负责去连接多个日志收集者&am…

找到冠军 II(Lc2924)——统计入度

一场比赛中共有 n 支队伍&#xff0c;按从 0 到 n - 1 编号。每支队伍也是 有向无环图&#xff08;DAG&#xff09; 上的一个节点。 给你一个整数 n 和一个下标从 0 开始、长度为 m 的二维整数数组 edges 表示这个有向无环图&#xff0c;其中 edges[i] [ui, vi] 表示图中存在…

在Linux驱动中,如何确保中断上下文的正确保存和恢复?

大家好&#xff0c;今天给大家介绍在Linux驱动中&#xff0c;如何确保中断上下文的正确保存和恢复&#xff1f;&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 在Linux驱动中&am…

基于生成对抗网络在服装领域的发展脉络和应用趋势

文章目录 1、概述2、深度学习图像生成模型2.1、深度信念网络(Deep belief network&#xff0c;DBN)2.2、变分自编码器(Variational auto-encoder&#xff0c;VAE)2.3、生成对抗网络(Generative adversarial networks&#xff0c;GAN) 3、 模型对比分析4、基于多模态转换的服装图…

人工智能科普:人工智能的分类

人工智能的分类多种多样&#xff0c;根据不同的标准和应用场景&#xff0c;可以将其划分为多个不同的类别。以下是对人工智能分类的详细探讨。 一、按应用领域分类 1. 智能机器人&#xff1a;智能机器人是人工智能技术在机器人领域的应用。它们能够根据环境和任务的不同进行自…