商城业务-检索服务

文章目录

  • 前言
  • 一、搭建页面环境
    • 1.1 静态界面搭建
    • 1.2 Nginx 动静分离
    • 1.3 Windows 上传文件
    • 1.4 引入 thymeleaf 依赖
    • 1.5 Nginx 反向代理
    • 1.4 Nginx 配置
    • 1.5 gateway 网关配置
  • 二、调整页面跳转
    • 2.1 引入依赖
    • 2.2 页面跳转
  • 三、检索查询参数模型分析抽取
    • 3.1 检索业务分析
    • 3.2 检索语句构建
  • 四、检索返回结果模型分析抽取
    • 4.1 案例说明
    • 4.2 检索结果模型
  • 五、检索DSL测试
    • 5.1 查询部分
    • 5.2 聚合部分

前言

根据微服务自治理念,我们可以将项目中需要ES检索的业务统一维护在检索微服务模块中。

一、搭建页面环境

SpringBoot项目默认读取静态界面名称要命名为index.html,不然项目读取不到静态资源。

1.1 静态界面搭建

将检索相关的静态界面拷贝到gulimall-search项目中templates目录下,并且将项目路径href和src都改为/static/search/开头,统一路径。
在这里插入图片描述

1.2 Nginx 动静分离

利用Nginx动静分离的特点,我们将静态资源放在服务器中/mydata/nginx/html/static/目录下,当前端发送静态资源请求时,直接到静态资源目录下获取静态资源文件。避免通过gateway进入后端微服务,减轻后端微服务的压力。
在这里插入图片描述

1.以后将所有项目的静态资源都应该放在nginx里面
2.规则:/mydata/nginx/html/static/ 目录下所有请求都由nginx直接返回

1.3 Windows 上传文件

递归创建目录,检索服务相关的静态资源放在该目录下

mkdir -p /mydata/nginx/html/static/search/

win + r 输入如下命令,将本地文件上传到 Linux 指定的目录下

scp E:\gulimall\官方资料\代码\html\搜索页\font.zip root@192.168.57.129:/mydata/nginx/html/static/search/

1.4 引入 thymeleaf 依赖

检索页动态资源index.html复制到gulimall-search微服务下的templates目录下。pom.xml引入thymeleaf和devtools 依赖。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId>
</dependency>

将src=" 和href="的资源引用,全局替换为如下地址:

src="/static/search
href="/static/search

1.5 Nginx 反向代理

在这里插入图片描述

1.4 Nginx 配置

将gulimall.com 和*.gulimall.com的域名都转发给Nginx网关

server {listen       80;server_name  gulimall.com *.gulimall.com;#charset koi8-r;#access_log  /var/log/nginx/log/host.access.log  main;location /static/ {root  /usr/share/nginx/html;}location / {proxy_set_header Host $host;proxy_pass http://gulimall;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.htmlerror_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

1.5 gateway 网关配置

spring:cloud:gateway:routes:- id: gulimall_search_routeuri: lb://gulimall-searchpredicates:- Host=search.gulimall.com

访问search.gulimall.com,能够转发到静态检索页

在这里插入图片描述

二、调整页面跳转

2.1 引入依赖

关闭thymeleaf缓存

spring.thymeleaf.cache=false

引入devtools热加载

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId>
</dependency>

点击谷粒商城能够跳转到gulimall.com首页

在这里插入图片描述

将地址改为http://gulimall.com

在这里插入图片描述

2.2 页面跳转

  1. 首页输入检索关键字,能够跳转到检索服务;
  2. 通过商品三级分类,能够跳转到检索服务;
    在这里插入图片描述

关键代码

<script type="text/javascript">function search() {var keyword=$("#searchText").val()window.location.href="http://search.gulimall.com/list.html?keyword="+keyword;}
</script>

三、检索查询参数模型分析抽取

3.1 检索业务分析

商品检索三个入口:
1.选择分类进入商品检索
在这里插入图片描述
2.输入检索关键字展示检索页
在这里插入图片描述
3.选择筛选条件进入
在这里插入图片描述

检索条件&排序条件:

  • 全文检索:skuTitle
  • 排序:saleCount、hotScore、skuPrice
  • 过滤:hasStock、skuPrice区间、brandId、catalogId、attrs
  • 聚合:attrs

完整的url参数,具体操作可参考京东搜索界面:

  • keyword=小米&sort=saleCount_desc/asc&hasStock=0/1&skuPrice=400_1900&brandId=1 &catalogId=1&attrs=1_3G:4G:5G&attrs=2_骁龙845&attrs=4_高清屏

3.2 检索语句构建

@Data
public class SearchParam {/*** 页面传递过来的全文匹配关键字*/private String keyword;/*** 三级分类id*/private Long catalog3Id;/*** 排序条件* sort=saleCount_asc/desc* sort=skuPrice_asc/desc* sort=hotScore_asc/desc*/private String sort;/*** 好多的过滤条件* hasStock(是否有货)、skuPrice区间、brandId、catalog3Id、attrs* hasStock=0/1* skuPrice=1_500/_500/500_* brandId=1* attrs=2_5寸;6寸*//*** 是否只显示有货*/private Integer hasStock;/*** 价格区间查询*/private String skuPrice;/*** 按照品牌进行查询,可以多选*/private List<Long> brandId;/*** 按照属性进行筛选*/private List<String> attrs;/*** 页码*/private Integer pageNum = 1;/*** 原生的所有查询条件*/private String _queryString;
}

四、检索返回结果模型分析抽取

4.1 案例说明

以京东商城为例,当我们输入小米点击搜索时,可以检索出品牌名及图片,分类,商品属性名,属性值以及分页数据等小米的信息。

在这里插入图片描述

而这些数据是我们需要从ES中根据前端请求数据查询后返回给前端。

4.2 检索结果模型

@Data
public class SearchResult {/*** 查询到的所有商品信息*/private List<SkuEsModel> products;/*** 以下是分页信息*/private Integer pageNum;//当前页码private Long total;//总记录数private Integer totalPages;//总页码private List<Integer> pageNavs;/*** 当前查询到的结果,所有涉及到的品牌*/private List<BrandVo> brands;/*** 当前查询到的结果,所有涉及到的所有分类*/private List<CatalogVo> catalogs;/*** 当前查询到的结果,所有涉及到的所有属性*/private List<AttrVo> attrs;/*** 面包屑导航数据*/private List<NavVo> navs = new ArrayList<>();private List<Long> attrIds = new ArrayList<>();@Datapublic static class NavVo{private String navName;private String navValue;private String link;}@Datapublic static class BrandVo{private Long brandId;private String brandName;private String brandImg;}@Datapublic static class CatalogVo{private Long catalogId;private String catalogName;}@Datapublic static class AttrVo{private Long attrId;private String attrName;private List<String> attrValue;}
}

五、检索DSL测试

5.1 查询部分

5.2 聚合部分

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【上海大学计算机组成原理实验报告】二、数据传送实验

一、实验目的 了解在模型机中算术、逻辑运算单元的控制方法。学习机器语言程序的运行过程。通过人工译码&#xff0c;加深对译码器基本工作原理的理解。 二、实验原理 根据实验指导书的相关内容&#xff0c;本次实验所要用的CP226实验仪在手动方式下&#xff0c;运算功能通过…

记录何凯明在MIT的第一堂课:神经网络发展史

https://www.youtube.com/watch?vZ5qJ9IxSuKo 目录 表征学习 主要特点&#xff1a; 方法和技术&#xff1a; LeNet 全连接层​ 主要特点&#xff1a; 主要特点&#xff1a; 网络结构&#xff1a; AlexNet 主要特点&#xff1a; 网络结构&#xff1a; Sigmoid Re…

碳素光线疗法与宠物健康

碳素光线与宠物健康 生息在地球上的所有动物、在自然太阳光奇妙的作用下、生长发育。太阳光的能量使它们不断进化、繁衍种族。现在、生物能够生存、全仰仗于太阳的光线。太阳光线中、包含有动物健康所需要的极为重要的波长。因此、和户外饲养的动物相比、在室内喂养的观赏动物、…

全套医院手术麻醉系统源码 人工智能麻醉系统源码 医疗管理系统源码

全套医院手术麻醉系统源码 人工智能麻醉系统源码 医疗管理系统源码 手术麻醉临床信息系统有着完善的临床业务功能&#xff0c;能够涵盖整个围术期的工作&#xff0c;能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施&#xff0c;能够规范麻醉科的工作流…

实现offsetof宏以及交换一个整数二进制奇偶位的宏

目录 1. offsetof宏2. 交换奇偶位 1. offsetof宏 我们想用宏来实现offsetof函数,首先要了解这个函数的用法。 1.1 offsetof函数的介绍及用法 &#xff08;1&#xff09;功能&#xff1a;用来计算结构体中一个成员在该结构体中的相对起始位置的偏移量&#xff0c;单位是字节。 …

ClamAV:Linux服务器杀毒扫描工具

Clam AntiVirus&#xff08;ClamAV&#xff09;是免费而且开放源代码的防毒软件&#xff0c;软件与病毒码的更新皆由社群免费发布。ClamAV在命令行下运行&#xff0c;它不将杀毒作为主要功能&#xff0c;默认只能查出系统内的病毒&#xff0c;但是无法清除。需要用户自行对病毒…

异常,Lambda表达式

文章目录 异常介绍存在形式程序中异常发生后的第一反应体系JVM的默认处理方案处理方式声明 throws概述格式抛出 throw格式注意意义 throws和throw的区别 捕获 try,catch介绍格式执行方式多异常捕获处理意义 如何选择用哪个 Throwable类介绍常用方法 自定义异常概述实现步骤范例…

手写Spring框架(上)浅出

手写Spring框架 准备工作Spring启动和扫描逻辑实现依赖注入的实现Aware回调模拟实现和初始化机制模拟实现BeanPostProcessor (Bean的后置处理器) 模拟实现Spring AOP 模拟实现 准备工作 准备一个空的工程创建spring的容器类&#xff0c;它是Spring IOC理念的实现&#xff0c;负…

Yolo 自制数据集dect训练改进

上一文请看 Yolo自制detect训练-CSDN博客 简介 如下图&#xff1a; 首先看一下每个图的含义 loss loss分为cls_loss, box_loss, obj_loss三部分。 cls_loss用于监督类别分类&#xff0c;计算锚框与对应的标定分类是否正确。 box_loss用于监督检测框的回归&#xff0c;预测框…

算法——距离计算

距离计算常用的算法包括欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、余弦相似度等。这些算法在数据挖掘、机器学习和模式识别等领域中被广泛应用。 1.欧氏距离 欧式距离也称欧几里得距离&#xff0c;是最常见的距离度量&#xff0c;衡量的是多维空间中两个点之间的…

SpringMvc项目创建过程

1、新建空项目 名字和路径自定义&#xff0c;Maven项目&#xff0c;不建议勾选Add sample code 2、创建web模块 选中当前项目 修改路径&#xff0c;注意是在main包下 选择当前项目 3、编写pom.xml文件 在文件中加入以下内容&#xff0c;packaging标签表明了maven打包类型。 &…

Mysql的高级语句3

目录 一、子查询 注意&#xff1a;子语句可以与主语句所查询的表相同&#xff0c;但是也可以是不同表。 1、select in 1.1 相同表查询 1.2 多表查询 2、not in 取反&#xff0c;就是将子查询结果&#xff0c;进行取反处理 3、insert into in 4、update…

【智能算法】黄金正弦算法(GSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2017年&#xff0c;Tanyildizi等人受到正弦函数单位圆内扫描启发&#xff0c;提出了黄金正弦算法&#xff08;Golden Sine Algorithm, GSA&#xff09;。 2.算法原理 2.1算法思想 GSA来源于正弦函…

阿里云服务器安装SSL证书不起作用的解决方案

阿里云服务器安装SSL证书不起作用的解决方案 在阿里云安装SSL证书后&#xff0c;访问无效&#xff0c;各种检查证书安装没有问题。忽然想到阿里云默认连80端口都没开启&#xff0c;443端口应该也没开启。 登录阿里云控制台 - 云服务器 ECS - 网络与安全 - 安全组 - 管理规则 - …

http模块 服务器端如何响应(获取)静态资源?

一、静态资源与动态资源介绍&#xff1a; &#xff08;1&#xff09;静态资源 内容长时间不改变的资源。eg&#xff1a;图片、视频、css js html文件、字体文件... &#xff08;2&#xff09;动态资源 内容经常更新的资源。eg&#xff1a;百度首页、淘宝搜索列表... 二、服…

栈————顺序栈和链式栈

目录 栈 顺序栈 1、初始化顺序栈 2、判栈空 3、进栈 4、出栈 5、读栈顶元素 6、遍历 链式栈 1、初始化链式栈 2、断链式栈是否为空判 3、入栈(插入) ​编辑​编辑 4、出栈(删除) 5、读取栈顶元素 6、输出链式栈中各个节点的值&#xff08;遍历&#xff09; 栈 …

【Linux C | 多线程编程】线程的连接、分离,资源销毁情况

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-04-01 1…

浅谈iOS开发中的自动引用计数ARC

1.ARC是什么 我们知道&#xff0c;在C语言中&#xff0c;创建对象时必须手动分配和释放适量的内存。然而&#xff0c;在 Swift 中&#xff0c;当不再需要类实例时&#xff0c;ARC 会自动释放这些实例的内存。 Swift 使用 ARC 来跟踪和管理应用程序的内存&#xff0c;其主要是由…

2022 Tesla AI Day -特斯拉自动驾驶FSD的进展和算法软件技术之数据以及虚拟

2022 Tesla AI Day -特斯拉自动驾驶FSD的进展和算法软件技术之数据以及虚拟 附赠自动驾驶学习资料和量产经验&#xff1a;链接 人工智能算法犹如电影的主演&#xff0c;我们很多时候看电影只看到主演们的精彩&#xff0c;但其实电影的创意和呈现都来自于背后的导演和制片等团队…

服务器停止解析域名,但仍然可以访问到

1.centos7 如何刷新dns缓存 在CentOS 7上&#xff0c;DNS缓存由nscd&#xff08;Name Service Cache Daemon&#xff09;管理&#xff0c;如果系统上安装了nscd&#xff0c;可以通过清除nscd缓存来刷新DNS缓存。 要刷新DNS缓存&#xff0c;请执行以下命令&#xff1a; sudo …