【搜索那些事】細談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表示

 

http://blog.csdn.net/csh624366188/article/details/12746989
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章