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. 附加元件
中文分片語件
中文短語查詢元件
分詞: 索引時對域進行分詞,搜尋時對關鍵字進行分詞,分詞後得到語彙單元。
總的來說,搜尋比索引更重要,因為索引檔案只被建立一次,卻要被搜尋多次。