当前位置: 首页 > article >正文

优维低代码实践:搜索功能

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。


优维低代码实践连载第27期

《搜索功能(后端搜索对接)》

在之前的示例中,我们有直接对接后端数据、通过事件进行接口的翻页数据请求等,但是在实际操作过程中,面对大量的数据,如果通过一页一页的翻阅查找,不方便且浪费时间,那么就会有搜索的功能要求,比如单字段的搜索,多字段的且、或搜索等。那接下来的示例将基于cmdb搜索实例(
providers-of-cmdb.instance-api-post-search)接口,给大家介绍如何进行后端搜索功能。

一、基于context数据源搜索

1.1 搜索框

添加搜索框构件后,修改搜索框的属性

placeholder: 请输入发布单元
shouldTrimQuery: true
shouldUpdateUrlParams: false
q: <% QUERY.q %>

修改输入框的事件内容。当输入框输入完搜索内容,被点击搜索时,将输入的内容以key:value的形式推送到url上,供后续页面刷新时,context的请求能够获取到搜索内容。

filter.update:
  action: history.pushQuery
  args:
    - q: <% EVENT.detail.query %>
      page: 1

1.2 context数据源

更改context中的请求内容,通过query.q或其他推送到url上的参数,进行或、并的匹配操作,从而达到动态获取用户输入的信息,并在页面刷新时,自动将搜索内容作为入参,调用后端接口匹配符合的数据并返回给前端渲染。

provider: providers-of-cmdb.instance-api-post-search

agrs:

- APP
- fields:
    '*': 1
    businesses.business_line.name: 1
    businesses.business_line.product_line_user.departmentName: 1
    businesses.business_line.product_line_user.name: 1
    businesses.business_line.product_line_user.nickname: 1
    businesses.name: 1
    businesses.owner.departmentName: 1
    businesses.owner.name: 1
    businesses.owner.nickname: 1
    releaseAbbreviation: 1
  page: <% QUERY.page || 1 %>
  page_size: <% QUERY.pageSize || 8 %>
  query:
    $or:
      - releaseTimes:
          $like: '%${query.q}%'
      - releaseNum:
          $like: '%${query.q}%'
      - name:
          $like: '%${query.q}%'
      - releaseDate:
          $like: '%${query.q}%'
    businesses.business_line.instanceId:
      $eq: '${query.product_line}'
    businesses.instanceId:
      $eq: '${query.business}'
    releaseDate:
      $eq: '${query.releaseDate}'
  sort:
    ctime: 1

1.3 前端输入搜索内容验证搜索结果

同理,下拉框的选择搜索与搜索框的输入搜索一致,将下拉框所选中的内容推送到url上,再在context中配置动态数据的获取;确定好搜索的内容的同级关系(并、或关系),使用$or\$and等mongoDB的查询语法进行配置。

PS:不同的接口所需的查询条件不一致,具体入参要根据接口文档内容来确定,但是整体的搜索逻辑是一样的。


http://www.kler.cn/news/156842.html

相关文章:

  • 前端工作总结03
  • Ubuntu20.04/Linux中常用软件的安装
  • 翻硬币(第四届蓝桥杯省赛C++B组)(java版)
  • csdn语法说明/csdn新手指导/csdn入门指导/csdn博文助手
  • 初试占比7成!只考一门数据结构+学硕复录比1:1的神仙学校,大连交通大学考情分析
  • 每天一点python——day86
  • docker-compose脚本编写及常用命令
  • GlusterFS + 防火墙访问控制+提供NFS服务
  • zabbix配置snmp trap--使用snmptrapd和Bash接收器(缺zabbix_trap_handler.sh文中自取)--图文教程
  • 腾讯云双十二优惠活动有哪些?详细攻略来了!
  • 【云备份】服务端数据管理模块
  • 不瞒各位,不安装软件也能操作Xmind文档
  • 141. 环形链表
  • 食品行业研究:中国板栗市场种植前景及产量分析
  • 不修改数据库更换WordPress域名
  • 机器学习——支持向量机(SVM)
  • 支持PDF文档开发处理,Aspose.PDF升级至最新23.11,一起来看
  • 【C++】STL简介(了解)【STL的概念,STL的历史缘由,STL六大组件、STL的重要性、以及如何学习STL、STL的缺陷的讲解】
  • YOLOv5结合BiFPN,如何替换YOLOv5的Neck实现更强的检测能力?
  • 开启全新消费革命——消费增值,让每一笔消费变成财富!
  • CVE-2016-2510CVE-2017-5586 BeanShell漏洞
  • 网络层之IP数据报格式、数据报分片、IPv4、子网划分和子网掩码
  • 【ACM独立出版、确定的ISBN号】第三届密码学、网络安全和通信技术国际会议(CNSCT 2024)
  • git 提交文件过大 解决办法
  • 【C++】赋值运算符重载
  • Java中线程池相关的七个参数
  • 22、为什么是卷积?
  • 二叉树题目:二叉树的完全性检验
  • 浅谈安科瑞无线测温设备在挪威某项目的应用
  • Jupiter notebook使用