前面幾篇筆者已經把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建立索引和索引的基本檢索
author 百知教育 gaozhy 注 演示 所使用jar包版本為 lucene 5.2.0.jar lucene索引操作建立索引 try catch exception e 索引日期 document.add new field date datetools.datetostring new d...
lucene針對分頁文字的檢索和檢索結果定位問題
首先,索引一些文件的全文,在搜尋 電腦科學 時,首先,根據檢索詞可以找到命中的所有文件,有沒有辦法獲取到對某個命中的文件中所有的檢索關鍵字的上下文資訊?就像在word中進行搜尋時,會在目錄中高亮顯示在那些節有檢索詞,並返回共有多少個匹配項。就是需要先定位到文件,然後還要定位到文件中的位置資訊。用lu...
關於lucene斷點續索引和增量索引的問題zz
2 如何在我給乙個目錄裡新增乙個檔案的時候自動把這個檔案用lucene索引起來,就是所謂的增量索引,難道用個timer掃瞄目錄變化或者用filewatch來監視這個目錄,然後對其索引嗎?可是這樣的話必須做個windows服務了,要不這個軟體關閉的話就不能相應目錄裡檔案的變化了。3 如果乙個檔案修改或...