余項樹
摘 要:在項目開發過程中,站內搜索功能是十分重要的。目前常用的全文搜索主要是由各數據庫本身提供支持的,但是在數據量較大的中文網站和對于全文搜索使用很頻繁的系統中,使用基于Lucene的搜索引擎開發的優勢就會變得十分明顯。本文結合在線考試平臺搜索引擎的開發,研究了搜索引擎中索引的建立和優化、索引目錄的查詢和對查詢結果的展示,以及對查詢結果排序的優化。
關鍵詞:Lucene;試題搜索引擎;索引目錄;查詢分析器;排序算法
中圖分類號:TP301 文獻標識碼:A 文章編號:2095-2163(2014)06-
Abstract: In project development process, it is very important for the site search function. The current commonly full-text searches are mainly provided by the database itself, but in Chinese Web sites with large amount of data and the full-text search system used very frequent, search engine based on Lucene will become the advantage of development. Combined with the online examination platform for search engine development, the paper studies establishment and optimization of index in search engine, indexing catalog query and display the results of a query, therefore optimizes the ranking of query results.
Keyword: Lucene; Item Search Engine; Index Catalog; Query-Analyzer; Sort Algorithm
0 引 言
針對“海員在線考試系統”實際設計開發中試題搜索量大這一重要現象,本文提供了有效解決方案。方案思路為:若采用目前常用的由數據庫提供支持的全文搜索勢將增加搜索難度。而經研究可知,對于全文搜索具有高頻使用需求的系統,若使用基于Lucene[1]的搜索引擎,其研發優勢將十分顯著明確。本文即選用Lucene.NET開展搜索引擎的技術研究,結果表明全文搜索的效率獲得了大幅提升。
1 Lucene與數據庫的比較
關于中文的模糊查詢,應用最多的即是類似于like "%keyword%"的結構;但是由于數據庫在設計過程中引入索引并非為了全文索引,因此在使用like "%keyword%"時,數據庫索引將無法啟用,為全文檢索提供數據也必將不復存在。具體地,當使用like查詢時,搜索過程和并未建立索引的數據庫查詢效率是一樣的,即變成了如同一頁頁翻書、一行一行遍歷的過程了,這就使得對于含有模糊查詢的數據庫服務來說,Like對整個數據庫服務性能將產生重大危害,尤其是如果需要同時對多個關鍵詞進行模糊匹配,對于數據庫系統而言將引發災難性后果。綜上可知,建立一個科學、高效的檢索系統,核心關鍵即在于確立一個與科技索引相同的反向索引機制,將數據源(對于海員在線考試系統而言,則為試題的題干)實現順序存儲的同時,還要配備另外一個具有清晰順序的關鍵詞列表,用來存儲“關鍵詞==>文章”之間的映射關系,其映射關系結構如下:
[關鍵詞==>出現此關鍵詞的文章,關鍵詞出現的次數(根據查詢的邏輯關系,甚至還可以包括更詳細的內容如:關鍵詞出現的位置:起始偏移量,結束偏移量),出現頻率]
構建了上述映射關系后,索引檢索就隨之轉換成對映射關系的邏輯處理過程,模糊查詢也將按照分詞而使用戶要查詢的條件劃分為多個可以精確查詢的子查詢、再進行邏輯組合以獲得實現,從而提高了基于多關鍵詞的查詢效率。由此可知,全文檢索在本質上就是一個排序問題。根據上述分析推得,模糊查詢相對數據庫的精確查詢是一個不確定的問題,這也正是大部分數據庫對全文檢索僅為有限支持的癥結所在[2]。
Lucene的內核技術是其特殊的索引結構,借助其即可實現傳統精確查詢數據庫功能上受限的全文索引機制,而且又提供了豐富的擴展接口,從而便于用戶針對不同應用場景的個性定制[3]。在此,綜合兩者的性能比較則如表1所示。
4查詢結果的排序
Lucene缺省是按照本體的相關度算法(score= tf * idf * boost * lengthNorm)進行結果排序的。該排序算法并未考慮到關鍵詞出現位置的權重,例如,出現在標題和在選項部分的權重就是不同的。對于本系統而言,不同章節的重要性則是不同的,而且不同種類的試題重要性也是不同的,但在此算法中卻無法呈現,因此本系統對查詢結果將可按照用戶的要求進行重新排序。
5 線束語
Lucene是一個開放源代碼的全文檢索引擎工具包,其整體是一個全文檢索引擎的架構,并提供了完整的查詢引擎、索引引擎和部分文本分析引擎。利用Lucene為軟件開發人員提供的工具包進行二次開發,便可以在海員在線考試系統中實現全文檢索的功能,從而大大提高全文檢索的效率。
參考文獻:
[1] 管建和,甘劍峰.基于Lucene全文檢索引擎的應用研究與實現[J].計算機工程與設計,2007(2):489-491.
[2]廖繼東.基于DotLucene網站全文搜索系統的實現[D].鄭州:鄭州大學,2007.
[3]劉加發. EBM網絡搜索引擎的研究與實現[D].大連:大連海事大學.2008.
[4]劉平冰.基于Lucene的Web站內信息搜索系統[D].成都:電子科技大學,2005.
[5]雷豐云.智能搜索引擎的理論分析與應用研究[D].長沙:中南大學,2007.