Lucene基本API元件的理解

2021-09-02 04:27:50 字數 2338 閱讀 6960

本篇**

前面幾篇筆者已經把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的基本的常用的幾個類簡單的剖析了一下,可能大多數情況下,我們知道他們怎麼用,但是就是不太了解他們的基本概念。筆者覺得,如果真正的理解了這些東西,就可以在開發中或給同事的一些交流中帶來極大的方便。

lucene的主要搜尋API

類 用途indexseacher 搜尋操作的入口,所有搜尋操作都是通過indexseacher例項使用乙個過載的search方法來實現 query 及其子類 具體的query子類為每一種特定型別的查詢進行邏輯上的封裝。query例項被傳遞到indexsearcher的search方法中 queryp...

lucene的主要搜尋API

類 用途indexseacher 搜尋操作的入口,所有搜尋操作都是通過indexseacher例項使用乙個過載的search方法來實現 query 及其子類 具體的query子類為每一種特定型別的查詢進行邏輯上的封裝。query例項被傳遞到indexsearcher的search方法中 queryp...

Android SDK,ADT,以及API的理解

一.android adt 按照官方 的開發介紹 中文的意思,大概是adt為了在eclipse這個大的 ide整合環境中構建android應用程式而安裝的乙個外掛程式。二.android sdk sdk software development kit 軟體開發工具包。一般是一些被軟體工程師用於為特...