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

news/2024/12/21 22:42:15/

简介

   此前的专栏介绍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,目前没有使用,本次升级未有涉及

后续详细介绍每个部分


http://www.ppmy.cn/news/1528257.html

相关文章

【编程底层原理】亿级数据表查询最后10条记录limit 99999990,10性能为啥特慢,而且数据库都被查宕机了

一、影响因素 查询一个包含1亿条数据的表,并使用 LIMIT 99999990, 10 来获取最后的10条记录,性能慢的原因主要是因为 LIMIT 子句的偏移量(offset)非常大。以下是一些导致性能问题的关键因素 大量跳过 - LIMIT 子句的前一个数字&…

使用Mockito进行单元测试

1、单元测试介绍 Mockito和Junit是用于单元测试的常用框架。单元测试即:从最小的可测试单元(如函数、方法或类)开始,确保每个单元都能按预期工作。单元测试是白盒测试的核心部分,它有助于发现单元内部的错误。 单元测试…

半导体器件制造5G智能工厂数字孪生物联平台,推进制造业数字化转型

半导体器件制造行业作为高科技领域的核心驱动力,正积极探索和实践以5G智能工厂数字孪生平台为核心的新型制造模式。这一创新不仅极大地提升了生产效率与质量,更为制造业的未来发展绘制了一幅智能化、网络化的宏伟蓝图。 在半导体器件制造5G智能工厂中&a…

Maven笔记(一):基础使用【记录】

Maven笔记(一)-基础使用 Maven是专门用于管理和构建Java项目的工具,它的主要功能有: 提供了一套标准化的项目结构 Maven提供了一套标准化的项目结构,所有IDE(eclipse、myeclipse、IntelliJ IDEA 等 项目开发工具) 使…

mat (Eclipse Memory Analyzer Tool)使用以及详解

前言 在Java开发中,内存问题往往不易被发现,但它们可能导致应用性能下降甚至崩溃。Eclipse Memory Analyzer Tool(MAT)是一个强大的开源工具,专门用于分析Java堆转储(heap dumps)文件&#xff…

小程序服务零工市场

零工市场小程序有着信息发布、岗位匹配、线上接单、零工人员保障险参保、技能培训、费用结算、完工确认、服务评价、纠纷调解等功能,为求职者和雇主搭建一座高效、便捷、精准的对接桥梁。 用工单位通过小程序的“雇主找人”,发布招聘信息,找到…

拓扑排序专题篇

目录 前言 课程表 课程表II 课程表IV 火星词典 前言 拓扑排序是指对一个有向无环图的节点进行排序之后得到的序列,如果存在一条从节点A指向节点B的边,那么在拓扑排序的序列中节点A出现在节点B的前面。一个有向无环图可以有一个或多个拓扑排序序列&a…

JWT跨域认证

Session认证 用户认证的流程: 用户向服务器发送用户名和密码。 服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等。 服务器向用户返回一个session_id,写入用户的Cookie。 用户随后的每一次请求,…