摘要:Lucene 是一個用Java 寫的全文索引引擎工具包,訪問索引時間快,支持多用戶訪問,可以跨平臺使用。介紹了基于Java的全文檢索引擎Lucene,包括下載與配置,以及基本概念與實現機制,然后將Lucene與傳統數據庫系統的輸入輸出機制與查詢技術作了比較。
關鍵詞:傳統數據庫系統;全文檢索;Java; Lucene
中圖分類號:TP393文獻標識碼:A 文章編號:1009-3044(2008)20-30231-03
Research on the Full Text Retrieval Engine Lucene Based on Java
LIANG Yong-lin
(Shaoguan University, Shaoguan 512005,China)
Abstract: Lucene is a fulltextretrieval engine package written in Javalanguage. Ithashighaccess speed , supports multi-user accesses and can be used in a cross-platform way. This paper introduces the full text retrieval engine Lucene based on Java, including the downloading, Configuration, basic concepts and the implementation mechanism. Then, it is made compare the mechanism of input/output and query technology between Lucene and conventional database system.
key words: conventional database system; full text retrieval; Java; Lucene
隨著科技的發展和經濟的騰飛,圖書館、新聞出版、企業等單位電子數據激增,互聯網的迅猛發展,可供人們選擇的信息也迅速膨脹,如何有效利用日益增長的、海量的信息的問題變得越來越突出。 傳統的檢索方式越來越不符合發展的需要。人們對查詢方式的要求也越來越高,已不局限于使用計算機的標引檢索和布爾邏輯功能檢索。全文檢索系統因為檢索功能強大、操作容易而越來越受到廣大用戶的歡迎。
1 Lucene的簡介
Lucene 是一個基于 Java 的全文信息檢索工具包,它不是一個完整的搜索應用程序,而是為應用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一個開源項目,也是目前最為流行的基于 Java 開源全文檢索工具包(package)。
Lucene的作者Doug Cutting是一位資深全文索引/檢索專家,曾經是V-Twin搜索引擎(Apple的Copland操作系統的成就之一)的主要開發者,后來在Excite擔任高級系統架構設計師,目前從事于一些Internet底層架構的研究。他貢獻出的Lucene的目標是為各種中小型應用程序加入全文檢索功能。目前已經有很多應用程序的搜索功能是基于 Lucene 的,比較著名的有:
1)Jive:WEB論壇系統;
2)Eyebrows:郵件列表HTML歸檔/瀏覽/查詢系統;
3)Cocoon:基于XML的web發布框架,全文檢索部分使用了Lucene
4)Eclipse:基于Java的開放開發平臺,幫助部分的全文索引使用了Lucene
Lucene 能夠為文本類型的數據建立索引,所以我們只要能把索引的目標數據格式轉化成文本格式,Lucene 就能對文檔進行索引和搜索。比如,要對 HTML 文檔,PDF 文檔進行索引的話,首先需要把 HTML 文檔和 PDF 文檔轉化成文本格式,然后將轉化后的內容交給 Lucene 進行索引,接著把創建好的索引文件保存到磁盤或者內存中,最后根據用戶輸入的查詢條件在索引文件上進行查詢。不指定要索引的文檔格式使得 Lucene 能夠適用于幾乎所有的搜索應用程序[1]。
2 Lucene的下載和配置
2.1 Lucene的下載
Lucene在jakarta項目中的發布主頁:
http://jakarta.apache.org/Lucene/docs/index.html
以下網址主要針對windows用戶,其它操作系統的用戶可在jakarta項目發布主頁的網頁中查找相關下載。
Lucene的.jar包的下載網址(其中包括。jar和一個范例demo):
http://apache.oregonstate.edu/jakarta/Lucene/binaries/Lucene-1.4-final.zip
Lucene的源代碼下載網址:
http://www.signal42.com/mirrors/apache/jakarta/Lucene/source/Lucene-1.4-final-src.zip
Lucene的api下載網址:
http://jakarta.apache.org/Lucene/docs/api/index.html
2.2 Lucene的配置
首先,我們要確定已經進行了JDK的安裝以及Java使用環境的基本配置,即確保在某個平臺下能夠正確運行Java源代碼[2]。
接下來進入Lucene的配置:
普通使用者:在環境變量的CLASSPATH中添加Lucene的位置。比如:“D:\\java \\Lucene-1.4-final\\Lucene-1.4-final.jar;”。
Jbuilder使用者:在“Project”→“Project Properties”→“Required Libraries”進行添加。
Jsp使用者:也可以直接將Lucene-1.4-final.jar文件放到\\WEB-INF\\classes下。
3全文檢索的實現機制
3.1 Lucene的數據結構
Lucene的API接口設計的比較通用,輸入輸出結構都很像數據庫的表==>記錄==>字段,所以很多傳統的應用文件、數據庫等都可以比較方便的映射到Lucene的存儲結構/接口中。總體上看,可以先把Lucene當成一個支持全文索引的數據庫系統[3]。
Lucene和傳統數據庫的輸入輸出結果比較,如表1所示。
表1 Lucene與傳統數據庫系統的輸入輸出結果比較表
3.2 Lucene全文檢索與傳統數據庫like模糊查詢的比較
全文檢索 ≠ like \"%keyword%\"
索引是對數據庫表中一個或多個列的值進行排序的結構,它是一種特殊類型的數據庫對象,它與表有著密切的聯系。實際上,可以把索引理解成一種特殊的目錄,建立索引的目的就是提高數據檢索效率,改善數據庫工作性能,提高數據訪問速度。
索引提供指針以指向存儲在表中指定列的數據值,然后根據指定的排序次序排列這些指針。數據庫使用索引的方式與使用書的目錄很相似:通過搜索索引找到特定的值,然后跟隨指針到達包含該值的行,從而達到快速獲取信息的目的[4]。
由于數據庫的索引不是為全文檢索設計的,因此,使用like \"%keyword%\"時,數據庫索引是不起作用的。在使用like查詢時,搜索過程變成類似于一頁頁翻書的遍歷過程,對于含有模糊查詢的數據庫服務來說,like查詢對性能的危害是極大的。如果需要對多個關鍵詞進行模糊匹配,例如:like\"%keyword1%\" and like \"%keyword2%\" 其效率必然低下。
建立一個高效檢索系統的關鍵是建立一個類似于科技索引一樣的反向索引機制。將數據源(比如多篇文章)排序順序存儲的同時,有另外一個排好序的關鍵詞列表,用于存儲關鍵詞==>文章映射關系,利用這樣的映射關系索引:[關鍵詞==>出現關鍵詞的文章編號,出現次數(甚至包括位置:起始偏移量,結束偏移量),出現頻率],檢索過程就是把模糊查詢變成多個可以利用索引的精確查詢的邏輯組合的過程。從而大大提高了多關鍵詞查詢的效率,所以,全文檢索問題歸結到最后是一個排序問題。
由此,可以看出like模糊查詢對于數據庫系統的精確查詢是非常不確定的問題,這也是大部分數據庫系統對全文檢索支持有限的原因。Lucene最核心的特征是通過特殊的索引結構實現了傳統數據庫不擅長的全文索引機制,并提供了擴展接口,以方便針對不同應用的定制。
可以通過表2對比Lucene的全文索引與傳統數據庫系統的模糊查詢。
全文檢索和數據庫應用最大的不同在于:讓最相關的頭100條結果滿足98%以上用戶的需求。
4 結束語
本文介紹了全文檢索引擎Lucene,并與傳統數據庫系統作出了比較。Lucene實現了Java的非常強大的全文索引檢索功能,它可以應用到搜索引擎,中小企業網站站內檢索,個人用戶桌面搜索引擎建立,特定文檔檢索數據庫建立等。
參考文獻:
[1] 車東.基于Java的全文索引引擎Lucene簡介:關于作者和Lucene的歷史.[2007-06-16] http://www.chedong.com/tech/Lucene.html
[2] Otis Gospodnetic, Eric Hatcher.Lucene in Action[M]。 Greenwich :Manning Publications Co,2005.
[3] The Apache Jakarta Project.Lucene Docs[2007-05-20]http://jakarta.apache.org/lucene/docs/index.html
[4] 王能斌.數據庫系統原理[M].北京:電子工業出版社,2000:226-228.
注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。”