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

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

简介

   此前的专栏介绍onesearch1.02.0,详情参看4 参考资料,本文解释onesearch 3.0,从Elasticsearch6升级到Elasticsearch8代码实现 Elasticsearch8 废弃了high rest client,使用新的ElasticsearchClient,本文重点介绍ElasticsearchClient如何实现onesearch的特性,同时解释onesearch代码实现细节。

ElasticsearchClient使用起来3个特点,

  1. Builder,核心对象通过builder构建
  2. Lambda构建,builder支持使用lambda
  3. 强类型和容器,如,聚合,每个类型构建和取值,同时提供容器,可放入不同聚合,为用户提供抽象处理

特性

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. 拿到一个新的项目或者新的需求&#xff0c;首先需要搞清楚他的背景、目标和需求&#xff0c;这个过程需要和产品、开发、客户去沟通。 2. 清楚需求后&#xff0c;首先将业务流程走通&#xff0c;确保项目的基础功能是正常的 3. 根据项目需求明确测试的目标&#xff0c;如&…...

pre-commit 的配置文件

这个文件是 pre-commit 的配置文件&#xff0c;通常命名为 .pre-commit-config.yaml。pre-commit 是一个用于管理和维护多种预提交钩子的框架&#xff0c;旨在在代码提交&#xff08;git commit&#xff09;之前自动执行一系列检查和格式化任务&#xff0c;以确保代码质量和一致…...

5G-A和F5G-A,对于AI意味着什么?

2024年已经过去了一大半&#xff0c;风起云涌的AI浪潮&#xff0c;又发生了不小的变化。 一方面&#xff0c;AI大模型的复杂度不断提升&#xff0c;模型参数持续增加&#xff0c;智算集群的规模也随之增加。万卡级、十万卡级集群&#xff0c;已经逐渐成为训练标配。这对智算网络…...

vue-实现rtmp直播流

1、安装vue-video-player与videojs-flash npm install vue-video-player -S npm install videojs-flash --save 2、在main.js中引入 3、组件中使用 这样就能实现rtmp直播流在浏览器中播放&#xff0c;但有以下几点切记&#xff0c;不要入坑 1.安装vue-video-player插件一定…...

论文阅读【时间序列】ModerTCN (ICLR2024)

【时间序列】ModerTCN (ICLR2024) 原文链接&#xff1a;ModernTCN: A Modern Pure Convolution Structure for General Time Series Analysis 代码仓库&#xff1a;ModerTCN 简易版本实现代码可以参考&#xff1a;&#xff08;2024 ICLR&#xff09;ModernTCN&#xff1a;A Mod…...

Robot Operating System——二维平面中的位置和方向

大纲 应用场景1. 移动机器人导航场景描述具体应用 2. 自动驾驶车辆控制场景描述具体应用 3. 机器人运动规划场景描述具体应用 4. 室内导航场景描述具体应用 5. 仿真环境场景描述具体应用 定义字段解释 案例 geometry_msgs::msg::Pose2D 是 ROS 2 中的一个消息类型&#xff0c;用…...

一文带你读懂分库分表,分片,Sharding的许多概念

一文带你读懂分库分表,分片,Sharding的许多概念 分库是将一个库拆分为多个库&#xff0c;分表就是将一个表拆分为多个表。分库分表有垂直拆分和水平拆分。垂直拆分一般是按照业务将表分到不同的库中&#xff08;此种不在本发的讨论范围&#xff09;。水平拆分是将表的数据拆分…...

算法实战(五):如何用学过的数据结构和算法实现一个短网址系统?

算法实战(五):如何用学过的数据结构和算法实现一个短网址系统? 在互联网时代,我们经常会遇到一些很长的网址,不仅不便于记忆,而且在一些场合下可能会受到长度限制。短网址系统就是为了解决这个问题而产生的。本文将介绍如何用学过的数据结构和算法实现一个短网址系统,…...

Python 环境搭建

Python 环境搭建 本章节我们将向大家介绍如何在本地搭建Python开发环境。 Python可应用于多平台包括 Linux 和 Mac OS X。 你可以通过终端窗口输入 “python” 命令来查看本地是否已经安装Python以及Python的安装版本。 Python下载 Python最新源码&#xff0c;二进制文档&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()&#xff0c;通过实例展示这些方法如何协同工作以解决复杂的字符串处理任务。我们将从基础概念出发&#xff0c;逐步构建到高级应用&#xff0c;包括字符串的遍历、搜索、读取…...

C#八股总结

重载和重写的区别 方法重载&#xff1a;在同一个类中定义多个同名但参数不同的方法。 方法重写&#xff1a;通过使用 virtual 和 override 关键字&#xff0c;实现基类和派生类之间的方法重写。 重载发生在同类中&#xff0c;重写发生在父子类中 重载方法名相同参数不同&#…...

iOS 中的 sqlite-shm 和 sqlite-wal 文件丢失

iOS 中的 sqlite-shm 和 sqlite-wal 文件丢失或损坏可能会导致 NSManagedObjectContext 的 performAndWait 方法抛出 NSInternalInconsistencyException 异常。这是因为这些文件在 SQLite 的 Write-Ahead Logging (WAL) 模式下起着关键作用&#xff0c;Core Data 依赖它们来确保…...

生物信息学逆向解析mRNA疫苗序列:从公开数据组装BNT-162b2与mRNA-1273的基因蓝图

1. 项目概述与背景解析 最近在生物信息学和疫苗研究领域&#xff0c;一个名为“NAalytics/Assemblies-of-putative-SARS-CoV2-spike-encoding-mRNA-sequences-for-vaccines-BNT-162b2-and-mRNA-1273”的项目引起了我的注意。这个项目标题看起来很长&#xff0c;但核心非常明确&…...

基于Readability算法的网页内容提取服务:从原理到工程实践

1. 项目概述&#xff1a;一个为现代阅读而生的开源工具 最近在折腾个人知识库和稍后读系统时&#xff0c;我一直在找一个能完美解决“网页内容净化与结构化”痛点的工具。市面上的方案要么太重&#xff0c;要么太简陋&#xff0c;直到我遇到了 Cat-tj/web-reader 。这不仅仅是…...

Docker容器化Emacs:构建可移植、一致的开发环境解决方案

1. 项目概述&#xff1a;为什么要在Docker里运行Emacs&#xff1f;如果你是一个Emacs的重度用户&#xff0c;或者是一个开发者&#xff0c;你很可能遇到过这样的困境&#xff1a;你精心配置的Emacs环境&#xff0c;在换了一台新电脑、升级了操作系统&#xff0c;或者需要在多台…...

AXI交叉开关IP核:SoC内部高并发数据传输的核心枢纽设计与实战

1. 项目概述&#xff1a;一个高效、可配置的片上总线交叉开关在复杂的数字系统设计&#xff0c;尤其是片上系统&#xff08;SoC&#xff09;领域&#xff0c;多个主设备&#xff08;如CPU、DMA控制器&#xff09;需要同时访问多个从设备&#xff08;如内存、外设控制器&#xf…...

Shell脚本加固实战:用shellguard提升脚本健壮性与安全性

1. 项目概述&#xff1a;一个为Shell脚本穿上“防弹衣”的守护者 在运维开发、自动化部署乃至日常的系统管理工作中&#xff0c;Shell脚本是我们最忠实、最高效的伙伴。从简单的日志清理到复杂的CI/CD流水线&#xff0c;Shell脚本无处不在。然而&#xff0c;脚本的安全性、健壮…...

别再让用户等上传!用@ffmpeg/ffmpeg在浏览器里直接压缩视频(附ThinkPHP项目实战)

浏览器端视频压缩实战&#xff1a;基于FFmpeg.wasm与ThinkPHP的高效集成方案 引言 在当今内容为王的互联网时代&#xff0c;视频已成为用户生成内容&#xff08;UGC&#xff09;的核心载体。然而&#xff0c;高清视频带来的大文件体积往往成为用户体验的瓶颈——上传等待时间长…...

Kubernetes上Jenkins全栈部署:动态Agent与生产环境调优指南

1. 项目概述&#xff1a;一个面向Kubernetes的Jenkins全栈部署方案在容器化和云原生技术成为主流的今天&#xff0c;如何高效、稳定地部署和管理持续集成/持续交付&#xff08;CI/CD&#xff09;流水线&#xff0c;是每个开发团队和运维工程师必须面对的课题。传统的单体Jenkin…...

ARM Debug Interface v5.1架构解析与调试实践

1. ARM Debug Interface v5.1架构深度解析1.1 调试接口技术演进与核心价值ARM调试接口(ADI)技术历经多次迭代&#xff0c;v5.1版本作为当前主流标准&#xff0c;在嵌入式系统调试领域确立了关键地位。调试接口本质上是处理器核与外部调试工具之间的标准化通信桥梁&#xff0c;其…...

本地可控 AI 助手搭建|Windows 一键安装 OpenClaw 操作指南

OpenClaw&#xff08;小龙虾&#xff09;Windows 一键部署保姆级教程&#xff5c;10 分钟搭建专属数字员工 前言 2026 年备受关注的开源 AI 智能体 OpenClaw&#xff08;昵称小龙虾&#xff09;&#xff0c;在 GitHub 收获大量关注&#xff0c;凭借本地运行、零代码操作、自动…...

Hermes Agent 连接 Taotoken 自定义供应商,完成环境变量配置

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Hermes Agent 连接 Taotoken 自定义供应商&#xff0c;完成环境变量配置 基础教程类&#xff0c;指导用户在使用 Hermes Agent 时&…...