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

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(四)-搜索

搜索 

     搜索内容比较多,onesearch分成两部分,第一部分,Query构建,其中包括搜索词设置,设置返回字段,filter,高亮;第二部分分页和排序。第一部分是映射引擎负责,映射通用表达式为具体引擎的查询(Query)。

SearchRequest构建

构建Query

下图是服务层的搜索

1. clazzRepo类型库后面介绍,用于返回bean

2. SearchConfigBean  搜索设置,大部分默认即可用,传入优先,其中,QueryProperties包括搜索词,filter表达式,agg key

3. assemble装配映射引擎  映射引擎解释表达式按策略映射为esdsl

1. 排除_content字段返回(如果有),该字段是文档内容,通常比较大,_content返回高亮片段

2. searchRequest.source 设置是否保留source,若保留source字段可以返回source类型字段

3. queryMapping mapTo 方法  解释表达式,按策略映射相应的esdsl,Query使用Wrapper,跟上一版本不同,需自行base64编码,以前版本不需要

具体可参考 onesearch 1.0 文档

再见esdsl,搜索引擎 elasticsearch通用表达式搜索(附源码)_es表达式检索引擎-CSDN博客

构建高亮 

高亮设置是assemble方法负责,高两块映射

高亮字段设置本着默认即可用的原则,如果用户没有传入,Text类型字段设置高亮,目前没有支持字段级的高亮设置,实际上字段级设置使用上很麻烦

构建完整的搜索请求

服务层调用映射引擎构建Query和高亮部分,然后传给引擎层搜索服务,处理分页,排序,agg,最后执行,结果处理

引擎层,设置分页和排序,整个SearchRequest构建完成

类型库

类型库设置索引返回对应的类型,默认情况下返回Map,设置类型库可以返回bean

上图设置了索引”pdm-document”的返回类型,Elasticsearch8 通过SearchRequest的模板类型类似的实现

nested搜索

nested使用通用表达式的“.”,如,nested.a,nested字段的a属性

为了兼容性,设置了nested enable开关,nested enabled 的OperatorMapping实现可识别”.”操作符,映射为esdsl nested path

下图示例,api层的搜索代码

对应转换后的esdsl

处理搜索结果 

搜索返回SearchResponse,包括搜索结果和agg结果,搜索结果包括高亮处理,agg结果处理放在agg章节介绍

下图搜索结果处理逻辑

  1. content 字段用于全文搜索,文档内容,系统的保留名称,为了不和业务冲突,alias名称 “_content”
  2. 结果字段使用source字段,即,索引source属性设置为true,后续可选使用doc field
  3. 设置高亮的字段,如,content,优先返回高亮片段,而不是source,高亮字段可设置,系统默认Text类型为高亮

最后返回total,用于下一页搜索,搜索展示在下一篇聚合,综合展示搜索结果


http://www.mrgr.cn/news/31594.html

相关文章:

  • 数字化转型的理论框架对比:从多维视角指导企业成功变革对比DPBOKIT4ITCOBITTOGAF
  • Oracle+11g+笔记(5)-Oracle数据库管理操作
  • 【大模型教程】基于 InternLM 和 LangChain 搭建知识库助手
  • 网络资源模板--Android Studio 图书借阅App
  • 设计模式-策略模式
  • 【大屏方案】可视化综合展示系统解决方案(Word原件2024)
  • [Web安全 网络安全]-XSS跨站脚本攻击
  • MySQL中的函数简单总结,以及TCL语句的简单讲解
  • 手机切换IP简单方法:掌握技巧,轻松实现IP变换‌
  • 浅谈计算机视觉的学习路径1
  • 2024最新最全:Wireshark抓包详解(非常详细)零基础入门到精通,收藏这篇就够了
  • 2024 “华为杯” 中国研究生数学建模竞赛(A题)|风电场有功功率优化分配|数学建模完整代码+建模过程全解全析
  • 哪个牌子的麦克风好用?无线麦克风避坑指南:五大常见问题
  • 详解npm源及其使用方法
  • Vue vs React vs Angular 的区别和选择
  • 【SQL 用大白话描述事务并发 可能会遇到的问题】及解决策略
  • Java——认识String类
  • jsonschema - 校验Json内容和格式
  • 数据库某字段要保存中文时,怎样确定长度(以Oracle为例)
  • 变化检测(Change Detection)