1. 程式人生 > >全文檢索技術---Lucene(概述)

全文檢索技術---Lucene(概述)

資料分類:

我們生活中的資料總體分為兩種:結構化資料和非結構化資料。

        1) 結構化資料:                 指具有固定格式或有限長度的資料,如資料庫,元資料等。                 因為結構化資料的儲存一般都是有規律的,有行有列。而且資料格式、資料長度基本都是固定的。所以搜尋起來很容易。資料庫一般使用SQL語句就可以搜尋

        2) 非結構化資料:                 指不定長或無固定格式的資料,如郵件,word文件等磁碟上的檔案。                 由於非結構化無規格所言,所以搜尋起來就十分費勁。                 所以一般用一下兩種方式來進行搜尋:                 a) 順序掃描法

                    所謂順序掃描。比如要找內容包含某一個字串的檔案,就是一個文件一個文件的看,對於每一個文件,從頭看到尾,如果此文件包含此字串,則此文件為我們要找的檔案,接著看下一個檔案,直到掃描完所有的檔案。如利用windows的搜尋也可以搜尋檔案內容,只是相當的慢。                 b) 全文搜尋                     將非結構化資料中的一部分資訊提取出來,重新組織,使其變得有一定結構,然後對此有一定結構的資料進行搜尋,從而達到搜尋相對較快的目的。這部分從非結構化資料中提取出的然後重新組織的資訊,我們稱之索引。                     這種先建立索引,再對索引進行搜尋的過程就叫全文檢索(Full-text Search)
。                     雖然建立索引的過程也是非常耗時的,但是索引一旦建立就可以多次使用,全文檢索主要處理的是查詢,所以耗時間建立索引是值得的。

如何實現全文檢索?

        可以使用 Lucene實現全文檢索。         Lucene是apache下的一個開放原始碼的全文檢索引擎工具包。提供了完整的查詢引擎和索引引擎,部分文字分析引擎。Lucene的目的是為軟體開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能。

全文檢索的應用場景:

        對於資料量大、資料結構不固定的資料可採用全文檢索方式搜尋。比如百度、Google等搜尋引擎、論壇站內搜尋、電商網站站內搜尋等等。

Lucene實現全文檢索的流程:

在這裡插入圖片描述         綠色表示索引過程,對要搜尋的原始內容進行索引構建一個索引庫,索引過程包括: 確定原始內容即要搜尋的內容–>採集文件–>建立文件–>分析文件–>索引文件         紅色表示搜尋過程,從索引庫中搜索內容,搜尋過程包括: 使用者通過搜尋介面–>建立查詢–>執行搜尋,從索引庫搜尋–>渲染搜尋結果         建立索引:                 對文件索引的過程,將使用者要搜尋的文件內容進行索引,索引儲存在索引庫(index)中。                 1、獲得原始文件                     原始文件是指要索引和搜尋的內容。原始內容包括網際網路上的網頁、資料庫中的資料、磁碟上的檔案等。                 2、建立文件物件                     獲取原始內容的目的是為了索引,在索引前需要將原始內容建立成文件(Document),文件中包括一個一個的域(Field),域中再儲存內容。                     注意: 每個Document可以有多個Field,不同的Document可以有不同的Field,同一個Document可以有相同的Field(域名和域值都相同)                            每個文件都有一個唯一的編號,就是文件id。                 3、分析文件                     將原始內容建立為包含域(Field)的文件(document),需要再對域中的內容進行分析,分析的過程是經過對原始文件提取單詞、將字母轉為小寫、去除標點符號、去除停用詞等過程生成最終的語彙單元,可以將語彙單元理解為一個一個的單詞。                     每個單詞叫做一個Term,不同的域中拆分出來的相同的單詞是不同的term。term中包含兩部分一部分是文件的域名,另一部分是單詞的內容。                 4、建立索引                     對所有文件分析得出的語彙單元進行索引,索引的目的是為了搜尋,最終要實現只搜尋被索引的語彙單元從而找到Document(文件)。                     建立索引是對語彙單元索引,通過詞語找文件,這種索引的結構叫倒排索引結構。                     倒排索引結構是根據內容(詞語)找文件,倒排索引結構也叫反向索引結構,包括索引和文件兩部分,索引即詞彙表,它的規模較小,而文件集合較大。         我們也可以使用Luke工具檢視索引檔案         查詢索引:                 查詢索引也是搜尋的過程。搜尋就是使用者輸入關鍵字,從索引(index)中進行搜尋的過程。根據關鍵字搜尋索引,根據索引找到對應的文件,從而找到要搜尋的內容。                 1、提高使用者查詢的介面(前端搜尋框)                     Lucene不提供製作使用者搜尋介面的功能,需要根據自己的需求開發搜尋介面。                 2、建立查詢                     使用者輸入查詢關鍵字執行搜尋之前需要先構建一個查詢物件,查詢物件中可以指定查詢要搜尋的Field文件域、查詢關鍵字等,查詢物件會生成具體的查詢語法。比如:                     “fileName:lucene”表示要搜尋Field域的內容為“lucene”的文件                 3、執行查詢                     根據查詢語法在倒排索引詞典表中分別找出對應搜尋詞的索引,從而找到索引所連結的文件連結串列。比如:                     搜尋語法為“fileName:lucene”表示搜尋出fileName域中包含Lucene的文件。                     搜尋過程就是在索引上查詢域為fileName,並且關鍵字為Lucene的term,並根據term找到文件id列表。                 4、渲染結果                     以一個友好的介面將查詢結果展示給使用者。