搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(一)-概述
简介
此前的专栏介绍onesearch1.0和2.0,详情参看4 参考资料,本文解释onesearch 3.0,从Elasticsearch6升级到Elasticsearch8代码实现 ,Elasticsearch8 废弃了high rest client,使用新的ElasticsearchClient,本文重点介绍ElasticsearchClient如何实现onesearch的特性,同时解释onesearch代码实现细节。
ElasticsearchClient使用起来3个特点,
- Builder,核心对象通过builder构建
- Lambda构建,builder支持使用lambda
- 强类型和容器,如,聚合,每个类型构建和取值,同时提供容器,可放入不同聚合,为用户提供抽象处理
特性
v1.0 schema管理,0代码agg,通用表达式映射引擎,抽象搜索引擎
v2.0
1) 分布式文件索引
2) 增强装配映射引擎
full text查询映射策略
match/match_phrase/query_string/。。。
返回字段,使用source field
nested
3) springboot starter
4) 搜索权限,搜出就能看到
5) suggester
v3.0 elasticsearch 6 升级到 8,client更换为ElasticsearchClient
术语
- 文档 Document
elasticsearch 一行数据称为文档,需要注意与文件/文档区分,有冲突的地方用“ES文档”区分
- 索引schema
相当于关系数据库的schema,xml格式,定义索引的字段,类型,还有搜索策略,分词等搜索相关属性
- 搜索/过滤
elasticsearch查询(query)分两部分,搜索和过滤,搜索计算文档与搜索词相似(匹配)度,得出分数排序,分数越高相似度越高,排序也靠前;过滤相当于sql的where,结果是true或者false
- 分词
索引可以设定是否分词,分词器分割文本或字符串成term,适用模糊搜索;反之,使用term查询
- 查询对象装配映射
查询的装配映射是onesearch的特性,elasticsearch es dsl 查询功能非常丰富,可调参数多, 提供精准细致的搜索调整,但也很难用,更难复用,onesearch设计装配映射组件支持通用表达式转换esdsl,用户只需编写通用表达式,如,((f1=‘a’or f2=’b’) and f3=‘c’)) 即可实现搜索过滤,类似elasticsearch自身也提供了sql查询功能,大大降低开发难度,同时具备高复用性
参考资料
https://blog.csdn.net/szlhj/category_11563011.html onesearch 1.0/2.0
架构

- schema模块,定义索引字段,索引策略,搜索策略等,管理索引及其搜索特性
- 聚合搜索(agg)模块,基于schema模块,支持xml定义agg,零编码增加agg主题
- 查询模块,负责构建通用表达式(如,((f1=‘a’or f2=’b’) and f3=‘c’)),作为搜索输入条件代替esdsl
- 装配映射引擎,映射通用表达式为最优的es dsl,支持=,!=,like,in,range,prefix,not/and/or,大小括号,点(.)等操作符映射,解决es dsl难使用,难复用的痛点
- 抽象搜索引擎接口,无缝接入不同的搜索引擎,如,elasticsearch,solrcloud等,更可同时使用多种引擎
- 同步,全量同步/增量同步,使用分布式dataX
*geo api 未实现
工程结构-引擎部分
上一章架构介绍 本文解释elasticsearch v8 client开发,下图介绍一下引擎部分,服务和api部分不深入介绍

adapter-api 抽象的搜索引擎接口,主要有索引服务,搜索服务,文档服务
adapter-elasticsearch elasticsearch实现
引擎层之上是服务层,服务层不依赖具体引擎,因此可以适配不同的搜索引擎,甚至可以同时使用不同的搜索引擎
elasticsearch升级
本章开始介绍elasticsearch升级, onesearch改造,分4部分,
1) 索引, 构建索引,put mapping,put nested mapping,alias,删除索引
2) 文档,文档构建和写入,nested,批量
3) 搜索,query,filter,nested,高亮,分页,排序,搜索结果
4) 聚合,agg查询,agg构建(bucket类型和metrics类型), 聚合结果
还有suggester,目前没有使用,本次升级未有涉及
后续详细介绍每个部分
相关文章:
搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(一)-概述
简介 此前的专栏介绍onesearch1.0和2.0,详情参看4 参考资料,本文解释onesearch 3.0,从Elasticsearch6升级到Elasticsearch8代码实现 ,Elasticsearch8 废弃了high rest client,使用新的ElasticsearchClient,…...
ArcGIS Pro高级地图可视化—双变量符号地图
ArcGIS Pro高级地图可视化 ——双变量符号地图 1 背景 “我不是双变量,但我很好奇。”出自2013 年南卡罗来纳州格林维尔举行的 NACIS 会议上,双变量地图随着这句俏皮的话便跳跃在人们的视角下,在讨论二元映射之后,它不仅恰逢其…...
rust属性宏
1. #[repr(xxx)] repr全称是 “representation”,即表示、展现的意思。在#[repr(u32)]中,u32表示无符号 32 位整数。这意味着被这个属性修饰的类型将以 32 位无符号整数的形式在内存中存储和布局。例如,如果有一个枚举类型被#[repr(u32)]修饰: #[repr(u32)] enum MyEnum {…...
《pyqt+open3d》open3d可视化界面集成到qt中
《pyqtopen3d》open3d可视化界面集成到qt中 一、效果显示二、代码三、资源下载 一、效果显示 二、代码 参考链接 main.py import sys import open3d as o3d from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget from PyQt5.QtGui import QWindow from PyQt5.Qt…...
学习记录:js算法(四十七):相同的树
文章目录 相同的树我的思路网上思路队列序列化方法 总结 相同的树 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 图一: 图二&…...
使用Hutool-poi封装Apache POI进行Excel的上传与下载
介绍 Hutool-poi是针对Apache POI的封装,因此需要用户自行引入POI库,Hutool默认不引入。到目前为止,Hutool-poi支持: Excel文件(xls, xlsx)的读取(ExcelReader)Excel文件(xls&…...
asp.net core grpc快速入门
环境 .net 8 vs2022 创建 gRPC 服务器 一定要勾选Https 安装Nuget包 <PackageReference Include"Google.Protobuf" Version"3.28.2" /> <PackageReference Include"Grpc.AspNetCore" Version"2.66.0" /> <PackageR…...
拿到一个新项目,如何开展测试
1. 拿到一个新的项目或者新的需求,首先需要搞清楚他的背景、目标和需求,这个过程需要和产品、开发、客户去沟通。 2. 清楚需求后,首先将业务流程走通,确保项目的基础功能是正常的 3. 根据项目需求明确测试的目标,如&…...
pre-commit 的配置文件
这个文件是 pre-commit 的配置文件,通常命名为 .pre-commit-config.yaml。pre-commit 是一个用于管理和维护多种预提交钩子的框架,旨在在代码提交(git commit)之前自动执行一系列检查和格式化任务,以确保代码质量和一致…...
5G-A和F5G-A,对于AI意味着什么?
2024年已经过去了一大半,风起云涌的AI浪潮,又发生了不小的变化。 一方面,AI大模型的复杂度不断提升,模型参数持续增加,智算集群的规模也随之增加。万卡级、十万卡级集群,已经逐渐成为训练标配。这对智算网络…...
vue-实现rtmp直播流
1、安装vue-video-player与videojs-flash npm install vue-video-player -S npm install videojs-flash --save 2、在main.js中引入 3、组件中使用 这样就能实现rtmp直播流在浏览器中播放,但有以下几点切记,不要入坑 1.安装vue-video-player插件一定…...
论文阅读【时间序列】ModerTCN (ICLR2024)
【时间序列】ModerTCN (ICLR2024) 原文链接:ModernTCN: A Modern Pure Convolution Structure for General Time Series Analysis 代码仓库:ModerTCN 简易版本实现代码可以参考:(2024 ICLR)ModernTCN:A Mod…...
Robot Operating System——二维平面中的位置和方向
大纲 应用场景1. 移动机器人导航场景描述具体应用 2. 自动驾驶车辆控制场景描述具体应用 3. 机器人运动规划场景描述具体应用 4. 室内导航场景描述具体应用 5. 仿真环境场景描述具体应用 定义字段解释 案例 geometry_msgs::msg::Pose2D 是 ROS 2 中的一个消息类型,用…...
一文带你读懂分库分表,分片,Sharding的许多概念
一文带你读懂分库分表,分片,Sharding的许多概念 分库是将一个库拆分为多个库,分表就是将一个表拆分为多个表。分库分表有垂直拆分和水平拆分。垂直拆分一般是按照业务将表分到不同的库中(此种不在本发的讨论范围)。水平拆分是将表的数据拆分…...
算法实战(五):如何用学过的数据结构和算法实现一个短网址系统?
算法实战(五):如何用学过的数据结构和算法实现一个短网址系统? 在互联网时代,我们经常会遇到一些很长的网址,不仅不便于记忆,而且在一些场合下可能会受到长度限制。短网址系统就是为了解决这个问题而产生的。本文将介绍如何用学过的数据结构和算法实现一个短网址系统,…...
Python 环境搭建
Python 环境搭建 本章节我们将向大家介绍如何在本地搭建Python开发环境。 Python可应用于多平台包括 Linux 和 Mac OS X。 你可以通过终端窗口输入 “python” 命令来查看本地是否已经安装Python以及Python的安装版本。 Python下载 Python最新源码,二进制文档&am…...
uniapp vue3 使用echarts绘制图表 柱状图等
部分内容AI总结 Uniapp 使用 Vue3 和 ECharts 组件的总结 在 Uniapp 中使用 Vue3 和 ECharts 进行数据可视化是一种常见需求。以下将详细介绍如何在 Uniapp 项目中安装 ECharts 插件、在 main.js 中挂载 ECharts 以及一个简单的示例 demo。 1. 下载 ECharts 插件 在 Uniapp 中…...
字符串处理的艺术:深入探索charAt(), indexOf(), nextLine(), 和 next() 的应用与组合
摘要 本文旨在深入探讨Java中字符串处理的核心方法——charAt(), indexOf(), nextLine(), 和 next(),通过实例展示这些方法如何协同工作以解决复杂的字符串处理任务。我们将从基础概念出发,逐步构建到高级应用,包括字符串的遍历、搜索、读取…...
C#八股总结
重载和重写的区别 方法重载:在同一个类中定义多个同名但参数不同的方法。 方法重写:通过使用 virtual 和 override 关键字,实现基类和派生类之间的方法重写。 重载发生在同类中,重写发生在父子类中 重载方法名相同参数不同&#…...
iOS 中的 sqlite-shm 和 sqlite-wal 文件丢失
iOS 中的 sqlite-shm 和 sqlite-wal 文件丢失或损坏可能会导致 NSManagedObjectContext 的 performAndWait 方法抛出 NSInternalInconsistencyException 异常。这是因为这些文件在 SQLite 的 Write-Ahead Logging (WAL) 模式下起着关键作用,Core Data 依赖它们来确保…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
