elasticSearch从零整合springboot项目实操

 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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony实例应用:【常用组件和容器低代码】

介绍 本篇Codelab是基于ArkTS语言的低代码开发方式实现的一个简单实例。具体实现功能如下&#xff1a; 创建一个低代码工程。通过拖拽的方式实现任务列表和任务信息界面的界面布局。在UI编辑界面实现数据动态渲染和事件的绑定。 最终实现效果如下&#xff1a; 相关概念 低代…

【opencv】示例-points_classifier.cpp 使用不同机器学习算法在二维空间中对点集进行分类...

#include "opencv2/core.hpp" // 包含OpenCV核心功能的文件 #include "opencv2/imgproc.hpp" // 包含OpenCV图像处理功能的文件 #include "opencv2/ml.hpp" // 包含OpenCV机器学习模块的文件 #include "opencv2/highgui.hpp" // 包含O…

【MIT6.S081】Lab3: page tables(详细解答版)

实验内容网址&#xff1a;https://xv6.dgs.zone/labs/requirements/lab3.html 本实验的代码分支&#xff1a;https://gitee.com/dragonlalala/xv6-labs-2020/tree/pgtbl2/ Print a page table 关键点&#xff1a;递归、三级页表 思路&#xff1a; 用上图来解释三级页表的原理最…

RISC-V技术变革:一颗芯片,CPU与GPU合二为一

一颗万能的RISC-V芯片: 将CPU和GPU整合到一个核中 X-Silicon 推出创新的 RISC-V 芯片架构,将 CPU、矢量功能和 GPU 加速无缝集成。这种开源混合芯片专为多功能工作负载而设计,包括人工智能,旨在通过高效处理提升性能。 革命性的 CPU/GPU 混合处理器全新的 RISC-V CPU/GPU 混…

【前端面试3+1】12 toktn验证过程、面向对象特性、webpack和vite的区别、【字符串中的第一个唯一字符】

一、token验证过程 用户登录&#xff1a;用户提供用户名和密码进行登录。服务器验证&#xff1a;服务器接收到用户提供的用户名和密码&#xff0c;进行验证。生成token&#xff1a;如果用户名和密码验证通过&#xff0c;服务器会生成一个token&#xff0c;通常包含一些加密的信…

从 iPhone 上的短信中恢复已删除的图片的可靠方法

您可能在浏览消息聊天时不小心删除了一些文本和照片。事实上&#xff0c;如果这些消息对你来说意义重大&#xff0c;那对你来说可能会很麻烦。当发生意外情况时&#xff0c;您可能不想恢复整个聊天&#xff0c;而是恢复其中的附件。 好了&#xff0c;这篇文章主要是讲如何灵活…

关于故障诊断的一些事-答知乎问(四)

利用深度学习模型进行机械故障诊断技术的难点是什么&#xff1f; 除了严格的可解释性之外&#xff0c;还有 1.很多机械设备经常运行在转速多变、载荷冲击、噪声淹没的恶劣工作环境之下&#xff0c;振动监测信号内包含了多种故障频率成分和背景噪声信息&#xff0c;是一种非常…

【C语言基础】:预处理详解(一)

文章目录 一、预定义符号二、#define定义常量三、#define定义宏四、带有副作用的宏参数五、宏替换的规则 一、预定义符号 在C语言中设置了许多的预定义符号&#xff0c;这些预定义符号是可以直接使用的&#xff0c;预定义符号也是在预处理阶段进行处理的。 常见的预定义符号&…

【系统分析师】计算机组成与体系架构

文章目录 1、编码及浮点数运算2、flynn分类法3、CISC和 RISC4、流水线技术5、存储技术5.1层次化存储结构5.2 Cache5.2.1 cache页面淘汰5.2.2 cache的读写 5.3 主存5.3.1主存编址5.3.2 磁盘 5.4 总线 6、校验码7、系统可靠性计算7.1可靠性指标7.2 串联系统与并联系统7.3性能指标…

Vue3——html-doc-ja(html导出为word的js库)

一、下载 官方地址 html-doc-js - npm npm install html-doc-js 二、使用方法 // 使用页面中引入 import exportWord from html-doc-js// 配置项以及实现下载方法 const wrap document.getElementById(test)const config {document:document, //默认当前文档的document…

如何将三方库集成到hap包中——通过IDE集成非cmake方式构建的C/C++三方库

简介 DevEco Studio(简称IDE)目前只支持cmake构建方式&#xff0c;对于非cmake构建方式的三方库需要通过IDE工具集成的话&#xff0c;我们需要对原生库编写一个cmake的构建脚本。本文通过tinyxpath三方库为例介绍如何在IDE上移植一个非cmake构建方式的三方库。 cmake构建脚本…

酷得智能 无人机方案开发

东莞市酷得智能科技有限公司&#xff0c;是一家专业的技术服务公司&#xff0c;致力于为各类智能硬件提供高效、稳定、安全的底层驱动解决方案。拥有一支经验丰富、技术精湛的团队&#xff0c;能够为客户提供全方位的底层驱动开发服务。 无人机功能介绍&#xff1a; 1、自动跟…

字符和字符串操作函数总结

索引 一 . 字符操作函数1. 字符分类函数2. 字符转换函数 二 . 字符串操作函数长度不受限制的字符串操作函数1. strcpy函数的使用和模拟实现2. strcat函数的使用和模拟实现3. strcmp函数的使用和模拟实现 长度受限制的字符串操作函数1. strncpy函数的使用2. strncat函数的使用3.…

字符函数strlen、strcpy、strcat、strcmp、strstr、strtok、 strerror和perror函数

目录 1、strlen函数 strlen函数的模拟实现 2、strcpy函数 strcpy函数的模拟实现 strncpy函数 strncpy函数的模拟实现 3、srtcat函数 strcat函数的模拟实现 strncat函数 strncat函数的模拟实现 4、strcmp函数 strcmp函数的模拟实现 strncmp函数 5、strstr函数 st…

anaconda创建了虚拟python环境,且安装了pytorch,但是pycharm中import torch运行时报错

报错如下&#xff1a; C:\Users\tashi\.conda\envs\test1\python.exe D:\project\python\transformer\main.py C:\Users\tashi\.conda\envs\test1\lib\site-packages\numpy\__init__.py:127: UserWarning: mkl-service package failed to import, therefore Intel(R) MKL init…

AI虽强,搜索引擎仍不可或缺

AI 领域正以前所未有的速度发展&#xff0c;大模型的发布变得愈发频繁&#xff0c;模型的规模也在持续扩大。如今&#xff0c;大模型的起点已经攀升至数十亿参数&#xff08;数十 B&#xff0c;B 是 Billion 的简写&#xff0c;10 亿&#xff09;&#xff0c;其功能之广泛&…

二、Python接口自动化fixture和conftest

1、fixture详解 fixture概念fixture是 pytest 用于将测试前后进行预备、清理工作的代码处理机制。 fixture相对于setup和teardown来说有以下几点优势: • fixure命名更加灵活&#xff0c;局限性比较小 • conftest.py 配置里面可以实现数据共享&#xff0c;不需要import就能自…

嵌入式sqlite3交叉编译移植

操作系统:Ubuntu20.04 下载sqlite3代码,下载版本3.30.00 wget https://www.sqlite.org/2019/sqlite-amalgamation-3300000.zip 或者https://download.csdn.net/download/benico/89127678 为什么下载amalgamation版本,不下载autoconf版本? 根据我的编译实验,同版本sql…

错题记录-华为海思

华为 海思数字芯片 参考 &#xff1a;FPGA开发/数字IC笔试系列(5) 华为海思IC笔试解析 FPGA开发/数字IC笔试系列(6) 华为海思IC笔试解析 SystemVerilog Function与Task的区别 $readmemh与$readmemb这两个系统任务是用来从指定文件中读取数据到寄存器数组或者RAM、ROM中。除了…

stm32与esp8266WIFI模块

硬件介绍 WIFI模块ESP-01S 使用AT指令控制1-ESP8266-AT指令初试化及部分基础知识_ch_pd-CSDN博客 项目需求 通过ESP-01SWIFI模块控制LED状态模拟插座 串口1用于与ESP8266通讯&#xff0c;串口2连接PC&#xff0c;用于打印log&#xff0c;查看系统状态 项目接线 将WIFI模块的…