前面幾篇筆者已經把Lucene的最基本的入門,介紹完了,本篇就對Lucene基本的知識作一個總結,以便於加深對Lucene基本API組件的理解。
爲了方便對比學習,下面給出表格數據
數據庫
索引期間使用的API組件 |
檢索期間使用的API組件 |
IndexWriter |
IndexReader |
IndexWriterConfig |
IndexSearcher |
Directory |
Directory |
Analyzer |
QueryParser或者Query子類 |
Document |
TopDocs |
Field |
ScoreDoc--Term |
下面筆者就對上圖組件一一剖析下首頁要介紹的就索引期間的各個類 1,IndexWriter是索引過程當中的核心類,主要負責建立索引或者打開已有索引,提供對索引的 添加,刪除,修改等操做 2,IndexWriterConfig這個API在低版本的Lucene中是沒有此配置類的,這個類也比較重要,使用此類則須要在其構造方法中傳入2個參數,第一個參數是Lucene當前的版本號,第二個是索引是使用的分詞器,除了這個咱們最經常使用的功能,裏面還提供了大量工具方法,例如,設置內存裏緩衝大小,設置文檔數據批量提交時大小,獲取線程狀態,設置建立模式,以及是否開啓複合索引的等等一系列,能夠對索引作一些基本的配置優化等信息。 3,Directory這個類表明了Lucene索引的存放位置,是一個抽象類,它有一系列子類能夠用來處理索引,使用不一樣的子類對於系統的性能,影響會很大,但歸其本質上,提高性能,無非就拿空間換時間或拿時間或空間2中狀況,在具體使用時,咱們能夠使用其子類來獲取索引所在的存儲路徑,而後將其傳給IndexWriter類構造方法裏。 4,Analyzer這個類也是全部分析器的基類,文本文件在索引前,須要通過分析器處理,處理成對應的語彙單元,統一格式,它能提取有效的信息,過濾掉一些禁用詞,Lucene自帶有幾個分析器,但大部分都是對英文或歐洲語言處理的,若是想要使用中文的分詞器,能夠使用其自帶的SmartCN分詞器,也能夠用開源的IK,messeg4j等等,選擇什麼樣的分析器是索引過程當中很重要的一步,這個關鍵還得看本身的業務需求定。 5,Document表明一個文檔的意思,相似於數據庫的一行記錄,咱們能夠向文檔中,添加本身想要的域字段,而後在把一個個文檔索引發來,提供檢索。 6,Field就是文檔中存儲的域,每個域都有一個域名和域值,這就相似數據庫的字段名跟值同樣,咱們能夠使用Field來精確控制各個域的值,最經常使用的有2個Field,一個是不提供分詞的StringField和另一個分詞的TextFiled,固然還有其餘的一些Field,在這裏就很少介紹了。 7,IndexReader這個類用來獲取Directory的子類打開的索引文件流,而後在將進IndexSearcher的構造方法裏,進行查詢組件的初始化操做,這個類再低版本的的Lucene裏也是不存在的,在後來新的版本里才添加的類。 8,IndexSearcher這個類是程序搜索期間的核心類,是鏈接索引的橋樑,它是以只讀的方式打開索引,提供了大量檢索,排序,過濾的等等以及其餘的一些功能。 9,QueryParser或Query均可以完成一些檢索功能,不一樣的是QueryParser提供的功能更爲強大,方便自定義開發一些檢索方案,而Query及其麾下的一系列子類是Lucene中自帶的一些API,使用這些API,大部分狀況下均可以完成一些基本的檢索,若是須要定製化本身的檢索方案則須要使用QueryParser,大多數狀況下,咱們最常使用的是Query下面的TermQuery子類,固然還有其餘大量的特定功能的Query子類存在。 10,TopDocs這個類是一個簡單的容器指針,它通常會記錄前N個檢索的結果,在TopDocs中,它只會存儲這個文檔的docid以及獲取的得分狀況,另外這前N個結果,默認的排序方式,是按照得分的大小排列的。 11,ScoreDoc類一般咱們使用的是一個數組,它裏面也只會包含這個文檔的docid以及獲取的得分狀況,與TopDocs不一樣的是,咱們能夠使用這個類,來進行相似數據庫的分頁操做,固然你得保證你有足夠的內存,若是是海量數據的分頁,這個操做很容易形成內存溢出,這時候咱們就須要考慮其餘方法了。 12,Term類是搜索功能最基本的單元,與Field相似,檢索的時候須要傳入域名及檢索的字符串,是一個小而不可或缺的精簡類。 至此,筆者已經對Lucene的基本的經常使用的幾個類簡單的剖析了一下,可能大多數狀況下,咱們知道他們怎麼用,可是就是不太瞭解他們的基本概念。筆者以爲,若是真正的理解了這些東西,就能夠在開發中或給同事的一些交流中帶來極大的方便。