OpenSearch简介
OpenSearch 是一个社区驱动的开源搜索引擎和分析组件,开发人员使用该套件来摄取、搜索、可视化和分析数据。 OpenSearch 由数据存储和搜索引擎 (OpenSearch)、可视化和用户界面 (OpenSearch Dashboards) 以及服务器端数据收集器 (Data Prepper) 组成。 用户可以使用一系列增强搜索、分析、可观察性、安全性、机器学习等的插件来扩展 OpenSearch 的功能。
搜索引擎Search请求框架分析
我们将一次搜索引擎的Search请求进行拆解:
大多数情况下都是query then fetch,可以将这个过程主要分为3个主要阶段:
- 集群管理阶段:获取需要调用的分片相关信息。
- 倒排索引召回阶段:在每个分片内,进行具体search操作----切词、召回、汇总(顺带推荐)。
- 正排捞取阶段:根据docid,在分片fetch操作—根据域捞取数据、筛选数据、排序等操作。
完成如上遍历以后,搜索引擎将搜索结果以Json的形式返回给Client端,其中,OpenSearch可以认为仅仅是一个内部调度工具和管理平台,核心和底层就是Lucence,最基本的倒排、正排、单独倒排这些思想全部抽象在Lucence中。
OpenSearch插件开发
优势&收益
OpenSearch支持了插件开发的机制,在此机制下,用户可以在不修改OpenSearch源码的基础上,通过编写接口API的方式,为Opensearch增加诸多功能,极大丰富了OpenSearch的功能。这样无侵入式的开发,既保留了代码的稳定性和健壮性,也可以在高可用集群的基础上,为解决定制化需求新增新的功能。
切入点
插件开发主要从以下几个API入手:
- ActionPlugin Restful API命令请求插件,扩展性实现最基础的插件
- AnalysisPlugin 主要的跟分词、过滤相关的插件,也是最为活跃的改动的插件,自定义切词必须走这里
- ClusterPlugin 集群管理插件,自定义集群管理策略
- DiscoveryPlugin 结点发现插件
- IngestPlugin 数据接入插件
- MapperPlugin 映射相关的插件
- NetworkPlugin 网络传输相关插件
- RepositoryPlugin 存储、快照等相关插件
- ScriptPlugin 脚本插件,主推painless
- SearchPlugin 查询插件,这是最主要的和search相关的插件,提供了教丰富也很复杂的功能
- ReloadablePlugin 重启相关插件
插件原理简介
1、插件的加载时机是在节点启动创建的时候中会扫描Opensearch的安装目录下的plugins和module的插件列表,并通过PluginService进行解析插件。
2、PluginFilter是用来识别plugin类别的一个方法,通过每个插件实现的接口将所有插件分类并分发给Opensearch不同的服务组件进行注册。
3、在node不同的服务启动过程中会读取每个和自己相关的组件进行扩展,最终插件都会形成服务提供给集群使用(比如SearchPlugin最终会在searchTransportService中提供服务)
以上就是OpenSearch搜索引擎的Search请求及基本插件开发的简介,欢迎同学们指正