首页 > 其他分享 >搜索功能-实现思路

搜索功能-实现思路

时间:2023-07-10 16:46:05浏览次数:37  
标签:功能 keyword 搜索词 模式 查询 搜索 思路 筛选

四种搜索词

搜索热词

热词是一种由运维提前维护好的搜索词,会展示在搜索界面的搜索框下,用户可以点击直接搜索该热词的相关结果。

运维维护好后,会双写到DBRedis。接口查询时,会保存到本地缓存,有效期5分钟,所以维护了一个热词,需要五分钟后才能看到。

热词会被视为keyword

联想词

联想词是一种由运维维护的,用以提供用户搜索引导的搜索词。在用户输入部分内容后,会展示包含输入内容的联想词。

运维维护好后,会双写到DBES。由于ES本身有一秒钟的写入缓存,故维护好后需要一秒钟后才能使用。

联想词会被视为keyword

特定词

特定词是运维维护的一种特殊的搜索词。当用户进行搜素操作时,会在查询商品前,优先查询特定词,特定次会返回一个超链接。前段会自动跳转到该超链接。

联想词会被视为keyword

同义词

同义词是运维维护的一种用来扩展搜索的搜索词。当用户在搜索框输入的搜索词(主词),能够关联查询到维护的同义词(子词)时,那么此时查询的keyword就变成了主词+子词。

ES 使用

索引

对于需要查询多个字段的模糊查询,可以将多个字段融合成一个查询大字段keyword,匹配该字段。

ElasticSearch索引的删除,会同时删除索引下的文档数据。如确认有必要删除更改已有索引,需配合ElasticSearchreindex操作,进行数据备份。

对于映射的定义,是一个文档及其包含的字段如何存储和索引的过程。ElasticSearch中有三种映射模式。

模式 是否需要提前定义Mapping 新加未定义字段对Mapping的影响 数据写入与搜索情况
动态模式 Mappping动态调整 可写,可搜
静态模式 不会有变化 可写,未定义字段不可搜
严格模式 插入未定义字段报错 同上

推荐采用静态模式。

  • 从维护角度看,我们希望保持“先定义,再操作”的数据库操作习惯。
  • 只需要考虑将搜索与聚合的字段添加到mapping中,后续只是用来展示的字段不会改变索引的结构,性能比动态模式更好。
  • 即使添加了未定义字段的数据,也不会报错,仅作展示用,兼容性和健壮性和比严格模式好。

搜索实现

搜索功能主要由两部分组成:搜索,筛选。

搜索功能提供对搜索词的结果查询。接口返回结果是商品列表。

筛选功能提供对搜索词的搜索结果的聚合操作,提取筛选值关键字,以供用户分类筛选查看查询结果。接口返回数据是商品列表聚合出来的筛选条件。

从业务需求来看,搜索和筛选对于同一次搜索流程来说,在查询条件上是保持统一的。即接口查询入参相同。这样才能得到相同的es搜索结果

搜索

搜索流程

设计模式

状态模式、责任链模式、策略模式

  • 状态模式:控制流程

  • 责任链模式:构建DSL

  • 策略模式:选择性构建DSL

流程

  1. 搜索词keyword搜索
    1. Keyword逻辑
    2. deeplink特定词搜索
      1. 存在则返回
      2. 作为类别名称查询关联类别
        1. 不存在:设置状态为关键字搜索
        2. 存在:设置状态为商品编码搜索
          1. 填充同义词、黑名单等前置条件
        3. 构建公共基础排序
        4. 策略构建排序
        5. 执行搜索
          1. 存在:
            1. 筛选操作:
              1. 执行聚合结果解析
                1. 自然排序
                2. 根据配置的筛选值顺序排序
            2. 搜索操作:
              1. 组装搜索结果,返回
          2. 不存在:
            1. 如果状态为关键字搜索,修改状态为商品编码搜索
            2. 如果状态为商品编码搜索,修改状态为关键字搜索
            3. 清空搜索语句,重新组装,查询结果
  2. 商品分类categoryCode搜索
    1. 构建状态为关键字类别搜索
    2. 类别信息查询
    3. 黑名单标记
    4. 构建指定类别为入参
    5. 公共排序
    6. 策略构建排序
    7. 执行搜索
    8. 同2.5
  3. 营销搜索

筛选

整体逻辑与商品相同,不同的是在流程中会添加商品的聚合语句,在结果解析中会加工聚合结果,处理成前段可展示的筛选条件。

在用户点击筛选条件时,筛选条件会转化为搜索关键字。

标签:功能,keyword,搜索词,模式,查询,搜索,思路,筛选
From: https://www.cnblogs.com/radish40/p/17541537.html

相关文章

  • 程序员必备:使用AI工具通义千问,没有广告没有假链接,比搜索引擎要便捷多了,回答还算满意
    我提的问题是:使用Python连接Oracle,cx_Oracle和oracledb那个效率更高,功能更全,请列出他们的区别和实例代码回复是:以下是使用Python连接Oracle时,cx_Oracle和oracledb的效率和功能比较及实例代码:效率比较:cx_Oracle是一个Python官方标准库,使用了JIT编译技术,可以提高查询性能。ora......
  • 接上篇:如何在项目中实现ES查询功能?
     大家好,之前我们教大家如何将MySQL数据同步到ES。这篇文章在技术派项目中实现ES查询功能。不多说上文章目录: 01背景在SpringBoot整合ES中,有两种常见方法,一种是ElasticsearchRestTemplate,另一种是RestHighLevelClient。ElasticsearchRestTemplate是ES基......
  • app直播源代码,自定义顶部搜索栏显示隐藏
    app直播源代码,自定义顶部搜索栏显示隐藏1、wxml代码 <viewclass="bar-box"style="height:{{navBarHeight}}px;">  <viewwx:if="{{show}}"class="level"style="margin-top:{{barHeight}}px;">    <viewclass=&......
  • 互联网医院系统|互联网医院源码开发|线上医疗功能有哪些?
    互联网医院系统通过线上诊疗,让医生与患者之间的距离消失,实现了时间空间的无障碍交流。患者可以随时随地进行在线咨询,医生根据实时数据做出科学判断,为患者提供个性化的指导和治疗方案。这不仅大大提高了患者就医的效率,更为那些居住在偏远地区的患者解决了求医难的问题。互联网医院系......
  • MES系统的功能(二)
    MES系统具体功能4、MES设备状态监控管理MES设备管理系统的状态监控管理模块主要包括设备数据采集、数据处理以及设备运行状态信息,对不同的停机时间进行归类,实时参数转换成数字数量传输到PC机上用于监控;可以将采集到的设备状态信息生产电子报表进行实时展现,方便相关设备管理人员随时......
  • Tita 升级|任务复制功能上线
    1.  支持在计划表列表快速复制任务Tita-OKR和新绩效一体化管理平台使用场景:新发起的任务和之前任务的内容基本一致,重新填写一遍需要花费很多时间 ......
  • js调用浏览器打印功能
    1.打印开始结束的信息2.点击打印按钮<buttontype="button"onclick="doPrint()">打印</button><script>functiondoPrint(){console.log(33333333333)bdhtml=window.document.body.innerHTML;sprnstr="<!--startprint--&......
  • 2023-07-10 记录使用chrome浏览器点击内容搜索时跳转到了一个叫www.ibaixia.com的网站
    前言:猜测是chrome中毒了,或者就是网页被劫持了,每次搜索会跳转到www.ibaixia.com,然后在一瞬间又跳转到了百度搜索页。解决方案:在chrome打开chrome://settings/searchEngines,也就是打开设置,找到【网站搜索】一栏,在该栏中找到百度字样,然后打开它,如果是正确的www.baidu.com,那就不用......
  • 基于three.js的3D展厅Demo功能设计与实现
    参考网址: http://www.webgl3d.cn/          https://www.three3d.cn/ 1、three.js之helloworld    功能:立方体在三维空间的转动。   代码位置:demo_0_scene    目的:理解场景/相机 /渲染器/坐标系/几何体/材质/物体......
  • SSO单点登录基本概念实现思路以及小的实例详解
    一、什么是单点登录SSO(SingleSign-On)SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。二、单点登录解决了什么问题解决了用户只需要登录一......