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

news/2024/11/17 3:55:50/

搜索 

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

SearchRequest构建

构建Query

下图是服务层的搜索

1. clazzRepo类型库后面介绍,用于map 转 bean,搜索结果返回bean

2. SearchConfigBean  搜索设置,大部分默认即可用,传入优先,其中,QueryProperties包括搜索词,filter表达式,agg key;sourceField返回字段,目前支持source field

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

4. searchObj 是模板类型,对应elasticsearch8的实现是SearchRequest.Builder,v6是SearchSourceBuilder

下图是assemble实现 

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

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

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

装配映射引擎,block mapping映射块,如,query,highlight,agg,装配组装成完整搜索对象,即esdsl,可参考 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.ppmy.cn/news/1531479.html

相关文章

XXL-JOB:将accessToken扩展为动态

背景: xxl-job版本:2.0.2 xxl-rpc-core版本:1.4.0 springboot版本:1.5.20.RELEASE Kingbase版本:V8R6 针对业务上的需求,做一些个性化扩展: 1、启用accessToken,并且使用SM2加密&…

Serilog文档翻译系列(六) - 可用的接收器、增强器、格式化输出

01、提供的接收器 Serilog 使用接收器将日志事件以各种格式写入存储。许多接收器由更广泛的 Serilog 社区开发和支持;可以通过在 NuGet 上搜索 serilog 标签找到。 02、增强器 日志事件可以通过多种方式增强属性。通过 NuGet 提供了一些预构建的增强器&#xff…

pyhton语法 正则表达式

pyhton语法 正则表达式 1.正则表达式介绍1.1 正则表达式入门1.2 正则替换 2.正则效验2.1正则-校验单个字符2.2正则-校验多个字符2.3 正则-校验开头和结尾2.4 正则-校验分组2.5 正则校验邮箱2.6正则获取分组后的数据2.7 引用指定组的内容 总结 1.正则表达式介绍 1.1 正则表达式…

1.MySQL的安装

目录 下载安装包 安装前环境的准备 正式安装 下载安装包 MySQL安装网址:https://www.mysql.com/cn/ 进去之后就是上面这个页面,进行汉化的时候将这个网页拉至最下,右下角点成中文就可以,如下这个页面。 回到页面顶端,点击下载&a…

NVIDIA 的 Blackwell 架构:解析 B100、B200 和 GB200

随着人工智能和机器学习领域继续以惊人的速度发展,NVIDIA 的最新创新——Blackwell 架构,将以无与伦比的并行计算能力重新定义AI和HPC。 NVIDIA 展示了一系列新技术,有望以前所未有的方式加速 AI 训练和推理。他们推出了 Blackwell GPU、GB20…

设置Hadoop守护进程的JVM参数

一般情况下我们不去动守护进程的JVM,这里的守护进程说的是NameNode、DataNode等Hadoop服务自己本身的进程。但是有一些特殊情况下需要限制,比如工作中虽然集群中资源队列会有10%左右的预留空余,不过这是整个集群队列的限制,对于Da…

Thinkphp5x远程命令执行 靶场攻略

环境配置 云服务器:47.113.231.0:8080 靶场:vulhub/thinkphp/5-rce docker-compose up -d #启动环境 漏洞复现 1.访问靶场:http://47.113.231.0:8080/ 2.远程命令执⾏ POC: ? sindex/think\app/invokefunction&func…

openEuler 修改网卡和常用网络配置

简介 1、网卡启用、禁用和查看状态 2、编辑网卡,配置静态Ip 3、删除之前网卡缓存的Ip 4、机器即连接内网,又连接外网 的网卡配置 5、openEuler 修改默认的镜像仓库(推荐)1、网卡启用、禁用和查看状态 # 查看网络状态 nmcli devi…