Lucene研究之二——系統(tǒng)結(jié)構(gòu)分析初步 作者:陳光(holen@263.net) 時(shí)間:2004-08-26 本文主要討論Lucene的系統(tǒng)結(jié)構(gòu),希望對其結(jié)構(gòu)的初步分析,更深入的了解Lucene的運(yùn)作機(jī)制,從而實(shí)現(xiàn)對Lucene的功能擴(kuò)展。 1. Lucene的包結(jié)構(gòu) 如上圖所示,Lucene源碼中共包括7個(gè)子包,每個(gè)包完成特定的功能:
2. Lucene的主要邏輯圖 Lucene功能強(qiáng)大,但從根本上說,主要包括兩塊:一是文本內(nèi)容經(jīng)切詞后索引入庫;二是根據(jù)查詢條件返回結(jié)果。 以下是上述兩大功能的邏輯圖: STORAGE (存儲器) ACCESS INDEX (訪問索引) SERACHER (查詢器) ANALYZER (語言分析器) QUERY PARSER (查詢分析器) DOCUMENT (文檔結(jié)構(gòu)) SEARCHER (查詢) INDEXER (入庫) FS BDD RAM Lucene功能邏輯圖 查詢邏輯 按先后順序,查詢邏輯可分為如下幾步: 1. 查詢者輸入查詢條件 2. 查詢條件被傳達(dá)到查詢分析器中,分析器將將對“中國+北京-海淀區(qū)中關(guān)村”進(jìn)行分析,首先分析器解析字符串的連接符,即這里的加號和減號,然后對每個(gè)詞進(jìn)行切詞,一般最小的詞元是兩個(gè)漢字,則中國和北京兩個(gè)詞不必再切分,但對海淀區(qū)中關(guān)村需要切分,假設(shè)根據(jù)切詞算法,把該詞切分為“海淀區(qū)”和“中關(guān)村”兩部分,則最后得到的查詢條件可以表示為:“中國” AND “北京” AND NOT(“海淀區(qū)” AND “中關(guān)村”)。 3. 查詢器根據(jù)這個(gè)條件遍歷索引樹,得到查詢結(jié)果,并返回結(jié)果集,返回的結(jié)果集類似于JDBC中的ResultSet。 4. 將返回的結(jié)果集顯示在查詢結(jié)果頁面,當(dāng)點(diǎn)擊某一條內(nèi)容時(shí),可以鏈接到原始網(wǎng)頁,也可以打開全文檢索庫中存儲的網(wǎng)頁內(nèi)容。 這就是查詢的邏輯過程,需要說明的是,Lucene默認(rèn)只支持英文,為了便于說明問題,以上查詢過程采用中文舉例,事實(shí)上,當(dāng)Lucene被擴(kuò)充支持中文后就是這么一個(gè)查詢過程。 入庫邏輯 入庫將把內(nèi)容加載到全文檢索庫中,按順序,入庫邏輯包括如下過程: 1. 入庫者定義到庫中文檔的結(jié)構(gòu),比如需要把網(wǎng)站內(nèi)容加載到全文檢索庫,讓用戶通過“站內(nèi)檢索”搜索到相關(guān)的網(wǎng)頁內(nèi)容。入庫文檔結(jié)構(gòu)與關(guān)系型數(shù)據(jù)庫中的表結(jié)構(gòu)類似,每個(gè)入庫的文檔由多個(gè)字段構(gòu)成,假設(shè)這里需要入庫的網(wǎng)站內(nèi)容包括如下字段:文章標(biāo)題、作者、發(fā)布時(shí)間、原文鏈接、正文內(nèi)容(一般作為網(wǎng)頁快照)。 2. 包含N個(gè)字段的文檔(DOCUMENT)在真正入庫前需要經(jīng)過切詞(或分詞)索引,切詞的規(guī)則由語言分析器(ANALYZER)完成。 3. 切分后的“單詞”被注冊到索引樹上,供查詢時(shí)用,另外也需要也其它不需要索引的內(nèi)容入庫,所有這些是文件操作均由STORAGE完成。 以上就是記錄加載流程,索引樹是一種比較復(fù)雜的數(shù)據(jù)存儲結(jié)構(gòu),將在后續(xù)章節(jié)陸續(xù)介紹,這里就不贅述了,需要說明的一點(diǎn)是,Lucene的索引樹結(jié)構(gòu)非常優(yōu)秀,是Lucene的一大特色。 接下來將對Lucene的各個(gè)子包的結(jié)構(gòu)進(jìn)行討論。 3. 語言分析包org.apache.lucene.analysis Analyzer是一個(gè)抽象類,司職對文本內(nèi)容的切分詞規(guī)則。 切分后返回一個(gè)TokenStream,TokenStream中有一個(gè)非常重要方法next(),即取到下一個(gè)詞。簡單點(diǎn)說,通過切詞規(guī)則,把一篇文章從頭到尾分成一個(gè)個(gè)的詞,這就是org.apache.lucene.analysis的工作。 |
|