elasticSearch从零整合springboot项目实操

devtools/2024/9/23 10:20:21/

 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;
@AutowiredTokenGenerate tokenGenerate;@AutowiredRestHighLevelClient highLevelClient;@AutowiredEssayService essayService;@Testvoid contextLoads() {}/**处理 Essay的数据** 这里将mysql的数据都batch到es中** */@Testvoid  mysqlAndES(){List<Essay> list = essayService.list();list.forEach(one->{System.out.println(one.toString());});}@Testvoid  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());}@Testvoid   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.ppmy.cn/devtools/6713.html

相关文章

【备战算法岗】—— 控制模块复习(持续更新!!!)

1 控制理论基础 1.1 控制模块概述 输入&#xff1a;轨迹线Reference、地图信息、定位信息、车辆反馈信息 输出&#xff1a;刹车、油门、转向 CANBUS&#xff1a;车辆底盘交互协议 参考博客&#xff1a;Apollo CANBUS模块解析 apollo&#xff1a;canbus模块&#xff08;1&…

selenium_定位输入框并输入值_id

定位id号 from time import sleepfrom selenium import webdriver# 获取浏览器对象 driver webdriver.Edge() # 打开 url url r"C:\Users\黄永生\Desktop\软件测试\tpshop\web自动化_day01_课件笔记资料代码\02_其他资料\注册A.html" driver.get(url) # 查找元素 用…

现在复习计算机考研408怎么复习?

考研是一场持久战&#xff0c;需要科学规划和备考&#xff0c;针对这个问题&#xff0c;小编在这里给大家总结一下老师建议的科学备考408思路&#xff1a; 01 先学C语言 在学408之前需要学一下C语言&#xff0c;特别是零基础跨考的同学&#xff0c;建议一定要学习C语言。 建议大…

VMWare Ubuntu压缩虚拟磁盘

VMWare中ubuntu会越用越大&#xff0c;直到占满预分配的空间 即使系统里没有那么多东西 命令清理 开机->open Terminal sudo vmware-toolbox-cmd disk shrink /关机-> 编辑虚拟机设置->硬盘->碎片整理&压缩 磁盘应用 开机->disk usage analyzer(应用) …

写代码的修养

看山是山&#xff0c;看水是水 此境界 对业务的思考是浅层的&#xff0c;代码写的不通用&#xff0c;扩展性差&#xff0c;表现在无设计模式 看山不是山&#xff0c;看水不是水 此境界 对业务的思考是中层的&#xff0c;代码写的通用&#xff0c;扩展性好&#xff0c;表现为…

springboot mongodb 数据添加时更改‘_class‘字段

重写beanMappingMongoConverter 修改DefaultMongoTypeMapper /*** 更改默认的 MongoDB 映射转换器,更改_class字段** param factory MongoDB 工厂对象* param context MongoDB 映射上下文* param beanFactory springBean 工厂* return MongoDB 映射转换器*/Beanpublic…

【归并】Leetcode 排序数组

题目讲解 912. 排序数组 算法讲解 使用归并算法排序数组&#xff0c;我们先在数组中寻找一个mid点&#xff0c;然后把数组分成了两部分&#xff0c;我们先排左部分&#xff0c;排左边部分的时候有需要将当前的子数组分成两部分&#xff0c;继续循环&#xff0c;直到当前子数组…

Docker - 安装

原文地址&#xff0c;使用效果更佳&#xff01; Docker - 安装 | CoderMast编程桅杆https://www.codermast.com/dev-tools/docker/docker-install.html MacOS安装 1.使用 Homebrew 安装 brew install docker安装成功 如果你的电脑没有安装Docker&#xff0c;则会自动进行安…