全文檢索技術---Lucene(概述)
資料分類:
我們生活中的資料總體分為兩種:結構化資料和非結構化資料。1) 結構化資料: 指具有固定格式或有限長度的資料,如資料庫,元資料等。 因為結構化資料的儲存一般都是有規律的,有行有列。而且資料格式、資料長度基本都是固定的。所以搜尋起來很容易。資料庫一般使用SQL語句就可以搜尋
2) 非結構化資料: 指不定長或無固定格式的資料,如郵件,word文件等磁碟上的檔案。 由於非結構化無規格所言,所以搜尋起來就十分費勁。 所以一般用一下兩種方式來進行搜尋: a) 順序掃描法
如何實現全文檢索?
可以使用 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、渲染結果 以一個友好的介面將查詢結果展示給使用者。