1. 程式人生 > >Lucene系列一之全文檢索

Lucene系列一之全文檢索

Lucene是一套用於全文檢索和搜尋的開放原始碼程式庫,由Apache軟體基金會支援和提供。Lucene提供了一個簡單卻強大的應用程式介面,能夠做全文索引和搜尋,在Java開發環境裡Lucene是一個成熟的免費開放原始碼工具;就其本身而論,Lucene是現在並且是這幾年,最受歡迎的免費Java資訊檢索程式庫。--維基百科

 

1. Luncene重要性

版本更新的非常快,現在最新的版本已經是7.2.1,已經成為搜尋引擎的核心。你熟悉的solr、elasticsearch都有基於它實現。他們關係就好似發動機與汽車,瞭解發動機能夠讓你更好的駕馭solr、elasticsearch。

2. 為什麼需要搜尋引擎

  • 傳統的關係型資料庫針對文字列的索引失效問題(也不適合建索引),比如我們查詢標題 LIKE ‘%釣魚島%’會導致Like 時索引失效,全表掃描,資料量大時是噩夢
  • 查詢出來的結果進行相關度排名,傳統的關係型資料庫做到會比較吃力
  • 資料結構的多樣性支援,結構化資料(用表、欄位表示的資料)->半結構化資料(xml 、html)->非結構化資料(文字、文件、圖片、音訊、視訊等)

這兩者解決的問題是不一樣。資料庫搜尋在匹配效果、速度、效率等方面都遜色於全文檢索。

3. 適用場景

核心:大量結構化、半結構化、非結構化文字類資料的實時搜尋

  • 網頁搜尋
  • 內容提供網站的內容搜尋(如 新聞、論壇、部落格網站)
  • 電子商務網站的商品搜尋
  • 如果你負責的系統資料量大,通過資料庫檢索慢,可以考慮用搜索引擎來專門負責檢索。

4. 搜尋引擎的核心部件

  • 資料來源
  • 分詞器
  • 反向索引(倒排索引)
  • 相關性計算模型

5. 什麼是相關度排名

參閱另一篇《相關性

6. 全文檢索是什麼

全文資料庫是全文檢索系統的主要構成部分。所謂全文資料庫是將一個完整的資訊源的全部內容轉化為計算機可以識別、處理的資訊單元而形成的資料集合。全文資料庫不僅儲存了資訊,而且還有對全文資料進行詞、字、段落等更深層次的編輯、加工的功能,而且所有全文資料庫無一不是海量資訊資料庫。--百度百科

全文檢索首先將要查詢的目標文件中的詞提取出來,組成索引,通過查詢索引達到搜尋目標文件的目的。這種先建立索引,再對索引進行搜尋的過程就叫全文檢索(Full-text Search)。
全文檢索(Full-Text Retrieval)是指以文字作為檢索物件,找出含有指定詞彙的文字。
全面、準確和快速是衡量全文檢索系統的關鍵指標。

我們要知道:

  • 只處理文字
  • 不處理語義。
  • 搜尋時英文不區分大小寫
  • 結果列表有相關度排序。(查出的結果如果沒有相關度排序,那麼系統不知道我想要的結果在哪一頁。我們在使用百度搜索時,一般不需要翻頁,為什麼?因為百度做了相關度排序:為每一條結果打一個分數,這條結果越符合搜尋條件,得分就越高,叫做相關度得分,結果列表會按照這個分數由高到低排列,所以第1頁的結果就是我們最想要的結果。)
    在資訊檢索工具中,全文檢索是最具通用性和實用性的。

最後,資料庫適合結構化資料的精確查詢,而不適合半結構化、非結構化資料的模糊查詢及靈活搜尋(特別是資料量大時),無法提供想要的實時性。如果想了解的更多,請參閱下章反向索引