Lucene-整體架構(day01)

Lucene總的來講是:java

  • 一個高效的,可擴展的,全文檢索庫。
  • 所有用Java實現,無須配置。
  • 僅支持純文本文件的索引(Indexing)和搜索(Search)。
  • 不負責由其餘格式的文件抽取純文本文件,或從網絡中抓取文件的過程。

在Lucene in action中,Lucene 的構架和過程以下圖,網絡

image

說明Lucene是有索引和搜索的兩個過程,包含索引建立,索引,搜索三個要點。函數

讓咱們更細一些看Lucene的各組件:.net

lucene  zong ti jia gou

  • 被索引的文檔用Document對象表示。
  • IndexWriter經過函數addDocument將文檔添加到索引中,實現建立索引的過程。
  • Lucene的索引是應用反向索引。
  • 當用戶有請求時,Query表明用戶的查詢語句。
  • IndexSearcher經過函數search搜索Lucene Index
  • IndexSearcher計算term weight和score而且將結果返回給用戶。
  • 返回給用戶的文檔集合用TopDocsCollector表示。

 

那麼如何應用這些組件呢?開放源代碼

讓咱們再詳細到對Lucene API 的調用實現索引和搜索過程。3d

using lucene

  • 索引過程以下:
    • 建立一個IndexWriter用來寫索引文件,它有幾個參數,INDEX_DIR就是索引文件所存放的位置,Analyzer即是用來對文檔進行詞法分析和語言處理的。
    • 建立一個Document表明咱們要索引的文檔。
    • 將不一樣的Field加入到文檔中。咱們知道,一篇文檔有多種信息,如題目,做者,修改時間,內容等。不一樣類型的信息用不一樣的Field來表示,在本例子中,一共有兩類信息進行了索引,一個是文件路徑,一個是文件內容。其中FileReader的SRC_FILE就表示要索引的源文件。
    • IndexWriter調用函數addDocument將索引寫到索引文件夾中。
  • 搜索過程以下:
    • IndexReader將磁盤上的索引信息讀入到內存,INDEX_DIR就是索引文件存放的位置。
    • 建立IndexSearcher準備進行搜索。
    • 建立Analyer用來對查詢語句進行詞法分析和語言處理。
    • 建立QueryParser用來對查詢語句進行語法分析。
    • QueryParser調用parser進行語法分析,造成查詢語法樹,放到Query中。
    • IndexSearcher調用search對查詢語法樹Query進行搜索,獲得結果TopScoreDocCollector

以上即是Lucene API函數的簡單調用。htm

然而當進入Lucene的源代碼後,發現Lucene有不少包,關係錯綜複雜。對象

然而經過下圖,咱們不難發現,Lucene的各源碼模塊,都是對普通索引和搜索過程的一種實現。blog

此圖是上一節介紹的全文檢索的流程對應的Lucene實現的包結構。(參照http://www.lucene.com.cn/about.htm中文章《開放源代碼的全文檢索引擎Lucene》)索引

clip_image008

  • Lucene的analysis模塊主要負責詞法分析及語言處理而造成Term
  • Lucene的index模塊主要負責索引的建立,裏面有IndexWriter
  • Lucene的store模塊主要負責索引的讀寫。
  • Lucene的QueryParser主要負責語法分析。
  • Lucene的search模塊主要負責對索引的搜索。
  • Lucene的similarity模塊主要負責對相關性打分的實現。

瞭解了Lucene的整個結構,咱們即可以開始Lucene的源碼之旅了。

 

另:

CSDN此文章連接爲:http://blog.csdn.net/forfuture1978/archive/2009/10/30/4745802.aspx

Javaeye此文章連接爲:http://forfuture1978.javaeye.com/blog/546808 

 

http://www.cnblogs.com/forfuture1978/

相關文章
相關標籤/搜索