999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Lucene全文檢索技術的優化探討

2017-11-18 16:10:20胡杰郭喬進陳彬
計算機時代 2017年11期

胡杰+郭喬進+陳彬

摘 要: 當今社會已經進入信息量爆發式增長的大數據時代,如何從海量數據中快速查找信息成為當前研究的熱點,Lucene軟件作為優秀的開源全文檢索工具已被廣泛應用于各種搜索引擎。文章通過對全文檢索原理與Lucene工具架構的研究,從優化內存索引、索引壓縮處理、優化磁盤索引等方面探討Lucene檢索效率的優化。實驗結果證明,通過優化內存索引、索引壓縮處理等方法可以有效地提高全文檢索的效率。

關鍵詞: 全文檢索; Lucene; 倒排索引; 檢索優化

中圖分類號:TP393.08 文獻標志碼:A 文章編號:1006-828(2017)11-16-04

Research on the optimizing of full-text retrieval with Lucene

Hu Jie, Guo Qiaojin, Chen Bin

(The 28th Institute of China Electronics Technology Group Corporation, Nanjing, Jiangsu 210007, China)

Abstract: Today's society has entered the big data era with the explosive growth of information, how to find information quickly from massive data has become the current research hotspot, as an excellent open source full-text retrieval tool, Lucene has been widely used in all kinds of search engines. This paper studies the principle of full-text retrieval and the architecture of Lucene tool, and discusses the Lucene retrieval efficiency optimization from aspects of optimizing memory index, index compression processing and optimizing disk index. The experimental result proved that the efficiency of full-text retrieval can be improved effectively by optimizing memory index and index compression processing.

Key words: full-text retrieval; Lucene; inverted index; retrieval optimization

0 引言

當今社會已經進入信息量爆發式增長的大數據時代。面對快速增長的海量數據,基于SQL查詢的傳統數據庫已經難以滿足數據檢索的需要,而且隨著多媒體技術的發展,文本、音頻、圖像等非結構化數據也成為用戶主要的檢索對象。傳統數據庫查詢普遍存在檢索內容覆蓋有限、檢索時間長等缺點,最重要的是不能通過查詢數據中某個詞語獲得用戶實際需要的內容,因此全文檢索技術作為現代信息檢索的核心技術,已經成為現有各種搜索引擎必不可少的功能。

Lucene是當前應用最廣泛的開源全文檢索項目,它提供了豐富的函數接口用于嵌入到其他應用程序中,實現強大的全文索引和搜索功能。實際應用中,Lucene可以從檢索效率、中文分詞、檢索精度等多方面開展檢索優化,本文主要探討硬盤索引、內存索引、索引壓縮處理等方面的檢索優化。

1 全文檢索原理

全文檢索主要面向文本文檔,它通過一定的算法對文檔進行語言和詞法分析,將文檔中每一個獨立的單詞進行分離并對這些單詞建立索引,記錄這些單詞在文檔中出現的次數和位置[1]。當用戶以這些單詞為關鍵字進行查詢時,檢索程序按照一定的算法直接在索引文件進行查找,而不必在檢索時遍歷整個文檔。

全文檢索作為信息檢索的核心技術已廣泛應用于Google、百度等主流的搜索引擎,用來實現網頁、文檔等非結構化數據的檢索[2]。全文檢索與傳統的數據庫檢索相比,數據庫檢索只能檢索基于庫、表、字段等固定格式的結構化數據,而全文檢索卻能夠任意檢索各種無固定格式的非結構化數據。

全文檢索包括文件預處理、索引構建、檢索實現等三個步驟[3]。

⑴ 文件預處理:由于被檢索文件往往不是單純的文本數據,全文檢索首先要對被檢索文件進行一定的預處理,將各種類型文件進行文本內容的提取,同時過濾掉文本文件中的標點符號和控制符等無關內容,完成文本提取和符號過濾后,使用純文本文件替代原始文件準備下一步的處理。

⑵ 索引構建:掃描已處理的純文本文件,完成分詞處理后,將每個單詞出現的位置和頻率記錄下來,為了提高后續的檢索效率,一般采用倒排索引的方式進行索引庫的構建。當掃描文檔時,如果某個單詞第一次出現,那么為該單詞建立一張新的索引表,用于記錄該單詞出現的位置與頻率;當這個單詞再次出現時,則在該單詞的索引表中記錄下文檔中出現的位置,同時將單詞頻率計數值加1。

⑶ 檢索實現:檢索實現的過程是在已經創建的索引表中查找匹配關鍵詞,這個過程包括兩步:首先通過詞法分析實現詞語的拆分,比如詞語“軟件設計”就會被拆分為“軟件”和“設計”兩個詞語,此時詞法分析與建立索引時詞法分析采用的是同一個規則;然后將檢索詞語與索引表進行比對與匹配,如果“軟件”出現在第M篇文檔的第N個字節,同時“設計”出現在該篇文檔的第N+4個字節處,則“軟件設計”詞語被命中匹配。endprint

2 Lucene工具

2.1 Lucene概述

Lucene是一個由Apache軟件基金管理的全文檢索項目[4],它提供了完整的查詢引擎與索引引擎以及部分文本分析引擎。

為了能夠適應不同的操作系統和軟件平臺,Lucene工具庫定義了以8位字節為單位的索引文件格式[5],并采用了分層的數據結構:詞(Term)是索引的最小單位,它表示一個處理后的關鍵字以及該關鍵字在文件中的位置與頻率;多個相關的詞形成域(Field),域是一個包括域名和域值的二元數組,通常一篇文章的題目、作者、發表日期都可以保存在不同的域中;多個相關的域形成文檔(Document),通常把文檔看作索引的基本單位,每個文檔都有一個惟一的標識號;多個文檔可以形成段(Segment),段(又稱子索引)是索引層次結構的最高層,索引就是由若干個段組成,不同的段文件之間可以合并,并且能夠單獨地進行搜索與維護[6]。

如圖1所示,Lucene的層次索引架構能夠有效地提高全文檢索的效率,它按照段、文檔、域、詞的分級模式搜索相關數據,避免遍歷索引中的每一條詞(Term)數據,尤其是在海量數據檢索時效率提升更加明顯[7]。Lucene索引文件同時保存了正向信息和反向信息,其中正向信息是從索引到段、一直到詞(索引->段->文檔->域->詞)的正向索引關系,而反向信息是從詞到文檔(詞->域->文檔)的反向索引關系,即倒排索引。倒排索引是一種基于鍵值對(key/value)的索引方法,其中鍵(key)表示文檔中出現的所有關鍵詞,而值(value)表示包含該關鍵詞的文檔集合信息,鍵值對記錄了文檔中關鍵詞與關鍵詞在文檔中存儲位置的映射關系[8]。

2.2 Lucene結構組成

Lucene的總體結構與索引過程如圖2所示,它包括索引管理和搜索索引兩部分:索引管理負責從外部的數據庫、文件系統、網站或人工輸入方式搜集數據,為這些數據構建索引文件并進行管理,其中數據抓取功能由外部的應用程序實現;當外部的應用程序提出檢索請求時,搜索索引負責解析用戶輸入的檢索語句,將外部輸入的檢索語句翻譯成Lucene能夠識別的搜索語句,搜索引擎根據搜索語句在索引文件中進行比對匹配,最后將匹配的檢索結果返回給用戶[9]。

Lucene主要由analysis、index、store、search、queryParser、util等模塊組成,其中analysis作為語言分析器,主要負責對文檔進行詞法分析和語言處理,最終形成詞(Term),index負責實現索引創建、索引刪除等索引管理功能,store負責實現索引數據的底層I/O存取操作,search負責實現檢索管理功能,即根據指定的查詢條件檢索得到結果,queryParser負責對用戶的查詢語句進行語法分析,包括多個關鍵詞的與、或、非等各種運算,util提供了文檔編碼、字節結構等公用的輔助功能類[10]。

3 檢索效率優化探討

3.1 優化內存索引

通過對索引建立過程的研究和分析,可以發現整個索引建立的過程,同時也是一個磁盤讀寫的過程。磁盤讀寫的效率嚴重影響著建立索引的效率,這也是索引建立的性能瓶頸。為了減少磁盤讀寫效率的影響,提高建立索引的效率,可以通過改變索引建立過程中的合并閾值,從而增加索引緩沖區和索引文件中的文檔數,減少由內存往硬盤寫索引的頻率,達到提高創建索引效率的目的。為了實現這個優化過程,需要設置IndexWriter對象的mergeFactor、maxMergeDocs、minMergeDocs參數。

首先,Lucene工具將文檔對象讀入內存,形成單一段索引,當內存中的單一段索引達到minMergeDocs時,就合并成一個段索引并寫入磁盤。然后,當磁盤上的段索引數目達到 mergeFactor時,就將段索引合并成為一個較大的段索引,但是,由于每個段索引都存在一個包含文檔數目的上限maxMergeDocs,所以這個合并過程也不是無限制的。通過分析可知,合理地調整這3個參數值,可以有效地提高索引性能。

3.2 索引壓縮處理

檢索優化的一個關鍵目標就是通過一些算法來減少I/O開銷和存儲開銷,索引文件的大小決定其所占用的存儲開銷。此外,由于大索引文件需要更大的I/O帶寬來讀取,因此其大小也直接影響了檢索的處理時間,這里以哈夫曼編碼為例介紹無損壓縮的編碼方式。哈夫曼編碼是一種可變字長編碼,它通過使用較短的碼字標識出現頻率較高的信源符號,而出現頻率較低的信源符號用較長的碼字來編碼,從而實現平均碼長最短,達到數據壓縮的目的[11]。

利用哈夫曼編碼進行文件壓縮的原理如下:首先將文件看作一個單符號信源,而每個文件都是由多個8位字節組成,每個字節的內容最多有256(28)種可能,所以可將文件視作由不超過256種字符形成的組合。然后掃描待壓縮的索引文件,統計文件中出現的每一個字符及出現的概率,將字符按由高到低的概率進行排序。最后以字符出現的頻率作為權值,通過構造哈夫曼樹,生成碼長最短的二進制前綴編碼。

3.3 優化磁盤索引

通過對建立索引過程的研究和分析可知,Lucene建立索引的過程是先分別在磁盤上生成若干個較小的段索引,當它達到mergeFactor后,就合并這些索引。但是這樣建立索引后,仍然可能會剩下很多索引文件,可以將磁盤中的若干個索引文件再次合并一個索引文件,減少由硬盤往內存讀寫索引的頻率,達到提高檢索效率的目的。

當然,針對磁盤的索引優化也需要選擇合理的時機,實踐驗證表明,如果在索引生成過程中使用上述方法,那么索引創建的時間將比平常索引創建時間多出幾十倍,因此最優的方法是選擇索引建立完成后且短期內不再發生索引變更的時機進行合并操作,這樣才不會出現合并操作與索引建立兩者之間的沖突。endprint

4 實驗及結果

實驗采用64位紅帽 Linux 6.1企業版操作系統,集成開發環境為Eclipse 4.5版本,硬件平臺采用Intel core i7處理器、8G內存和1T硬盤。實驗選擇15萬篇網絡下載的文檔,實驗結果如表1所示。

實驗證明,在內存足夠大的情況下,通過增加MergeFactor參數確實可以提高索引建立的吞吐量,即提高索引創建的速度,但是如果設置過高,可能存在突破操作系統文件描述符上限的風險,因此需要根據實際應用場景設置合理的參數值。

在索引壓縮處理實驗中,將MergeFactor值統一設置為10,實驗結果表明當索引文件相對較小且不超過機器內存時,索引壓縮處理對于效率提升也是相對有限的,只有在索引文件較大且遠大于機器內存時,能明顯提升索引處理效率,試驗結果如表2所示。

對于優化磁盤索引實驗,由于將磁盤中的若干個索引文件合并為一個索引文件,由于每次合并操作時這些小的索引文件數量和大小具有一定的不確定性,因此在效率優化的實際實驗結果中存在較大的偏差,有些情況下效果較好,而有些情況效率提升不明顯,這里不再一一列舉。

5 結束語

本文通過研究優化硬盤索引、優化內存索引、索引壓縮處理等方法,探討基于Lucene全文檢索效率的優化。實驗結果表明,通過優化內存索引、索引壓縮處理等方法可以有效地提高全文檢索的效率,而優化磁盤索引則對效率提升有限,存在較大的不確定性。總體而言,索引效率優化需要針對具體的業務環境,需要綜合考慮機器配置、索引文件數量與大小等多種因素,只有選擇合適的優化方法才能有效地提高全文檢索的效率。當然,Lucene檢索效率優化還可以從多線程、并行處理等軟件開發角度去進一步嘗試,這些方法還有待于進一步的深入研究。

參考文獻(References):

[1] 黃承慧,印鑒,陸寄遠.一種改進的Lucene語義相似度檢索算

法[J].中山大學學報:自然科學版,2011.50(2).

[2] 趙珂,逯鵬,李永強.基于Lucene的搜索引擎的設計與實現[J].

計算機工程,2011.37(16):39-41

[3] 義天鵬,陳啟安.基于Lucene的中文分析器分詞性能比較研

究[J].計算機工程,2012.38(22):279-282

[4] 胡長春,劉功申.面向搜索引擎Lucene的中文分析器[J].計算

機工程與應用,2009.45(12):157-159

[5] 吳廣君,王樹鵬,陳明等.海量結構化數據存儲檢索系統[J].計

算機研究與發展,49(S1):1-5

[6] 黃江平,黃理燦,徐玲.基于Lucene的PDF文檔的全文檢索的

實現[J].工業控制計算機,2012.25(5):10

[7] 吳代文,楊方琦.Lucene在數據庫全文檢索中的性能研究[J].

微計算機應用,2011.32(6):53-58

[8] 李永春,丁華福.Lucene的全文檢索的研究與應用[J].計算機

技術與發展,2010.20(2):12-15.

[9] 王歡,孫瑞志.基于領域本體和 Lucene 的語義檢索系統研究[J].

計算機應用,2010.30(6):1655-1657

[10] 姜鑫,余平.基于Lucene的音視頻資源檢索系統的研究與

實現[J].計算機應用與軟件,2011.28(11):245-248

[11] 張鳳林,劉思峰.Huffman~*:一個改進的Huffman數據壓縮

算法[J].計算機工程與應用,2007.43(2):73-74endprint

主站蜘蛛池模板: 国产流白浆视频| 国产国拍精品视频免费看| 国产69精品久久久久孕妇大杂乱| 伊人久久婷婷| 亚洲中文无码av永久伊人| 亚洲成人动漫在线| 自拍偷拍欧美日韩| 国产又黄又硬又粗| 国产精品性| 日本精品视频一区二区| 亚洲日本韩在线观看| 国产精品自在线拍国产电影| 成人亚洲视频| 国产亚洲欧美在线专区| 一本久道久综合久久鬼色| 五月天香蕉视频国产亚| 3344在线观看无码| 午夜日b视频| 亚洲无码91视频| 亚洲精品日产精品乱码不卡| 亚洲男女天堂| 日韩高清一区 | 欧美亚洲日韩中文| 国产精品极品美女自在线看免费一区二区 | 国产精品尤物在线| 亚洲精品手机在线| 亚洲一区二区三区国产精品| 日本五区在线不卡精品| 亚洲视频无码| 91丨九色丨首页在线播放| 精品国产自| 亚洲香蕉在线| 国产99在线| 欧美午夜在线视频| 动漫精品中文字幕无码| 久久影院一区二区h| 色婷婷亚洲综合五月| 欧美一级色视频| 国产自无码视频在线观看| 日韩精品一区二区三区免费| 亚洲精品第一在线观看视频| 精品日韩亚洲欧美高清a| 国产69囗曝护士吞精在线视频| 九色最新网址| 午夜激情婷婷| 久久无码免费束人妻| 欧美区一区二区三| 国产成人综合久久| 91探花在线观看国产最新| 欧美不卡二区| 久久国产精品国产自线拍| 国产成人成人一区二区| 国产精品久久久久久影院| 国精品91人妻无码一区二区三区| 欧美国产在线看| 热99精品视频| 国产成人精品一区二区三区| 91福利在线看| 中文字幕乱妇无码AV在线| 亚洲色图欧美| 国产91全国探花系列在线播放| 国产精品网址在线观看你懂的| 亚洲毛片网站| 国产制服丝袜无码视频| 国产午夜在线观看视频| 国产玖玖视频| 美女内射视频WWW网站午夜 | 91久久国产成人免费观看| 国产精品无码制服丝袜| 亚洲欧美人成人让影院| 亚洲国产欧美目韩成人综合| 性视频久久| 99国产精品一区二区| 国产剧情无码视频在线观看| 国产极品美女在线观看| 亚洲永久精品ww47国产| 亚洲黄色高清| 在线视频97| 亚洲天堂2014| 99精品视频在线观看免费播放| 国产18页| 亚洲天堂网视频|