热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

14、生鲜电商平台搜索模块的设计与架构

说明:搜索模块针对的是买家用户,在找菜品找的很费劲下的一种查询方面。目前也是快速的检索商品。对于移动端的APP买家用户而言,要求的速度在3秒内完成。支持模糊查询,由于业务实战表面,

说明:搜索模块针对的是买家用户,在找菜品找的很费劲下的一种查询方面。目前也是快速的检索商品。

           对于移动端的APP买家用户而言,要求的速度在3秒内完成。支持模糊查询,由于业务实战表面,整个搜索频率不到18%-25%之间

          同时业务也不算很大,所以并没采用java全文检索技术.(lucene等)。这里采用的就是基本的模糊查询。

1. 搜索维度的是思考。

             1.1  买家搜索的内容很有可能是针对菜品的本身属性而言,所以涉及到的内容有商品名称,商品别名,商品标签,商品描述,规格的名称,加工方式等。

             1.2  我们知道模糊搜索会导致索引失效,同时整个查询性能也是有影响的。

             1.3 业务形态显示有些热点的词语与内容可以做JVM缓存以提高整个单品的购买率。比如土豆现在分析出很多人要,如果我们可以跟某个商家谈好,一天

需要10w斤土豆的量进行供应,那么整个页面会出现这个关键字的默认显示。这个是后端灵活配置的。

2. 对于买家搜索的关键字,我们需要数据库进行记录,这样可以从系统级别算出买家会需要什么,可以进行针对性的营销.

相关数据库表的设计如下:

技术分享图片
CREATE TABLE `buyer_search` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘自动增加ID‘,
  `buyer_id` bigint(20) DEFAULT NULL COMMENT ‘买家ID‘,
  `words` bigint(20) DEFAULT NULL COMMENT ‘卖家ID‘,
  `create_time` datetime DEFAULT NULL COMMENT ‘创建时间‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘买家搜索记录表‘;
技术分享图片

补充说明:目的其实是很明确的,就是记录买家搜索的关键字以便分析与研究用。为了更好的体验用户。

相关业务代码如下:

技术分享图片
    /**
     * APP全文搜索 新
     * @param request
     * @param response
     * @param keyword
     * @return
     */
    @RequestMapping(value = "/search/new", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult newSearchGoods(HttpServletRequest request, HttpServletResponse response,Long userId,Long regionId,String keyword){
        try{
            logger.info("SearchController.search.keyword:搜索内容:" + keyword);
            //搜索结果按商家显示
            //List list = sellerService.searchSeller(regionId,keyword);
            //搜索结果按商品显示
            List list = goodsService.newSearchGoods(userId,regionId,keyword);
            return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", list);
        }catch(Exception ex){
            logger.error("[SearchController][newSearchGoods] exception :",ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试","");
        }
    }
    
技术分享图片

VO对象如下:

技术分享图片
/**
 * 搜索显示类(APP全局搜索)
 */
public class NewSearchVo implements Serializable{

    private static final long serialVersiOnUID= 1L;
        
    /**
     * 来源于users的ID
     */
    private Long sellerId;

    /**
     * 店铺名称
     */
    private String sellerName;
    
    /**
     * 店铺别名,可以理解为简称
     */
    private String sellerAlias;
    
    /**
     * 店铺logo
     */
    private String sellerLogo;
    
    /**
     * 店铺评级,默认为0
     */
    private int sellerRank;
    
    /**
     * 店铺评分
     */
    private Double sellerGrade;
    
    /**
     * 搜索后商品列表
     */
    private List searchItemList;

    public Long getSellerId() {
        return sellerId;
    }

    public void setSellerId(Long sellerId) {
        this.sellerId = sellerId;
    }

    public String getSellerName() {
        return sellerName;
    }

    public void setSellerName(String sellerName) {
        this.sellerName = sellerName;
    }

    public String getSellerAlias() {
        return sellerAlias;
    }

    public void setSellerAlias(String sellerAlias) {
        this.sellerAlias = sellerAlias;
    }

    public String getSellerLogo() {
        return sellerLogo;
    }

    public void setSellerLogo(String sellerLogo) {
        this.sellerLogo = sellerLogo;
    }

    public int getSellerRank() {
        return sellerRank;
    }

    public void setSellerRank(int sellerRank) {
        this.sellerRank = sellerRank;
    }

    public Double getSellerGrade() {
        return sellerGrade;
    }

    public void setSellerGrade(Double sellerGrade) {
        this.sellerGrade = sellerGrade;
    }

    public List getSearchItemList() {
        return searchItemList;
    }

    public void setSearchItemList(List searchItemList) {
        this.searchItemList = searchItemList;
    }
}
技术分享图片

3, 数据查询性能暂时的基本满足要求,也贴出来给大家一起参考,目的是共同学习与思考.

技术分享图片
    
    
技术分享图片

总结,由于搜索这块所涉及的业务相对而言比较少,功能也比较单一,含金量不是很高,所以互相学习。

对于扩展方案,如果这块的业务发现很大,可以采用中文分词记录,进行数据的挖掘,已经冷热点数据的一个分离等等,这个后期大家有需要的话,我们再研究。

相关业务运营截图如下:

技术分享图片技术分享图片技术分享图片

转载自-- https://www.cnblogs.com/jurendage/p/9062649.html

14、生鲜电商平台-搜索模块的设计与架构


推荐阅读
  • BeautifulSoup4 是一个功能强大的HTML和XML解析库,它能够帮助开发者轻松地从网页中提取信息。本文将介绍BeautifulSoup4的基本功能、安装方法、与其他解析工具的对比以及简单的使用示例。 ... [详细]
  • 本文探讨了SQLAlchemy ORM框架中如何利用外键和关系(relationship)来建立表间联系,简化复杂的查询操作。通过示例代码详细解释了relationship的定义、使用方法及其与外键的相互作用。 ... [详细]
  • 深入解析Android Activity生命周期
    本文详细探讨了Android中Activity的生命周期,通过实例代码和详细的步骤说明,帮助开发者更好地理解和掌握Activity各个阶段的行为。 ... [详细]
  • 探讨并提供解决方案以应对 'view is not in the window hierarchy' 的错误提示。 ... [详细]
  • 本文详细介绍了一种实现PopupWindow全屏显示且能有效隐藏虚拟按键的技术方案,适用于Android开发。此方法经过实际测试,表现良好,兼容性优秀。 ... [详细]
  • 深入理解异步多线程编程模型
    现代计算机系统中的CPU通过并行处理提高效率,但所谓的并发处理实际上是一种基于轮询的模拟并行。本文探讨了现代处理器如何通过虚拟化技术实现更高的并发性能,以及在.NET框架中如何有效利用线程和异步编程模式。 ... [详细]
  • 本文探讨了 Boost 库中的 Program Options 组件,这是一个强大的工具,用于解析命令行参数和配置文件。文章介绍了如何正确设置和使用该组件,包括处理复杂选项和负数值的方法。 ... [详细]
  • 本文通过具体示例详细介绍了 Python 中的装饰器和装饰类的使用方法,包括带参数的装饰器和装饰类的应用场景。 ... [详细]
  • HDU1085 捕获本·拉登!
    问题描述众所周知,本·拉登是一位臭名昭著的恐怖分子,他已失踪多年。但最近有报道称,他藏匿在中国杭州!虽然他躲在杭州的一个洞穴中不敢外出,但近年来他因无聊而沉迷于数学问题,并声称如果有人能解出他的题目,他就自首。 ... [详细]
  • BL550721、特点液晶驱动输出:Common输出4线,Segment输出36线内置显示寄存器364144bit2线串行接口(SCL,SDA)内置震荡电路内置液晶驱动电源电路13 ... [详细]
  • 本文介绍了如何在Windows操作系统中安装FFTW库,并详细说明了使用Visual Studio 2010进行4096点快速傅里叶变换(FFT)的步骤。包括下载预编译文件、生成库文件以及配置环境等关键环节。 ... [详细]
  • 代码生成器实战教程:提升编程效率的利器
    本系列文章旨在通过一系列实践案例,详细介绍如何利用代码生成器提高开发效率。本文将引导您完成从下载安装到实际应用的全过程。 ... [详细]
  • 解决 Pytest 运行时出现 FileNotFoundError 的方法
    在使用 Pytest 进行测试时,可能会遇到 FileNotFoundError 错误,提示无法找到指定的文件或目录。本文将探讨该错误的原因及解决方案。 ... [详细]
  • javascript——对象的概念——函数 1 (函数对象的属性和方法)
    一、创建函数函数是一种对象:Function类是对象,可以通过Function实例化一个函数,不过最多的还是利用function来创建函数。方式一:利用Function类来实例化函 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
author-avatar
熊砚龙_587
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有