原创 拆解Cluene系列(6)——Analyzer的職責鏈模式
職責鏈模式(Chain of Responsibility):使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關係。將這些對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象處理它爲止。 關於職責鏈模式,可以參考博文:
原创 拆解Clucene 系列(2)——Clucene的幾個專業術語
analyzer Analyzer是分析器,它的作用是把一個字符串按某種規則劃分成一個個詞語,並去除其中的無效詞語,這裏說的無效詞語是指英文中的“of”、 “the”,中文中的“的”、“地”等詞語,這些詞語在文章中大量出現,但
原创 拆解Clucene系列(3)——Clucene的代碼組織結構
CLucene的代碼組織還是比較清晰的,本文以CLucene1.0爲例,主要分爲以下幾個部分: analysis 模塊主要負責詞法分析及語言處理,從而生成Term。也包括各種分析器 config 各種編譯配置選項,以及一些與OS
原创 拆解Cluene系列(10)——詳解索引的合併(一)
前一篇博文提到索引的合併,在SegmentMerger.merge()中,主要包含以下幾部分: 合併域:mergeFields() 合併詞典和倒排表:mergeTerms(); 合併標準化因子:mergeNorms();
原创 職業生涯瓶頸期
職業生涯瓶頸期之我的經歷 Contents 引言瓶頸期的狀態我是怎樣察覺到自己處在瓶頸期的?我在瓶頸期的狀態如何?如何渡過瓶頸期什麼是我的瓶頸?如何解決這些瓶頸?掌握計算的本質掌握目前主要的硬通貨我目前的狀態我在哪些方面提高
原创 拆解Cluene系列(4)——store中的類圖
store 中主要含有FSDirectory,RAMDirectory,InputStream,OutputStream,其UML類圖關係如下:
原创 拆解Cluene系列(8)——建立索引的流程
Cluene在建立索引時,主要經歷以下幾個步驟: 利用Analyzer對content進行處理,構成一個個token.根據token,構建倒排索引,將索引寫到文件(一個索引包含多個不同類型的文件)。如果有可能,將多個較小的索引文件合併成一
原创 TCP建立與斷開連接那些事兒
1. TCP建立連接: 三次握手,需要注意的是ACK確認序列號是SYN攜帶序列號+1,不是直接相等。基本過程如圖所示。 客戶端: socket程序中調用connect將激發三路握手過程,connect將在成功建
原创 makefile模板
總結個人常用makefile模板,以備後用。 1、編譯動態庫 ############################################################# # Makefile for shared lib
原创 利用模板巧妙實現二級接口
在面向接口的編程中,如果只有一級接口,那調用和實現都比較簡單,但是如果存在二級接口,比如下面的例子:class IBase { public: virtual void func1(int a) = 0; virtual void f
原创 拆解Cluene系列(5)——Analyzers中的類圖
Analyzers的UML 類圖關係如下,這裏用到了職責鏈模式。這 StandardAnalyzer的類圖關係如下: 點贊 收藏 分享 文章舉報 聰明的狐狸 發佈了105 篇
原创 拆解Cluene系列(9)——建立索引用到的類關係
CLuene在構建索引時用到了許多類,主要的類有IndexWriter,DocumentWriter,Document,SegmentMerger,IndexReader等,他們之間的關係如下圖: SegmentMerger用來合併索引
原创 bash: 09: value too great for base (error token is 09)
前幾天在寫一個腳本, 每隔三天程序更新一下數據,然後重啓一下進程。 day =$(date +%d) ret=$(($day %3)) if [
原创 拆解Clucene 系列(1)---Clucene的特點和難點
最近,我在閱讀和學習Clucene的源代碼,在此記錄學習和使用心得。網上也有一些分析教程。但幾乎都是大同小異。 搜索是本身是一個偏重於算法和流程的東西。我感覺使用面向過程的編程模式反而更好理解一些,但Clucence使用C++的特性,高
原创 拆解Cluene系列(7)——Cluene用到的虛繼承
Cluene用到虛繼承的地方有兩個類,其類圖關係如下: 點贊 收藏 分享 文章舉報 聰明的狐狸 發佈了105 篇原創文章 · 獲贊 35 · 訪問量 23萬+