1. 程式人生 > >Lucene全文檢索--理論篇

Lucene全文檢索--理論篇

【案例】

實現一個檔案的搜尋功能,通過關鍵字搜尋檔案,凡是檔名或檔案內容包括關鍵字的檔案都需要找出來。還可以根據中文詞語進行查詢,並且需要支援多個條件查詢。

本案例中的原始內容就是磁碟上的檔案,如下圖:

 

1. 全文檢索(Full-text Search)

       將非結構化資料中的一部分資訊提取出來,重新組織,使其變得有一定結構,然後對此有一定結構的資料進行搜尋,從而達到搜尋相對較快的目的。這部分從非結構化資料中提取出的然後重新組織的資訊,我們稱之索引

       這種先建立索引,再對索引進行搜尋的過程就叫全文檢索(Full-text Search)。

雖然建立索引的過程也是非常耗時的,但是索引一旦建立就可以多次使用,全文檢索主要處理的是查詢,所以耗時間建立索引是值得的

2. 如何實現全文檢索

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

3. 全文檢索的應用場景

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

​​​​​​​4. 索引和搜尋流程圖

 4.1​​​​​​​ 獲得原始文件

       原始文件是指要索引和搜尋的內容。原始內容包括網際網路上的網頁、資料庫中的資料、磁碟上的檔案等。

4.2  ​​​​​​​建立文件物件

    獲取原始內容的目的是為了索引,在索引前需要將原始內容建立成文件(Document),文件中包括一個一個的域(Field),域中儲存內容。

這裡我們可以將磁碟上的一個檔案當成一個document,Document中包括一些Field(file_name檔名稱、file_path檔案路徑、file_size檔案大小、file_content檔案內容),如下圖:

【注意】

      1.每個Document可以有多個Field,不同的Document可以有不同的Field,同一個Document可以有相同的Field(域名和域值都相同)

      2.每個文件都有一個唯一的編號,就是文件id,文件id是從0開始並。

4.3​​​​​​​ 分析文件

     將原始內容建立為包含域(Field)的文件(document),需要再對域中的內容進行分析。分析的過程是:

            (1)提取單詞

            (2)將字母轉為小寫

            (3)去除標點符號

            (4)去除停用詞

    生成最終的語彙單元,可以將語彙單元理解為一個一個的單詞。每個單詞叫做一個Term,不同的域中拆分出來的相同的單詞是不同的term。term中包含兩部分一部分是文件的域名,另一部分是單詞的內容。若是出現域名與單詞都相同的情況,則後面會有文件id,用這個id來區分相同的term。

4.4 ​​​​​​​建立索引

      對所有文件分析得出的語彙單元進行索引,索引的目的是為了搜尋,最終要實現只搜尋被索引的語彙單元從而找到Document(文件)。

【注意】  建立索引是對語彙單元索引,通過詞語找文件,這種索引的結構叫倒排索引結構

4.5 ​​​​​​​查詢索引

       查詢索引也是搜尋的過程。搜尋就是使用者輸入關鍵字,從索引(index)中進行搜尋的過程。根據關鍵字搜尋索引,根據索引找到對應的文件,從而找到要搜尋的內容(這裡指磁碟上的檔案)。