Lucene學習筆記 1

2021-09-21 16:09:33 字數 1985 閱讀 7262

lucene學習筆記

可以搜尋文字檔案,理論上可以搜尋任何型別的資料。只要先把資料轉化為文字,就可以對資料進行索引和搜尋。

使用了反向索引的機制,維護乙個詞/短語的表,對於每個詞和短語都有乙個鍊錶描述有哪些文件包含這個詞和短語。這樣使用者輸入查詢條件的時候,搜尋引擎先對輸入的條件分詞,分成詞和短語,然後到建立好的索引上面查詢,最終返回索引相關的文件。

1、首先對文件進行分詞。

2、然後將分詞的結果進行索引的建立。

結構化資料:資料庫資料,元資料

半結構化資料:xml、html

非結構化資料:全文資料,word文件,email

全文檢索:新建立索引,在進行搜尋。

建立索引

1、準備文件

2、將文件傳給分詞元件tokenizer

a) 將文件分成乙個個的單詞

b) 去除標點

c) 利用停詞集合,去除停詞(最普通的詞,沒有任何意義,英文中的the,a,this等等)

d) 得到詞元token

3、將詞元token傳給語言處理元件linguistic processor

a) 變為小寫

b) 將單詞縮減為詞根形式,如cars到car,drove到drive,前者是縮減,後者是轉變。前者給予某種演算法,例如去除s,去除ing新增e等等,後者基於字典做轉變就可以了。這兩種方法不是互斥的,有交集,有的詞彙用兩種方法都可以縮減。

c) 語音處理的詞稱為詞term

d) 只有這樣處理,搜尋drove和drive才能都命中。

4、將得到的詞term傳給索引元件idnexer去建立文件倒排列表

a) 利用得到的詞term建立乙個字典

b) 例如

term document id

student 1

allow 1

go 1

my 2

friend 2

allow 2

c) 對字典按照字母順序排序

term document id

allow 1

allow 2

friend 2

go 1

my 2

student 1

d) 合併相同的詞trem,形成文件倒排列表posting list

e) document frequency文件頻次,表示有多少個文件包含當前詞。

f) frequency詞頻次,表示乙個文件中有多少個當前詞。

搜尋1、使用者輸入查詢語句。例如使用者輸入:lucene and learned not hadoop,表明使用者想要找包含lucene和learned而不包含hadoop的文件。

2、對查詢語句進行語法分析,詞法分析,幾語言處理

a) 識別單詞和關鍵字,lucene和learned是單詞,and和not是關鍵字

b) 形成語法樹

c) 語言處理,同建立索引過程中的語言處理相同,如learned變成learn,形成經過語言處理的語法樹

3、搜尋索引

a) 在反向索引表中找到lucene、learn和hadoop的文件鍊錶

b) 其次對lucene和learn的文件鍊錶進行合併

c) 在合併的鍊錶中去除包含hadoop的文件鍊錶

d) 剩下的就是我們要找的文件鍊錶

4、根據得到的文件和查詢語句的相關性,對結果進行排序

a) 如何判斷文件的之間的關係

b) 首先乙個文件有很多詞,

c) 對於文件之間的關係,不同的term的重要性不同。要判斷文件的關係,首先要找出那些term對於文件是重要的。找出詞term對於文件的重要性的過程稱為計算詞的權重term weight的過程。權重term weight的引數有兩個,第乙個是詞term,第二個是文件document

d) 影響乙個詞term在文件中的重要性有兩個因素:

e) term frequency(tf):乙個詞在文件**現的次數,越多說明越重要。

f) document frequency(df):有多少文件包含乙個詞term,越多說明越不重要。

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

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