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