搜索引擎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,用于下一页搜索,搜索展示在下一篇聚合,综合展示搜索结果

相关推荐
风清再凯1 小时前
01-ELK安装ES,ES-head
大数据·elk·elasticsearch
JAVA学习通8 小时前
SpringOJ竞赛项目----组件ElasticSearch
大数据·elasticsearch·搜索引擎
xxxxxxllllllshi8 小时前
Java中Elasticsearch完全指南:从零基础到实战应用
java·开发语言·elasticsearch·面试·职场和发展·jenkins
失散1319 小时前
分布式专题——47 ElasticSearch搜索相关性详解
java·分布式·elasticsearch·架构
铭毅天下1 天前
Elasticsearch 到 Easysearch 数据迁移 5 种方案选型实战总结
大数据·elasticsearch·搜索引擎·全文检索
Elastic 中国社区官方博客1 天前
Elasticsearch 推理 API 增加了开放的可定制服务
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
李白你好1 天前
一键式搜索引擎Hacking工具
搜索引擎
yumgpkpm1 天前
华为鲲鹏 Aarch64 环境下多 Oracle 数据库汇聚操作指南 CMP(类 Cloudera CDP 7.3)
大数据·hive·hadoop·elasticsearch·zookeeper·big data·cloudera
Elastic 中国社区官方博客1 天前
AI Agent 评估:Elastic 如何测试代理框架
大数据·人工智能·elasticsearch·搜索引擎