lucene學習筆記 1

2021-08-29 09:24:39 字數 1609 閱讀 8196

doug cutting 於2023年開始的專案 2023年9月後加入apache, lucene是doug cutting的middle name 。 目前lucene已經是apache的top level的專案, 已經不在jakarta下面, 同時也有了python,perl,c++,.net, ruby(進行中)多個版本

indexing主要使用的類

indexwriter

較核心的類,index檔案由它建立

directory

乙個抽象的標示index檔案位址的類,有兩個實現:fsdirectory和ramdirectory, 前者是基於檔案系統,後者使用記憶體

analyzer

檔案的分析器(聽起來彆扭,還是叫analyzer好了)的抽象,這個類用來處理分詞(對中文尤其重要,轉換大小寫(computer->computer,實現查詢大小寫無關),轉換詞根(computers->computer),消除stop words等,還負責把其他格式文件轉換為純文字等

document

乙個document對應乙個文件記錄,他有很多field,用來處理不同的資訊,和檢索相關

field

有4(5?)種型別的field, 下面專門列出

stop words: 出現頻率非常高的一些詞彙,它們一般沒有檢索的意義, 比如英文中的(as a, an, the, in)

型別analyzed

indexed

stored

說明field.keyword(string,string/date)yy

這個field用來儲存會直接用來檢索的比如(身份證號,姓名,日期等)

field.unindexed(string,string)

y不會用來檢索的資訊,但是檢索後需要顯示的,比如,硬體序列號,文件的url位址

field.unstored(string,string)yy

大段文字內容,會用來檢索,但是檢索後不需要從index中取內容,可以根據url去load真實的內容

field.text(string,string)yy

y檢索,獲取都需要的內容,直接放index中,不過這樣會增大index

field.text(string,reader)yy

如果是乙個reader, lucene猜測內容比較多,會採用unstored的策略.

searching主要使用的類

indexsearcher

以唯讀的方式訪問index(注意indexreader不是唯讀的),需要傳給他乙個query物件來搜尋

term

term是乙個搜尋的基本單位,包含乙個field(目標)和乙個value(條件),可以直接用new term("field","condition value")構造

query

query有很多子類,比如booleanquery,phrasequery等,可以在term基礎上加上邏輯(是 否, 或)

termquery

乙個很基本的query, 可以由term構造 new termquery(term);

hits

包含了搜尋的結構,預設按照相關度排序,hits並不會把所有記錄(可能很大)直接儲存,而是有乙個lazy loading機制

tips

lucene學習筆記 1

indexing主要使用的類 indexwriter 較核心的類,index檔案由它建立 directory 乙個抽象的標示index檔案位址的類,有兩個實現 fsdirectory和ramdirectory,前者是基於檔案系統,後者使用記憶體 analyzer 檔案的分析器 聽起來彆扭,還是叫an...

Lucene 學習筆記 1

今天開始研究lucene,有關lucene的簡單介紹我就不做介紹了,直接google一下就了解了,我根據的是 lucene in action 這本書來學習的。學習還在進行,把學習過程中的一些經驗和體會寫出來供和我一樣的新手參考。1 這本書對應的lucene版本。我一開始用最新的lucene 2.4...

Lucene學習筆記 1

lucene學習筆記 可以搜尋文字檔案,理論上可以搜尋任何型別的資料。只要先把資料轉化為文字,就可以對資料進行索引和搜尋。使用了反向索引的機制,維護乙個詞 短語的表,對於每個詞和短語都有乙個鍊錶描述有哪些文件包含這個詞和短語。這樣使用者輸入查詢條件的時候,搜尋引擎先對輸入的條件分詞,分成詞和短語,然...