余項樹
摘 要:在項目開發(fā)過程中,站內(nèi)搜索功能是十分重要的。目前常用的全文搜索主要是由各數(shù)據(jù)庫本身提供支持的,但是在數(shù)據(jù)量較大的中文網(wǎng)站和對于全文搜索使用很頻繁的系統(tǒng)中,使用基于Lucene的搜索引擎開發(fā)的優(yōu)勢就會變得十分明顯。本文結(jié)合在線考試平臺搜索引擎的開發(fā),研究了搜索引擎中索引的建立和優(yōu)化、索引目錄的查詢和對查詢結(jié)果的展示,以及對查詢結(jié)果排序的優(yōu)化。
關(guān)鍵詞: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 引 言
針對“海員在線考試系統(tǒng)”實際設(shè)計開發(fā)中試題搜索量大這一重要現(xiàn)象,本文提供了有效解決方案。方案思路為:若采用目前常用的由數(shù)據(jù)庫提供支持的全文搜索勢將增加搜索難度。而經(jīng)研究可知,對于全文搜索具有高頻使用需求的系統(tǒng),若使用基于Lucene[1]的搜索引擎,其研發(fā)優(yōu)勢將十分顯著明確。本文即選用Lucene.NET開展搜索引擎的技術(shù)研究,結(jié)果表明全文搜索的效率獲得了大幅提升。
1 Lucene與數(shù)據(jù)庫的比較
關(guān)于中文的模糊查詢,應(yīng)用最多的即是類似于like "%keyword%"的結(jié)構(gòu);但是由于數(shù)據(jù)庫在設(shè)計過程中引入索引并非為了全文索引,因此在使用like "%keyword%"時,數(shù)據(jù)庫索引將無法啟用,為全文檢索提供數(shù)據(jù)也必將不復存在。具體地,當使用like查詢時,搜索過程和并未建立索引的數(shù)據(jù)庫查詢效率是一樣的,即變成了如同一頁頁翻書、一行一行遍歷的過程了,這就使得對于含有模糊查詢的數(shù)據(jù)庫服務(wù)來說,Like對整個數(shù)據(jù)庫服務(wù)性能將產(chǎn)生重大危害,尤其是如果需要同時對多個關(guān)鍵詞進行模糊匹配,對于數(shù)據(jù)庫系統(tǒng)而言將引發(fā)災(zāi)難性后果。綜上可知,建立一個科學、高效的檢索系統(tǒng),核心關(guān)鍵即在于確立一個與科技索引相同的反向索引機制,將數(shù)據(jù)源(對于海員在線考試系統(tǒng)而言,則為試題的題干)實現(xiàn)順序存儲的同時,還要配備另外一個具有清晰順序的關(guān)鍵詞列表,用來存儲“關(guān)鍵詞==>文章”之間的映射關(guān)系,其映射關(guān)系結(jié)構(gòu)如下:
[關(guān)鍵詞==>出現(xiàn)此關(guān)鍵詞的文章,關(guān)鍵詞出現(xiàn)的次數(shù)(根據(jù)查詢的邏輯關(guān)系,甚至還可以包括更詳細的內(nèi)容如:關(guān)鍵詞出現(xiàn)的位置:起始偏移量,結(jié)束偏移量),出現(xiàn)頻率]
構(gòu)建了上述映射關(guān)系后,索引檢索就隨之轉(zhuǎn)換成對映射關(guān)系的邏輯處理過程,模糊查詢也將按照分詞而使用戶要查詢的條件劃分為多個可以精確查詢的子查詢、再進行邏輯組合以獲得實現(xiàn),從而提高了基于多關(guān)鍵詞的查詢效率。由此可知,全文檢索在本質(zhì)上就是一個排序問題。根據(jù)上述分析推得,模糊查詢相對數(shù)據(jù)庫的精確查詢是一個不確定的問題,這也正是大部分數(shù)據(jù)庫對全文檢索僅為有限支持的癥結(jié)所在[2]。
Lucene的內(nèi)核技術(shù)是其特殊的索引結(jié)構(gòu),借助其即可實現(xiàn)傳統(tǒng)精確查詢數(shù)據(jù)庫功能上受限的全文索引機制,而且又提供了豐富的擴展接口,從而便于用戶針對不同應(yīng)用場景的個性定制[3]。在此,綜合兩者的性能比較則如表1所示。
4查詢結(jié)果的排序
Lucene缺省是按照本體的相關(guān)度算法(score= tf * idf * boost * lengthNorm)進行結(jié)果排序的。該排序算法并未考慮到關(guān)鍵詞出現(xiàn)位置的權(quán)重,例如,出現(xiàn)在標題和在選項部分的權(quán)重就是不同的。對于本系統(tǒng)而言,不同章節(jié)的重要性則是不同的,而且不同種類的試題重要性也是不同的,但在此算法中卻無法呈現(xiàn),因此本系統(tǒng)對查詢結(jié)果將可按照用戶的要求進行重新排序。
5 線束語
Lucene是一個開放源代碼的全文檢索引擎工具包,其整體是一個全文檢索引擎的架構(gòu),并提供了完整的查詢引擎、索引引擎和部分文本分析引擎。利用Lucene為軟件開發(fā)人員提供的工具包進行二次開發(fā),便可以在海員在線考試系統(tǒng)中實現(xiàn)全文檢索的功能,從而大大提高全文檢索的效率。
參考文獻:
[1] 管建和,甘劍峰.基于Lucene全文檢索引擎的應(yīng)用研究與實現(xiàn)[J].計算機工程與設(shè)計,2007(2):489-491.
[2]廖繼東.基于DotLucene網(wǎng)站全文搜索系統(tǒng)的實現(xiàn)[D].鄭州:鄭州大學,2007.
[3]劉加發(fā). EBM網(wǎng)絡(luò)搜索引擎的研究與實現(xiàn)[D].大連:大連海事大學.2008.
[4]劉平冰.基于Lucene的Web站內(nèi)信息搜索系統(tǒng)[D].成都:電子科技大學,2005.
[5]雷豐云.智能搜索引擎的理論分析與應(yīng)用研究[D].長沙:中南大學,2007.