理解lucene系統結構的另乙個方式是去**其中資料流的走向,並以此摸清楚lucene系統內部的呼叫時序。
在此基礎上,我們能夠更加深入的理解lucene的系統結構組織,以方便以後在lucene系統上的開發工作。這部分的分析,是深入lucene系統的鑰匙,也是進行重寫的基礎。
我們來看看在lucene系統中的主要的資料流以及它們之間的關係圖
[img]
上圖很好的表明了lucene在內部的資料流組織情況,並且沿著資料流的方向我們也可以對與lucene內部的執行時序有乙個清楚的了解。
現在將圖中的涉及到的流的型別與各個邏輯對應系統的相關部分的關係說明一下。
圖中共存在4種資料流,分別是文字流、token流、位元組流與查詢語句物件流。文字流表示了對於索引目標和互動控制的抽象,即用文字流表示了將要索引的檔案,用文字流向使用者輸出資訊;在實際的實現中,lucene中的文字流採用了ucs-2作為編碼,以達到適應多種語言文字的處理的目的。
token流是lucene內部所使用的概念,是對傳統文字中的詞的概念的抽象,也是lucene在建立索引時直接處理的最小單位;簡單的講token就是乙個詞和所在域值的組合,後面在敘述檔案格式時也將繼續涉及到token,這裡不詳細展開。
位元組流則是對檔案抽象的直接操作的體現,通過固定長度的位元組(lucene定義為8位元位長,後面檔案格式將詳細敘述)流的處理,將檔案操作解脫出來,也做到了與平台檔案系統的無關性。
查詢語句物件流則是僅僅在查詢語句解析時用到的概念,它對查詢語句抽象,通過類的繼承結構反映查詢語句的結構,將之傳送到查詢邏輯來進行查詢的操作。
圖中的涉及到了多種邏輯,基本上直接對應於系統某一模組,但是也有跨模組呼叫的問題發生,這是因為lucene的重用程度非常好,因此很多實現直接呼叫了以前的工作成果,這在某種程度上其實是加強了模組耦合性,但是也是為了避免系統的過於龐大和不必要的重複設計的一種折衷體現。
詞法分析邏輯對應於org.apache.lucene.analysis部分。
查詢語句語法分析邏輯對應於org.apache.lucene.queryparser部分,並且呼叫了org.apache.lucene.analysis的**。查詢結束之後向評分排序邏輯輸出token流,繼而由評分排序邏輯處理之後給出文字流的結果,這一部分的實現也包含在了org.apache.lucene.search中。
索引構建邏輯對應於org.apache.lucene.index部分。
索引查詢邏輯則主要是org.apache.lucene.search,但是也大量的使用了org.apache.lucene.index部分的**和介面定義。儲存抽象對應於org.apache.lucene.store。
沒有提到的模組則是做為系統公共基礎設施存在。
lucene 資料流分析
資料流的分析
現在我就舉乙個資料流的分析 兩主機 a b 連在乙個傻瓜交換機上,同一網段,分析ping包的資料流向。主機a向主機b發ping包,首先,主機a將目標ip位址和自己子網掩碼進行 與 運算,判斷目標是否跟自己在同一網段 不同網段資料交給閘道器處理 接著會查arp表是否有目標主機的mac位址。此時,主機a...
資料流分析之Liveness Analysis
目錄 1 什麼是liveness?2 什麼是liveness analysis?3 liveness analysis有何用處?4 如何實現liveness analysis?資訊在通過指令時的傳播規則 資訊在匯聚時的傳播規則 資訊傳播規則的形式化表述 基於資訊傳播規則,求解活躍變數集合 我們說,變...
TCP互動資料流 成塊資料流
tcp資料流分類 基於tcp的各類解決方案,可以根據資料吞吐量來大致分成兩大類 1 互動資料型別,例如telnet,ssh,這種型別的協議在大多數情況下只是做小流量的資料交換,比如說按一下鍵盤,回顯一些文字等等。2 資料成塊型別,例如ftp,這種型別的協議要求tcp能盡量的運載資料,把資料的吞吐量做...