商城业务-检索服务

news2024/11/25 6:33:11

文章目录

  • 前言
  • 一、搭建页面环境
    • 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.html
    error_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_route
          uri: lb://gulimall-search
          predicates:
            - 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<>();

    @Data
    public static class NavVo{
        private String navName;
        private String navValue;
        private String link;
    }

    @Data
    public static class BrandVo{
        private Long brandId;
        private String brandName;
        private String brandImg;
    }

    @Data
    public static class CatalogVo{
        private Long catalogId;
        private String catalogName;
    }

    @Data
    public static class AttrVo{
        private Long attrId;
        private String attrName;
        private List<String> attrValue;
    }
}

五、检索DSL测试

5.1 查询部分

5.2 聚合部分

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

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

相关文章

齿轮“红宝书”

​在齿轮行业&#xff0c;有两本书被广大从业者尊称为“红宝书”。这两部作品深入剖析了齿轮技术的精髓&#xff0c;为从业者提供了宝贵的指导和启示。它们犹如行业的明灯&#xff0c;照亮了齿轮制造的每一个角落&#xff0c;使得从业者在探索中不再迷茫。 这两本红宝书的内容…

遥感动态监测技术

很多人对动态监测和动态检测两个名词有疑惑。我们可以这样理解&#xff0c;动态监测是一个广义的名词&#xff0c;泛指数据预处理、变化信息发现与提取、变化信息挖掘与应用等&#xff0c;以对整个流程的叙述。动态检测是一个狭义的名词&#xff0c;主要指部分数据预处理、变化…

【御控物联】JavaScript JSON结构转换(7):数组To数组——键值互换属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、案例之《JSON数组 To JSON数组》三、代码实现四、在线转换工具五、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0c;生成新的JS…

前端(三)React踩坑记录

一、引言 作者最近新的平台项目是需要用react的&#xff0c;和vue区别还是比较大的&#xff0c;这里记录下踩坑和使用经验。 二、环境 框架&#xff1a;antd 依赖&#xff1a; "dependencies": {"ant-design/icons": "^4.7.0","ant-desig…

Linux使用Docker部署RStudio Server结合内网穿透实现公网访问本地服务

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE&#xff0c;并通过 Web 浏览器进行访问…

卷积层+多个输入通道

卷积层多输入输出通道 在深度学习中&#xff0c;卷积神经网络&#xff08;CNN&#xff09;通常用于处理具有多个输入通道的数据。当输入数据具有多个通道&#xff08;例如彩色图像的RGB通道&#xff09;时&#xff0c;卷积操作可以同时在每个通道上进行&#xff0c;并将各通道的…

【成功案例】间隔数月双团伙先后利用某ERP0day实施入侵和勒索的解密恢复项目

1.背景 在2024年3月23日&#xff0c;我们的Solar应急响应团队&#xff08;以下简称Solar团队&#xff09;应某公司之邀&#xff0c;介入处理了一起财务系统服务器遭受黑客攻击的事件。该事件导致服务器上大量文件被加密。我们的团队迅速获取了一个被加密的文件&#xff0c;并立…

面试题:MySQL 优化篇

定位慢查询 &#x1f496; 开源工具 调试工具&#xff1a;Arthas&#xff08;阿尔萨斯&#xff09;运维工具&#xff1a;Prometheus&#xff08;普罗米修斯&#xff09;、Skywalking &#x1f496; MySQL 慢查询日志 # 开启 MySQL 慢查询日志开关 slow_query_log1 # 设置慢…

HWOD:整型数组排序

一、知识点 while(1){}表示永久循环 使用break结束循环 二、题目 1、描述 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序 2、数据范围 1<n<1000 0<val<100000 3、输入 第一行输入数组元素个数 第二行输入待排序的数组&#x…

安装JupyterLab的集成环境

Python集成环境安装 不要半途而废&#xff0c;不要作业太多就抛下你手中的笔&#xff0c;拿起你旁边的手机&#xff0c;你觉得这样很有意义吗&#xff1f;一个小时一道题都没做&#xff0c;盯着手机屏幕它能给你一个未来吗&#xff1f;少分心就能多做一道题&#xff0c;多学样本…

编程新手必看,Python开发环境工具揭秘:高效编程的必备工具(2)

1、Python主流的开发工具介绍&#xff1a; Python的主流开发工具主要包括PyCharm、Visual Studio Code&#xff08;VS Code&#xff09;、IDLE等。具体介绍如下&#xff1a; 1.1、PyCharm&#xff1a; PyCharm是由JetBrains开发的&#xff0c;专为Python设计的IDE&#xff0…

生成 SSH 公钥

Windows 用户建议使用 Windows PowerShell 或者 Git Bash&#xff0c;在 命令提示符 下无 cat 和 ls 命令。 1、通过命令 ssh-keygen 生成 SSH Key&#xff1a; ssh-keygen -t ed25519 -C "Gitee SSH Key"-t key 类型 -C 注释 输出&#xff0c;如&#xff1a; 中间…

【tensorflow框架神经网络实现鸢尾花分类_Keras】

文章目录 1、前言2、鸢尾花分类3、结果打印 1、前言 【tensorflow框架神经网络实现鸢尾花分类】一文中使用自定义的方式&#xff0c;实现了鸢尾花数据集的分类工作。在这里使用tensorflow中的keras模块快速、极简实现鸢尾花分类任务。 2、鸢尾花分类 import tensorflow as t…

python如何画奥运五环

绘制奥运五环主要涉及到Python中的turtle绘图库运用&#xff1a; 程序源代码为&#xff1a; import turtle turtle.width(10) turtle.color(black) turtle.circle(50) turtle.penup() turtle.goto(120,0) turtle.pendown() turtle.color(red) turtle.circle(50) turtle.penup()…

KT-0850——三箱社交箱

动物行为学是一门跨学科的科学&#xff0c;致力于研究动物的行为模式、决策过程以及它们如何在不同的环境中进行社交互动。在探索动物王国的奥秘时&#xff0c;科学家们发展出了多种实验方法&#xff0c;其中三箱社交实验是一种被广泛采用的技术&#xff0c;用于揭示动物在社交…

力扣热题100_链表_141_环形链表

文章目录 题目链接解题思路解题代码 题目链接 141. 环形链表 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统…

从C到C++:深入理解基础语法差别

C基础语法讲解 前言1.输入输出2.命名空间2.1命名空间的理解&#xff1a;2.2命名空间的使用方式 3.缺省参数3.1概念&#xff1a;3.2分类&#xff1a;半缺省函数注意事项&#xff1a; 3.3使用案例&#xff1a;顺序表的初始化 4.函数重载4.1参数重载类型类型&#xff1a; 5.引用5.…

企业员工在线培训系统功能介绍

随着信息技术的飞速发展&#xff0c;企业员工培训方式正逐步从传统的面授转向灵活高效的在线培训。一个综合性的企业员工在线培训系统能够为员工提供多样化的学习资源、便捷的学习途径和有效的学习监督&#xff0c;以下是该系统的主要功能详细介绍&#xff1a; 1. 课程功能 线…

API接口对接全攻略:从入门到精通

在数字化时代&#xff0c;API&#xff08;应用程序接口&#xff09;已经成为了不同软件系统间信息交互的桥梁。对于开发者而言&#xff0c;掌握API接口的对接技术&#xff0c;无疑是通往更高效、更智能的软件开发之路的钥匙。本文将为大家提供一份从入门到精通的API接口对接全攻…