1. 程式人生 > >【搜尋那些事】細談lucene(二)lucene搜尋程式元件詳解

【搜尋那些事】細談lucene(二)lucene搜尋程式元件詳解

 

      對於類似lucene這樣的搜尋程式來說,首先了解其整個元件結構是非常有必要的,現在整體主觀上對它有一個簡單瞭解,然後逐一擊破學習。初學者很多人都以為lucene是一個完成的搜尋程式,其實這種理解是錯誤的。它其實僅僅是搜尋程式的核心索引和搜尋模組的一部分。剛才我們說過Lucene是有索引和搜尋的兩個過程,包含索引建立、索引、搜尋三個要點。讓我們更細一些看Lucene的各元件的構成和工作流程:

 

 

                                    

 

 

下面我們就簡單來看一下lucene中兩個最重要的組成部分

 

一:索引元件

 

        使用索引可快速訪問資料中的特定資訊。索引是對資料記錄中一列或多列的值進行排序的一種結構,索引是一個單獨的、物理的資料結構,它是某個記錄中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。會幫助您更快地獲得該資訊。大家想象一下,如果沒有索引的話,我們查詢某個檔案的記錄,最簡單想到的方式就是一條一條記錄的順序查詢,如果資料量比較小的話還沒什麼,如果資料量達到上百萬,上千萬的話,大家可以想象一下這個搜尋時間。在lucene

中使用索引就要必須建立對文字檔案的索引,將文字內容轉換成能快速進行搜尋的檔案格式。從而消除由於慢速順序掃描帶來的效率低的影響。大家可以把索引想象成一種資料結構,它可以提供一種對文字檔案內容隨機訪問的機制。下面我們就來看一下整個索引的步驟

 

1.獲取內容

      Lucene本身沒有提供獲取內容的工具或者元件,內容是要開發者自己提供相應的程式。這一步包括使用網路爬蟲或蜘蛛程式來搜尋和界定需要索引的內容。當然,資料來源可能包括資料庫、分散式檔案系統、本地xml等等。lucene作為一款核心搜尋庫,不提供任何功能來實現內容獲取。目前有大量的開源爬蟲軟體可以實現這個功能,例如:

Solrlucene的子項;Nutchapache專案,包含大規模的爬蟲工具,抓取和分辨web站點資料;Grub,比較流行的開源web爬蟲工具;Heritrix,一款開源的Internet文件搜尋程式;Aperture,支援從web站點、檔案系統和郵箱中抓取,並解析和索引其中的文字資料。

獲取到內容之後,下一步我們來看一下如何根據獲取到的內容來建立相應的小資料塊,也成為文件。

 

2.建立文件

 

       獲取原始內容後,需要對這些內容進行索引,必須將這些內容轉換成部件(文件)。文件主要包括幾個帶值的域,比如標題,正文,摘要,作者和連結。如果文件和域比較重要的話,還可以新增權值。設計完方案後,需要將原始內容中的文字提取出來寫入各個文件,這一步可以使用文件過濾器,開源專案如Tika,實現很好的文件過濾。如果要獲取的原始內容儲存於資料庫中,有一些專案通過無縫連結內容獲取步驟和文件建立步驟就能輕易地對資料庫表進行航所以操作和搜尋操作,例如DBSightHibernate SearchLuSQLCompassOracle/Lucene整合專案。

 

3文件分析

 

        搜尋引擎不能直接對文字進行索引:必須將文字分割成一系列被稱為語彙單元的獨立的原子元素。每一個語彙單元能大致與語言中的單詞對應起來,這個步驟決定文件中的文字域如何分割成語彙單元系列。lucene提供了大量內嵌的分析器可以輕鬆控制這步操作。

 

4文件索引

 

      將文件加入到索引列表中。Lucene在這一步驟中提供了強檔的API,只需簡單呼叫提供的幾個方法就可以實現出文件索引的建立。

 

      為了提供好的使用者體驗,索引是必須要處理好的一環:在設計和定製索引程式時必須圍繞如何提高使用者的搜尋體驗來進行。

 

二:搜尋元件

 

      搜尋元件即為輸入搜尋短語,然後進行分詞,然從索引中查詢單詞,從而找到包含該單詞的文件。搜尋質量由查準率和查全率來衡量。搜尋的細節還是比較複雜的。這也是我們以後講解lucene的主要內容之一。尤其是在搜尋速度和搜尋大容量資料的能力在搜尋技術中是比較重要的。搜尋元件主要包括以下內容:

 

1.使用者搜尋介面:主要是和使用者進行互動的頁面,也就是呈現在瀏覽器中能看到的東西,這裡主要考慮的就是頁面UI設計了。一個良好的UI設計是吸引使用者的重要組成部分。

2.建立查詢:建立查詢主要是指使用者輸入所要查詢的短語,以普通HTML表單或者ajax的方式提交到後臺伺服器端。然後把詞語傳遞給後臺搜尋引擎。這就是一個簡單建立查詢的過程。

3.搜尋查詢:即為查詢檢索索引然後返回與查詢詞語匹配的文件。然後把返回來的結構按照查詢請求來排序。搜尋查詢元件覆蓋了搜尋引擎中大部分的複雜內容。

常見的搜尋理論模型主要有以下3種:

                 

 

4.展現結果:所謂展現結果,和第一個搜尋介面類似。都是一個與使用者互動的前端展示頁面,作為一個搜尋引擎,使用者體驗永遠是第一位。其中前端展示在使用者體現上佔據了重要地位

 

Ok,上面就主要講解了搜尋程式的兩個比較重要的元件,這裡只是簡單介紹一下,在以後的博文中我們還會詳細介紹。最後我們就簡單看一下lucene在這兩個元件方面所提供的幾個API

 

                       

簡單解釋一下這個圖:

1.被索引的文件用Document物件表示

2.IndexWriter通過函式addDocument將文件新增到索引中,實現建立索引的過程

3.Lucene的索引是反向索引

4.當用戶查詢請求時,Query代表使用者查詢語句

5.IndexSearcher通過函式search搜尋Lucene Index

6.IndexSearcher計算Term WeightScore並且將結果返回給使用者

7.返回給使用者的文件集合用TopDocsCollector表示