【搜索那些事】細談lucene(一)初識全文資源檢索框架lucene

一:lucene歷史和簡介


Lucene 是apache軟件基金會一個開放源代碼的全文檢索引擎工具包,是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。它不是一個完整的搜索應用程序,而是爲你的應用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一個開源項目。Lucene的目的是爲軟件開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者是以此爲基礎建立起完整的全文檢索引擎。

Lucene最初是由Doug Cutting所撰寫的,他是一位資深的全文索引及檢索專家,曾經是V-Twin搜索引擎的主要開發者,後來在Excite擔任高級系統架構設計師,目前從事於一些INTERNET底層架構的研究。他同時也是當前最火的大數據處理框架hadoop的創始人,其實,hadoop剛開始就是以Lucene的子項目Nutch的一部分正式引入的。我也打算在“搜索那些事”系列博客中可以從lucene——》nutch——hadoop的一點點的全部寫出來。Doug Cutting貢獻出Lucene的目標是爲各種中小型應用程式加入全文檢索功能。lucene 能夠爲文本類型的數據建立索引,所以你只要能把你要索引的數據格式轉化的文本的,Lucene 就能對你的文檔進行索引和搜索。比如你要對一些 HTML 文檔,PDF 文檔進行索引的話你就首先需要把 HTML 文檔和 PDF 文檔轉化成文本格式的,然後將轉化後的內容交給 Lucene 進行索引,然後把創建好的索引文件保存到磁盤或者內存中,最後根據用戶輸入的查詢條件在索引文件上進行查詢。不指定要索引的文檔的格式也使 Lucene 能夠幾乎適用於所有的搜索應用程序。儘管當時lucene是由Java編寫的,不過由於它設計思想的先進和用於廣泛,所以現在已有其他編程語言的版本(c/c++,c#,Python等)。已經有很多Java項目都使用了Lucene作爲其後臺的全文索引引擎,比較著名的有:

  • Jive:WEB論壇系統;
  • Eyebrows:郵件列表HTML歸檔/瀏覽/查詢系統,本文的主要參考文檔“TheLucene search engine: Powerful, flexible, and free”作者就是EyeBrows系統的主要開發者之一,而EyeBrows已經成爲目前APACHE項目的主要郵件列表歸檔系統。
  • Cocoon:基於XML的web發佈框架,全文檢索部分使用了Lucene
  • Eclipse:基於Java的開放開發平臺,幫助部分的全文索引使用了Lucene


二:lucene特性簡介

我們處在一個信息爆炸的時代,所以信息搜索對於當前社會發展是非常重要的。作爲一個開放源代碼項目,Lucene從問世之後,引發了開放源代碼社羣的巨大反響,程序員們不僅使用它構建具體的全文檢索應用,而且將之集成到各種系統軟件中去,以及構建Web應用,甚至某些商業軟件也採用了Lucene作爲其內部全文檢索子系統的核心。apache軟件基金會的網站使用了Lucene作爲全文檢索的引擎,IBM的開源軟件eclipse的2.1版本中也採用了Lucene作爲幫助子系統的全文索引引擎,相應的IBM的商業軟件Web Sphere中也採用了Lucene。Lucene以其開放源代碼的特性、優異的索引結構、良好的系統架構獲得了越來越多的應用。

 

Lucene作爲一個全文檢索引擎,其具有如下突出的優點:

(1)索引文件格式獨立於應用平臺。Lucene定義了一套以8位字節爲基礎的索引文件格式,使得兼容系統或者不同平臺的應用能夠共享建立的索引文件。

(2)在傳統全文檢索引擎的倒排索引的基礎上,實現了分塊索引,能夠針對新的文件建立小文件索引,提升索引速度。然後通過與原有索引的合併,達到優化的目的。

(3)優秀的面向對象的系統架構,使得對於Lucene擴展的學習難度降低,方便擴充新功能。

(4)設計了獨立於語言和文件格式的文本分析接口,索引器通過接受Token流完成索引文件的創立,用戶擴展新的語言和文件格式,只需要實現文本分析的接口。

(5)已經默認實現了一套強大的查詢引擎,用戶無需自己編寫代碼即使系統可獲得強大的查詢能力,Lucene的查詢實現中默認實現了布爾操作、模糊查詢(Fuzzy Search[11])、分組查詢等等。


特性:

1.索引過程:

·        在現在流行的硬件平臺上每個小時可處理超過 150GB 的數據

·        內存佔用小,只需 1MB 的堆內存

·        增量索引和批量索引速度一樣快

·        索引大小約爲文本索引的 20-30% 大小

·        靜態索引修剪


2.搜索算法

·        範圍搜索 - 優先返回最佳結果

·        很多強大的查詢類型:短語查詢、通配符查詢、近似查詢、範圍查詢等

·        可單獨針對某個字段查詢

·        可單獨根據某個字段排序

·        多索引搜索併合並搜索結果

·        允許同步更新索引和搜索

·        靈活的門面搜索、高亮顯示、結果集的聯合和分組

·        快速,低內存佔用和容錯

·        可插入式排名模型,包括 VSM 和Okapi MB25

·        可配置的存儲引擎


3.跨平臺解決方案

·        100% 純 Java

·        其他語言提供索引兼容的實現

 

 搜索應用程序和 Lucene 之間的關係,也反映了利用 Lucene 構建搜索應用程序的流程:

      


三:索引和搜索

索引是現代搜索引擎的核心,建立索引的過程就是把源數據處理成非常方便查詢的索引文件的過程。爲什麼索引這麼重要呢,試想你現在要在大量的文檔中搜索含有某個關鍵詞的文檔,那麼如果不建立索引的話你就需要把這些文檔順序的讀入內存,然後檢查這個文章中是不是含有要查找的關鍵詞,這樣的話就會耗費非常多的時間,想想搜索引擎可是在毫秒級的時間內查找出要搜索的結果的。這就是由於建立了索引的原因,你可以把索引想象成這樣一種數據結構,他能夠使你快速的隨機訪問存儲在索引中的關鍵詞,進而找到該關鍵詞所關聯的文檔。Lucene 採用的是一種稱爲反向索引(inverted index)的機制。反向索引就是說我們維護了一個詞 / 短語表,對於這個表中的每個詞 / 短語,都有一個鏈表描述了有哪些文檔包含了這個詞 / 短語。這樣在用戶輸入查詢條件的時候,就能非常快的得到搜索結果。我們將在本系列文章的第二部分詳細介紹 Lucene 的索引機制,由於 Lucene 提供了簡單易用的 API,所以即使讀者剛開始對全文本進行索引的機制並不太瞭解,也可以非常容易的使用Lucene 對你的文檔實現索引。對文檔建立好索引後,就可以在這些索引上面進行搜索了。搜索引擎首先會對搜索的關鍵詞進行解析,然後再在建立好的索引上面進行查找,最終返回和用戶輸入的關鍵詞相關聯的文檔。對於中文用戶來說,最關心的問題是其是否支持中文的全文檢索。由於Lucene良好架構設計,對中文的支持只需對其語言詞法分析接口進行擴展就能實現對中文檢索的支持。

 

推薦閱讀:搜索那些事——細談lucene(二)lucene搜索程序組件詳解

 

 

 

參考資料:

lucene百度百科:http://baike.baidu.com/view/371811.htm

實戰lucenehttp://www.ibm.com/developerworks/cn/java/j-lo-lucene1/

七個搜索引擎http://www.oschina.net/news/39289/7-search-engines-for-big-data


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