从零开始搭建一个电商项目-商品检索(五)

  1. 前言

    大家网页端逛JD的时候,下图是很常见的。那么它的后端是如何实现的?最简单的想法就是把数据保存到mysql中,然后返回给前端。其实也可以,但是我们发现不止需要返回商品数据,还需要根据特定的信息去检索,进行模糊匹配。mysql关键字like可以实现,但是你不能确保查询的时候不进行全表扫描,而且大量数据查询,对于磁盘保存数据的mysql来说,可能就不太适合了。
    这问题那些服务器端大佬肯定早想到了 ElasticSearch 参考 第二篇 文章,使用Docker搭建ES。
    image.png

  2. 商品上架

    进入SPU管理菜单,点击上架。该功能主要保存商品信息到ES中,并修改SPU状态为已上架。image.png
    需要创建保存到ES索引的mappin(相当于mysql的数据类型),参考以下结构
    https://gitee.com/chris_777/easymall/blob/develop/easy-mall-search/src/main/resources/easy_product-index_mapping.json

  3. 渲染检索结果

    需要搭建nginx,前面第二篇有搭建教程。
    配置域名: 本机的 hosts文件
    192.168.202.129 easymall.com # 商城主页
    192.168.202.129 search.easymall.com # 检索服务页面
    192.168.202.129 item.easymall.com # 商品详情页面
    192.168.202.129 auth.easymall.com # 登录服务页面
    192.168.202.129 cart.easymall.com # 购物车服务页面
    192.168.202.129 order.easymall.com # 订单服务页面
    192.168.202.129 seckill.easymall.com # 秒杀服务页面
    配置nginx
    配置 nginx 的上有服务器组。
    image.png
    然后进到 conf.d 创建一个 easymall.conf 配置文件,如图。
    定义server_name 当访问这些域名时会匹配http://上游服务器组名(easymall)
    其中 proxy_set_header 防止请求转发丢失Host请求头
    image.png
    在gateway服务中配置路由信息,如图
    image.png
    启动gateway、search服务,访问 http://search.easymall.com/,如下图,
    image.png

  4. ES基本概念与语法

    本人使用的ES 8.3.3 版本,改版本取消了Type (类型)。
    Index(索引)

     动词,相当于 MySQL 中的 insert; 
     名词,相当于 MySQL 中的 Database  
    

    Document(文档)

     保存在某个索引(Index)下的一个数据(Document),文档是JSON格式的,Document 就像是 MySQL 中的某个 Table 里面的内容;  
    

    映射(Mapping)

    定义索引中的字段的名称;
    定义字段的数据类型,比如字符串、数字、布尔;
    字段,倒排索引的相关配置,比如设置某个字段为不被索引、记录 position 等。
    上述创建的 easy_product 的mapping,其中type 指定相应的数据类型
    
    • 数值类型: integer、long、short、byte、double、float

    • 字符串类型: text 或者 keyword

    • 布尔类型: boolean

    • 其中有一个 nested 类型的数据,该类型主要保存数组的结构。因为默认情况下,ES保存数据数据,会将其扁平化处理,从而会丢失数组的对应关系。

    • 还比如 keyword 声明的类型,可以进行精确查找,不会对该字段进行分词。

      analyzer 可以制定分词器,有兴趣的小伙伴可以去自行搜素。
      常用方法
      GET /_cat/nodes:查看所有节点
      GET /_cat/health:查看 es 健康状况
      GET /_cat/master:查看主节点
      GET /_cat/indices:查看所有索引

    GET index名/_mapping :查看索引的mapping信息
    GET index名/_search:查询索引信息,包括索引下的数据、数据的个数,分页等信息
    还有聚合查询,有兴趣的小伙伴自行百度。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信