Bleve目錄結(jié)構(gòu)

bleve是一個全文搜索引擎,golang里對標(biāo)java的lucene,但是在結(jié)果封裝等方面又借鑒了Elasticsearch很多設(shè)計,不得不說,不背負(fù)歷史包袱更方便撥絲抽繭。

本章開始我們嘗試分析bleve的源碼,個人是不喜歡讀他人源碼的,1.思想受限。2.破壞自己的風(fēng)格。當(dāng)然最主要的是讀代碼比寫代碼難 -_-! . 如果你能很好很快的hold住一份復(fù)雜代碼,你的功底至少比作者高出1個level才實(shí)際。不過這不影響咱們讀代碼。懂不懂不重要,重要的是讀沒讀是吧哈哈。

廢話不多說了,直接上一個圖,然后嫖一下官網(wǎng)文檔,本章交差

image

上圖是bleve的目錄結(jié)構(gòu)。golang有著喪心病狂的包引用潔癖,所以go語言的程序分層相當(dāng)講究自上而下,這樣也很方便閱讀。

bleve

是top-level 的package,他的存在是更好的調(diào)用,包裝下層package。

Analysis

分析器的包,將文本打成term,這個我比較熟,這個包一般不會調(diào)用其他包里面的內(nèi)容,比較獨(dú)立.

Analyzers

analyzers 就是一個完整的分詞器,順路插一句,bleve的分詞器插件比起lucene相對簡單不少,一個analyzers里面一般有一個Tokenizer,用于詞語片段化,多個TokenFilter。用于過濾轉(zhuǎn)換。

ByteArrayConverters

故名思議,byte數(shù)組轉(zhuǎn)換,好吧我實(shí)話實(shí)說,寫這個文章的此時此刻,我還沒看過代碼這么細(xì)的地方。so我感覺不到這個玩意的存在。

DateTime Parsers

時間日期的解析

Language

這個包實(shí)現(xiàn)了多種語言的分析器,but沒有中文的,lucene里面包了一個smartcn的分詞器,話說中文分詞器依賴詞典模型,反而還是以插件的形式比較穩(wěn)妥。對于我來說一個standard一個keywords分詞器就可以隨便浪了,不在乎。

Token Filters

詞干抽取的過濾器,停用詞呀啥的。

CharFilters

字符過濾,沒什么好說的,寫轉(zhuǎn)換,全半角轉(zhuǎn)換,啥的。

Token Maps

不知何物,貌似從一個文件讀取一個詞或短語,還吃了bool表達(dá)式。

Tokenizers

分詞器,你如果自己寫分詞器主要是寫這里

Document

文檔包包含與bleve文檔和字段相關(guān)的代碼。一個文檔包含多個字段,一個字段包含多個term。這是bleve中的索引單元。

Index

index包是將索引數(shù)據(jù)寫入到磁盤的功能。方便search。

Store

存儲包,是一個文檔持久化的工具包,實(shí)現(xiàn)了kv接口,可以掛載多個kv數(shù)據(jù)庫。如leveldb rockdb啥的。

upside_down

upside_down包是倒排索引實(shí)現(xiàn)。它可以使用任何存儲實(shí)現(xiàn)。它包含關(guān)于如何編碼單個行的所有細(xì)節(jié)。

HTTP

一個簡易的api服務(wù),作者的意思是是可用可不用。json協(xié)議。

Registry

通過名稱提供一些注冊服務(wù),類似cache。比如分詞器等,應(yīng)該算是一種設(shè)計模式吧。這還有助于序列化索引映射并將它們與索引一起持久化。

Search

搜索包的代碼主要是實(shí)現(xiàn)搜索方法,這個包依賴index包的接口,然后就不依賴其他了。

Collectors

收集器包負(fù)責(zé)從所有結(jié)果中收集所需的結(jié)果并打分。用堆排序,選取topN,

Facets

負(fù)責(zé)從結(jié)果集中收集數(shù)據(jù),然后構(gòu)建

Highlight

高亮包,負(fù)責(zé)在返回結(jié)果中命中高亮文本。沒什么好說的

Scorers

Scorers 負(fù)責(zé)堆搜索結(jié)果打分,這個打分可能是中間結(jié)果,Collectors來調(diào)用,

Searchers

這個包里面包含了實(shí)際的搜索實(shí)現(xiàn)。后面爭取我們可以細(xì)致分析

Utils

這個包包含了所有的命令行實(shí)現(xiàn),在新版本里面是cmd包。

實(shí)際上你能發(fā)現(xiàn),目前包結(jié)構(gòu)和當(dāng)前這份文檔對不上了。打開時光機(jī)回到項(xiàng)目初生的時候看看

image

果然這老頭已變初心

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.Lucene簡介 Lucene是apache下的一個開源的全文檢索引擎工具包。 1.1.全文檢索(Full-t...
    唯死撐爾閱讀 604評論 0 0
  • 常用概念: 自然語言處理(NLP) 數(shù)據(jù)挖掘 推薦算法 用戶畫像 知識圖譜 信息檢索 文本分類 常用技術(shù): 詞級別...
    御風(fēng)之星閱讀 10,038評論 1 25
  • 一、什么是Lucene Lucene是apache下的一個開源的全文檢索引擎工具包。它為軟件開發(fā)人員提供一個簡單易...
    我可能是個假開發(fā)閱讀 10,460評論 2 15
  • 原文鏈接:http://www.chedong.com/tech/lucene.htmlLucene是一個基于Ja...
    流河閱讀 748評論 0 3
  • 目錄結(jié)構(gòu):1.全文檢索 2.Lucene入門3.Lucene進(jìn)階 全文檢索 一, 生活中的搜索:1.Win...
    CoderZS閱讀 1,808評論 0 12

友情鏈接更多精彩內(nèi)容