技术栈入门------ElasticSearch

news/2024/9/17 9:44:54/

使用ElasticSearch的准备工作

一、在Linux上安装ElasticSearch

1、docker下载elasticSearch和kibana的镜像

docker pull elasticsearch:7.4.2 存储和检索数据
docker pull kibana:7.4.2 可视化检索数据

2、创建目录

mkdir -p /mydata/elasticsearch/config 
mkdir -p /mydata/elasticsearch/data 
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml

3、启动并挂载Elasticsearch

chmod -R 777 /mydata/elasticsearch/ 保证权限 
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx1024m" \ 
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ 
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \ 
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ 
-d elasticsearch:7.4.2特别注意: -e ES_JAVA_OPTS="-Xms64m -Xmx256m" \ 
测试环境下,设置 ES 的初始内存和最大内存,否则导 致过大启动不了 ES

4、启动kibana

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://虚拟机Linux的ip地址:9200 -p 5601:5601 \ -d kibana:7.4.2http://192.168.56.10:9200 一定改为自己虚拟机的地址

二、整合SpringBoot

1、导入Elasticsearch客户端的依赖

注意这里的<elasticsearch.version>7.4.2</elasticsearch.version>要写成和自己Linux的elasticsearch版本,如果不写这句那就用的是SpringBoot默认的版本,然后上面的linux中的elasticSearch和kibana版本最好保持一致性

<properties><java.version>1.8</java.version><elasticsearch.version>7.4.2</elasticsearch.version><spring-cloud.version>2021.0.0</spring-cloud.version>
</properties><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.4.2</version>
</dependency>

2、ElasticSearch的配置类

package com.saodai.saodaimall.search.config;import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/**
* ElasticSearch的配置类
**/
@Configuration
public class SaodaimallElasticSearchConfig {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();}@Beanpublic RestHighLevelClient esRestClient(){RestClientBuilder builder = null;builder = RestClient.builder(new HttpHost("192.168.241.128", 9200, "http"));RestHighLevelClient client = new RestHighLevelClient(builder);return  client;}}

本商城项目哪里用到了ElasticSearch

商品服务

商品服务的商品上架功能就是把上架的商品的所有信息存到ElasticSearch

1、在Vscode中发送上架请求

2、商品服务的SpuInfoController来处理请求/{spuId}/up

/*** 商品维护的spu管理的上架功能*/@PostMapping("/{spuId}/up")public R spuUp(@PathVariable("spuId") Long spuId){spuInfoService.up(spuId);return R.ok();}

分流程:

(1)查找出spuId对应的所有sku对象

(2)查出当前sku的所有可以被用来检索的规格属性

  //商品维护的spu管理的上架功能@Overridepublic void up(Long spuId) {//查找出spuId对应的所有sku对象List<SkuInfoEntity> skuInfoEntities = skuInfoService.getSkusBySpuId(spuId);//查出当前sku的所有可以被用来检索的规格属性List<ProductAttrValueEntity> productAttrValueEntities = attrValueService.baseAttrlistforspu(spuId);List<Long> attrIds = productAttrValueEntities.stream().map(attr -> {return attr.getAttrId();}).collect(Collectors.toList());
/*        //在批量规格参数attrids找到具有检索属性的规格参数的id集List<Long> sarchAttrIds = attrService.selectSearchAttrsIds(attrIds);*/Set<Long> idSet = new HashSet<>(attrIds);//找到符合要求的数据List<SkuEsModel.Attrs> attrsList = productAttrValueEntities.stream().filter(item -> {//下面返回的是List<ProductAttrValueEntity>return idSet.contains(item.getAttrId());}).map(item -> {//把上面过滤的List<ProductAttrValueEntity>对象转为List<SkuEsModel.Attrs>SkuEsModel.Attrs attrs = new SkuEsModel.Attrs();BeanUtils.copyProperties(item, attrs);return attrs;}).collect(Collectors.toList());//发送远程调用,库存服务查询是否有库存//获取skuIds集合List<Long> skuIdList = skuInfoEntities.stream().map(SkuInfoEntity::getSkuId).collect(Collectors.toList());Map<Long, Boolean> stockMap =null;//进行异常处理(因为远程调用可能因为网络问题导致失败,进行异常处理就不会影响下面的代码运行)try{//远程调用仓库接口R r = wareFeignService.getSkusHasStock(skuIdList);TypeReference<List<SkuHasStockVo>> typeReference = new TypeReference<List<SkuHasStockVo>>() {};//获取返回R中的数据并封装成map<skuId,HasStock>stockMap = r.getData(typeReference).stream().collect(Collectors.toMap(SkuHasStockVo::getSkuId, item -> item.getHasStock()));} catch (Exception e) {log.error("库存服务查询异常:原因{}",e);}Map<Long, Boolean> finalStockMap =stockMap;List<SkuEsModel> collect = skuInfoEntities.stream().map(skuInfoEntity -> {//组装需要的数据SkuEsModel skuEsModel = new SkuEsModel();BeanUtils.copyProperties(skuInfoEntity,skuEsModel);skuEsModel.setSkuPrice(skuInfoEntity.getPrice());skuEsModel.setSkuImg(skuInfoEntity.getSkuDefaultImg());//hasStock,hotScore//设置库存信息if (finalStockMap == null) {skuEsModel.setHasStock(true);} else {skuEsModel.setHasStock(finalStockMap.get(skuInfoEntity.getSkuId()));}//热度评分//查询品牌和分类的名称信息BrandEntity brandEntity = brandService.getById(skuInfoEntity.getBrandId());skuEsModel.setBrandName(brandEntity.getName());skuEsModel.setBrandId(brandEntity.getBrandId());skuEsModel.setBrandImg(brandEntity.getLogo());CategoryEntity categoryEntity = categoryService.getById(skuInfoEntity.getCatalogId());skuEsModel.setCatalogId(categoryEntity.getCatId());skuEsModel.setCatalogName(categoryEntity.getName());//设置可以检索的规格参数skuEsModel.setAttrs(attrsList);return skuEsModel;}).collect(Collectors.toList());//TODO 5、远程调用将数据发给es进行保存:saodaimall-searchR r = searchFeginService.productStatusUp(collect);if (r.getCode() == 0) {//远程调用成功//TODO 6、修改当前spu的状态System.out.println("远程调成功!");this.baseMapper.updaSpuStatus(spuId, ProductConstant.ProductStatusEnum.SPU_UP.getCode());} else {//远程调用失败//TODO 7、重复调用?接口幂等性:重试机制}}


http://www.ppmy.cn/news/26800.html

相关文章

9、GPT-1-2-3

GPT GPT系列即基于Transformer Decoder实现的预训练语言模型&#xff0c;在各类复杂的NLP任务中都取得了不错的效果&#xff0c;如文章生成、代码生成、机器翻译&#xff0c;Q&A等。 对于一个新的任务&#xff0c;GPT仅仅需要非常少的数据便可以理解该任务&#xff0c;并…

【Java】Spring核心与设计思想

文章目录Spring核心与设计思想1. Spring是什么1.1 什么是容器1.2 什么是IOC1.2.1 传统程序开发1.2.2 控制反转式程序开发1.2.3 对比总结规律1.3 理解Spring IOC1.4 DI概念说明Spring核心与设计思想 1. Spring是什么 我们通常所说的Spring指的是Spring Framework&#xff08;S…

MyBatis概述环境搭建(一)

&#x1f697;MyBatis学习起始站~ &#x1f6a9;本文已收录至专栏&#xff1a;数据库学习之旅 &#x1f44d;希望您能有所收获 一.什么是MyBatis (1) 引言 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDB…

02-04 周六 图解机器学习 SVM 支持向量机分类学习

02-04 周六 图解机器学习 SVM 支持向量机分类学习时间版本修改人描述2023年2月4日11:15:16V0.1宋全恒新建文档 环境搭建 首先搭建jupyter环境&#xff0c;方便可视化 (base) rootnode33-a100:~# docker run --name sqh-learn -d -p 10088:8888 -it 10.101.12.128/framework/ju…

生态应用:探讨 NGINX 与上下游系统集成时的开发经验

NGINX 作为一款高性能的 Web 服务器和反向代理服务器&#xff0c;在各种应用场景中广泛应用。随着业务的发展&#xff0c;我们在使用 NGINX 时&#xff0c;可能需要将其与其他系统进行集成&#xff0c;以实现更加复杂的业务需求。 本文将结合实际应用场景&#xff0c;探讨 NGI…

带你一步步搭建Web自动化测试框架

测试框架的设计有两种思路&#xff0c;一种是自底向上&#xff0c;从脚本逐步演变完善成框架&#xff0c;这种适合新手了解框架的演变过程。另一种则是自顶向下&#xff0c;直接设计框架结构和选取各种问题的解决方案&#xff0c;这种适合有较多框架事件经验的人。本章和下一张…

Linux之网络流量监控工具ntopng YUM安装

一、ntopng简介 Ntop是一种监控网络流量工具&#xff0c;用ntop显示网络的使用情况比其他一些网络管理软件更加直观、详细。Ntop甚至可以列出每个节点计算机的网络带宽利用率。他是一个灵活的、功能齐全的&#xff0c;用来监控和解决局域网问题的工具&#xff1b;尤其当ntop与n…

非标题党:前端Vue React 项目编程规范化配置(大厂规范)

前端项目编程规范化配置 下述例子主要是从 代码规范化 以及 git 提交规范化 两方面进行配置。内容很多&#xff0c;请做好心理准备 一、代码检测工具 ESLint 在我们通过 vue create “项目名” 时&#xff0c;我们可以通过手动配置的方式&#xff0c;来配置 ESLint 来对代码进…

python 绘图 —— 绘制从顶部向底部显示的柱形图[ax.bar()]

python 绘图 —— 绘制从顶部向底部显示的柱形图[ax.bar()] 效果图如下所示&#xff1a; 就是这个样子&#xff0c;一般比较少见将柱形图从上往下绘制的。可能是会为了更好的展示数据对比结果吧。这里绘图的主要思路如下&#xff1a; 利用ax.twinx()这个函数生成一个新的x轴…

双因素方差分析全流程

上篇文章讲述了“单因素方差分析全流程总结”&#xff0c;单因素方差分析只是考虑了一个自变量&#xff08;定类&#xff09;与一个因变量&#xff08;定量&#xff09;之间的关系&#xff0c;但是在实际问题研究中可能研究两个或者几个因素与因变量之间的关系&#xff0c;例如…

鼠标指针文件格式解析

鼠标指针文件格式解析 文章目录鼠标指针文件格式解析windowsico文件格式分析文件头&#xff1a;图像数据头段&#xff1a;图像数据段&#xff1a;Ani动态光标格式解析数据结构&#xff1a;anihseq **rate**LISTcur静态光标文件格式解析macOSLinuxwindows ico文件格式分析 是一…

1-MATLAB APP Design-图像的输入与输出

一、APP 界面设计展示 新建一个空白的APP,在此次的学习中,我们会用到编辑字段(文本框)、 按钮、坐标区和面板,首先在界面中拖入一个编辑字段(文本框),在文本框中输入内容:图形的输入与输出,调整背景颜色,字体的颜色为黑色,字体的大小调为25.

UG NX二次开发(C#)-CAM-不再高亮显示所有的加工特征(CAMFeature)

文章目录 1、前言2、加工特征高亮显示的示例3、获取加工特征的几何对象3.1 获取面对象并取消高亮显示3.2 获取坐标系对象并取消高亮显示4、创建一个不再高亮显示所有加工特征的方法1、前言 当我们在识别加工特征后,其默认状态是被选中的,所以是高亮显示;当我们不再选中时,…

06- OpenCV查找图像轮廓 (OpenCV基础) (机器视觉)

知识重点 灰度图转换: gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)二值化: 返回两个东西&#xff0c;一个阈值&#xff0c; 一个是二值化的图: thresh, binary cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)查找轮廓: 返回两个结果&#xff0c;分别是轮廓和层级: c…

【C语言】浮点型数据在内存中的存储

&#x1f680;&#x1f680;&#x1f680; 如果文章对你有帮助不要忘记点赞关注收藏哦&#x1f680;&#x1f680;&#x1f680; 文章目录⭐浮点数在内存中的存储1.1 &#x1f913;举个例子:1.2浮点数存储规则&#x1f308;&#xff1a;对于M与E有一些特别规定1.3解释前面题目&…

STM32开发(11)----CubeMX配置独立看门狗(IWDG)

CubeMX配置独立看门狗&#xff08;IWDG&#xff09;前言一、独立看门狗的介绍二、实验过程1.STM32CubeMX配置独立看门狗2.代码实现3.硬件连接4.实验结果总结前言 本章介绍使用STM32CubeMX对独立看门狗定时器进行配置的方法。门狗本质上是一个定时器&#xff0c;提供了更高的安…

嵌入式Qt 开发一个视频播放器

上篇文章&#xff1a;嵌入式 Qt开发一个音乐播放器&#xff0c;使用Qt制作了一个音乐播放器&#xff0c;并在OK3568开发板上进行了运行测试&#xff0c;实际测试效果还不错。 本篇继续来实现一个Qt视频播放器软件&#xff0c;可以实现视频列表的显示与选择播放等&#xff0c;先…

centos7下用kvm启动Fedora36 Cloud镜像

环境 os:centos7 Arch: aarch64 安装qemu-kvm yum install qemu-kvm kvm virt-install libvirt systemctl start libvirtd.service创建镜像 下载aarch64架构的Fedora36镜像 wget https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/36/Cloud/aarch64/images/Fedora-Cl…

PaddleSlim 模型量化 源代码解读

前言&#xff1a;paddleslim的中文资料非常丰富&#xff0c;在如何使用的教学上做的非常完善。但是源码解读与解析资料却非常少&#xff0c;这篇博客结合源代码大家一起学习一下paddle静态离线量化的原理和方法。 目录 原理简述 支持的量化类型 支持后端 量化操作 Prepara…

基于linux内核的驱动开发

1 自动创建设备文件 创建设备文件的方式&#xff1a;1 手动创建 sudo mknod /dev/haha0 c 250 0 2 自动创建--》使用内核函数 linux内核为我们提供了一组内核函数&#xff0c;用于在模块加载时自动在/dev目录下创建响应的设备文件&…