OpenSearch簡介
OpenSearch 是一個(ge)社區驅動的開源搜(sou)索引(yin)擎(qing)和分析(xi)組件(jian),開發(fa)人員使用(yong)(yong)該套件(jian)來攝(she)取(qu)、搜(sou)索、可視(shi)化和分析(xi)數據(ju)(ju)。 OpenSearch 由數據(ju)(ju)存儲和搜(sou)索引(yin)擎(qing) (OpenSearch)、可視(shi)化和用(yong)(yong)戶界面 (OpenSearch Dashboards) 以(yi)及(ji)服(fu)務器(qi)端數據(ju)(ju)收(shou)集器(qi) (Data Prepper) 組成。 用(yong)(yong)戶可以(yi)使用(yong)(yong)一系列增強搜(sou)索、分析(xi)、可觀察(cha)性、安全性、機器(qi)學習等(deng)的插件(jian)來擴展 OpenSearch 的功能。
搜索引擎Search請求框架分析

我們將一次搜索引擎的Search請求進行拆解:
大多數(shu)情(qing)況下都是(shi)query then fetch,可以(yi)將(jiang)這個(ge)過程主(zhu)要分為3個(ge)主(zhu)要階段:
- 集群管理階段:獲取需要調用的分片相關信息。
- 倒排索引召回階段:在每個分片內,進行具體search操作----切詞、召回、匯總(順帶推薦)。
- 正排撈取階段:根據docid,在分片fetch操作—根據域撈取數據、篩選數據、排序等操作。
完成如上(shang)遍歷以(yi)后,搜索引擎(qing)將搜索結果以(yi)Json的形式返(fan)回給Client端(duan),其中(zhong)(zhong),OpenSearch可(ke)以(yi)認為僅僅是一個(ge)內部調度工具(ju)和管理平臺(tai),核心和底層就是Lucence,最(zui)基(ji)本的倒排、正排、單獨(du)倒排這些思想(xiang)全(quan)部抽象(xiang)在(zai)Lucence中(zhong)(zhong)。
OpenSearch插件開發
優勢&收益
OpenSearch支持(chi)了(le)插件開發的機(ji)制,在此(ci)機(ji)制下(xia),用戶可以在不修改OpenSearch源(yuan)碼的基礎(chu)上,通過編(bian)寫(xie)接(jie)口(kou)API的方式,為(wei)Opensearch增加(jia)諸多功(gong)能(neng),極大豐富了(le)OpenSearch的功(gong)能(neng)。這樣無侵入式的開發,既保(bao)留(liu)了(le)代碼的穩(wen)定性(xing)和健壯性(xing),也可以在高可用集群(qun)的基礎(chu)上,為(wei)解決(jue)定制化需求新(xin)增新(xin)的功(gong)能(neng)。
切入點
插件開發(fa)主(zhu)要從以下幾(ji)個API入手:
- ActionPlugin Restful API命令請求插件,擴展性實現最基礎的插件
- AnalysisPlugin 主要的跟分詞、過濾相關的插件,也是最為活躍的改動的插件,自定義切詞必須走這里
- ClusterPlugin 集群管理插件,自定義集群管理策略
- DiscoveryPlugin 結點發現插件
- IngestPlugin 數據接入插件
- MapperPlugin 映射相關的插件
- NetworkPlugin 網絡傳輸相關插件
- RepositoryPlugin 存儲、快照等相關插件
- ScriptPlugin 腳本插件,主推painless
- SearchPlugin 查詢插件,這是最主要的和search相關的插件,提供了教豐富也很復雜的功能
- ReloadablePlugin 重啟相關插件
插件原理簡介

1、插件(jian)的(de)(de)加載時機(ji)是在節點(dian)啟動創(chuang)建的(de)(de)時候中會掃描Opensearch的(de)(de)安裝目錄下的(de)(de)plugins和module的(de)(de)插件(jian)列表,并通(tong)過(guo)PluginService進行解析插件(jian)。
2、PluginFilter是用(yong)來識別(bie)plugin類(lei)別(bie)的一個(ge)方法,通過每個(ge)插件(jian)實現(xian)的接口(kou)將所有插件(jian)分類(lei)并分發給Opensearch不(bu)同的服務組件(jian)進行注冊。
3、在(zai)node不同(tong)的服(fu)務(wu)啟動(dong)過程(cheng)中(zhong)會讀取每個和(he)自己相關的組件進(jin)行擴展,最終插件都會形成服(fu)務(wu)提供(gong)給(gei)集群使用(比如SearchPlugin最終會在(zai)searchTransportService中(zhong)提供(gong)服(fu)務(wu))
以上就是OpenSearch搜(sou)索引擎的Search請(qing)求及基本插(cha)件開(kai)發的簡介,歡迎(ying)同學們指正