1. 程式人生 > >LuceneInAction(第2版)學習筆記——第一章 初識Lucene

LuceneInAction(第2版)學習筆記——第一章 初識Lucene


Lucene: 是一個搜尋類庫,而不是完整的程式


A. 索引元件

根據原始內容建立索引
Raw Content : Acquire Content    --> Build Document --> Analyze Document(*) --> Index Document(*) ==> Index(*)
原始內容    : 獲取內容(提取文字) --> 建立文件     --> 分析文件     --> 文件索引   ==> 索引

文件索引=向索引新增文件

***** 索引過程中的核心類
Document類:  一個Lucene文件可以包含多個域Field
Analyzer(*****)類: 分析器 分析文件,如果被索引內容不是純文字檔案,則需要先將其轉換為文字文件
  分析器是一個抽象類,Lucene提供了幾個類實現它
  分析器的分析物件是文件,該文件包含一些分離的能被索引的域
IndexWriter類: 索引寫入器,它負責建立新索引或開啟已有索引,以及向索引中新增、刪除、更新被索引文件的資訊
  IndexWrite 提供對索引檔案的寫入操作,但不能用於讀取或搜尋索引
Directory類: 索引檔案的儲存路徑


B. 搜尋元件

 在索引中搜索單詞,找到包含該單詞的文件
Search UI   : Build Query(*)  --> Run Query(*) --> Render Results(*)
使用者搜尋介面: 建立查詢       --> 執行查詢     --> 展現結果

*****搜尋過程中的核心類
IndexSearcher類: 搜尋器,用於搜尋由IndexWriter類建立的索引,可以將其看作一個以只讀方式開啟索引的類
  它需要利用Directory例項來掌控前期建立的索引,然後才能提供大量的搜尋方法
  搜尋器中有一些方法在它的抽象父類Searcher中實現
  最簡單的搜尋方法是將單個Query物件和int topN計數作為該方法的引數,並返回一個TopDocs物件
Term抽象父類: Term物件是搜尋功能的基本單元;與Field物件類似,Term物件包含一對字串元素,域名和單詞(或域文字值)
 Term物件還與索引操作有關。但Term物件是由Lucene內部建立的,在索引階段不需要了解它們。
 在搜尋過程中,可以建立Term物件,並和TermQuery物件一起使用。
 

Directory dir = FSDirectory.open(new File("/tmp/index"));
IndexSearcher searcher = new IndexSearcher(dir);
Query q = new TermQuery(new Term("content", "lucene"));//TermQuery物件是從抽象父類Query中派生而來
TopDocs hits  = searcher.search(q, 10);
searcher.close();

Query抽象父類:有很多查詢子類,TermQuery/BooleanQuery/PhraseQuery/PrefixQuery/PhrasePrefixQuery
  /TermRangeQuery/NumericRAngeQuery/FilteredQuery/SpanQuery

TermQuery類: 是Lucene提供的最基本的查詢型別,也是簡單查詢型別之一,它用來匹配指定域中包含特定項的文件
TopDocs類: 就一個簡單的指標容器,一般指向前N個排名的搜尋結果,搜尋結果即匹配查詢條件的文件


C. 其它模組


管理介面: Administration Interface
分析介面: Analytics Interface
搜尋範圍: Scaling 分散式索引和分散式查詢時,各節點的範圍


D. 附加元件


中文分片語件
中文短語查詢元件
分詞: 索引時對域進行分詞,搜尋時對關鍵字進行分詞,分詞後得到語彙單元。

總的來說,搜尋比索引更重要,因為索引檔案只被建立一次,卻要被搜尋多次。