郵件索引建立方法及系統(tǒng)、郵件搜索方法及系統(tǒng)的制作方法
【專利摘要】本申請實施例公開了郵件索引建立方法及系統(tǒng)、郵件搜索方法及系統(tǒng),該郵件索引建立方法包括:對待建立索引的當(dāng)前郵件進(jìn)行分詞得到當(dāng)前郵件的關(guān)鍵詞;依據(jù)當(dāng)前郵件的關(guān)鍵詞更新一級緩存中保存的一級倒排索引記錄;判斷一級緩存中的一級倒排索引記錄的大小是否到達(dá)第一預(yù)設(shè)閾值,如果是,則將所述一級緩存中的所有一級倒排索引記錄讀取至二級緩存文件中;判斷當(dāng)前二級緩存文件的大小是否到達(dá)第二預(yù)設(shè)閾值,如果是,則依據(jù)路徑文件將二級緩存文件中的二級倒排索引記錄讀取至三級倒排索引文件。采用本申請實施例的方法或系統(tǒng),可以有效地提高建立索引的效率,提升硬盤IO性能。進(jìn)一步的,基于上述建立索引的方法建立的索引進(jìn)行郵件查詢時,也能夠提高搜索結(jié)果的效率。
【專利說明】郵件索引建立方法及系統(tǒng)、郵件搜索方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本申請涉及網(wǎng)絡(luò)數(shù)據(jù)處理領(lǐng)域,特別是涉及郵件索引建立方法及系統(tǒng)、郵件搜索方法及系統(tǒng)。
【背景技術(shù)】
[0002]目前,隨著互聯(lián)網(wǎng)通訊越來越普及,越來越多的用戶采用郵件進(jìn)行溝通,而在用戶的郵件達(dá)到一定數(shù)量之后,郵箱檢索也越來越處于數(shù)據(jù)搜索的重要位置。郵箱檢索基于郵箱索引的建立,即是對于某個用戶來講,其所有的郵件都會通過郵箱索引進(jìn)行檢索。
[0003]現(xiàn)有技術(shù)有這樣一種郵件索引建立方法,主要采用倒排索引方式建立郵箱索引,例如,有3個郵件文件名為doc_idl, doc_id2,以及doc_id3,其中都包含“hello theworld”,則每一個關(guān)鍵詞的倒排索引記錄就如下所示:
[0004]hello- > doc_idl, doc_id2, doc_id3,
[0005]the- > doc_idl, doc_id2, doc_id3,
[0006]world- > doc_idl, doc_id2, doc_id3 ;
[0007]將上述倒排索引記錄存放至倒排索引文件,再記錄每個倒排索引記錄在倒排索引文件中的偏移位置及長度,并將該偏移位置寫入詞典文件,寫入方式如下所示:
[0008]{ “hello,,:{ “file_path":" /xxx/ 倒排索引文件","offset":0}};
[0009]假設(shè)用戶檢索包括“hello”的郵件,就能夠從詞典文件中找出包含該關(guān)鍵詞的所有郵件,即找到“/xxx/倒排索引文件”這個地址,然后打開該倒排索引文件讀取偏移量“O”的位置,即可以讀到{doc_idl, doc_id2, doc_id3}三個郵件。
[0010]但是在增加新郵件的時候,為了保證搜索結(jié)果的完整性需要更新倒排索引文件。例如增加一封新郵件為doc_id4,該郵件也包含“hello the world”共3個關(guān)鍵字,則此時需要倒排索引記錄更新如下:
[0011]hello- > doc_idl, doc_id2, doc_id3, doc id4,
[0012]the- > doc_idl, doc_id2, doc_id3, doc id4,
[0013]world- > doc_idl, doc_id2, doc_id3, doc id4 ;
[0014]而如果把更新后的倒排索引記錄存放至倒排索引文件,“the- > doc_idl, doc_id2, doc_id3, doc id4” 和 “world- > doc_idl, doc_id2, doc_id3, doc id4” 這兩個倒排索引記錄都需要在倒排索引文件中改變其原本的存儲位置,同時也需要修改詞典文件里對應(yīng)的偏移量(offset)值。
[0015]所以前述建立倒排索引文件的方式下,當(dāng)每次增加一個新郵件時,都需要移動倒排索引文件的其他相關(guān)數(shù)據(jù)內(nèi)容。
[0016]發(fā)明人在研究過程中發(fā)現(xiàn),基于前述的郵件索引建立方法進(jìn)行郵箱檢索,就需要在整個倒排索引文件中進(jìn)行關(guān)鍵詞的搜索,而隨著郵件數(shù)據(jù)規(guī)模的增大,對于億級別的用戶的郵箱服務(wù)器來說,如果平均每個用戶一千封郵件,那么郵件總數(shù)即可達(dá)到千億級別(即和互聯(lián)網(wǎng)的全網(wǎng)網(wǎng)頁規(guī)模接近,全網(wǎng)目前有千億級的網(wǎng)頁數(shù)量),就不可避免的會導(dǎo)致對硬盤IO資源的大量占用,也使得無法快速實現(xiàn)對郵箱的索引。進(jìn)一步的,郵箱服務(wù)器對于海量郵件的存儲成本也很高,造成大量的存儲資源被占用。
【發(fā)明內(nèi)容】
[0017]本申請所要解決的技術(shù)問題是,提供一種郵件索引建立方法及系統(tǒng)、郵件搜索方法及系統(tǒng),以解決按照現(xiàn)有技術(shù)中建立索引的方式導(dǎo)致的郵件搜索會導(dǎo)致對硬盤IO資源的大量占用,也使得無法快速實現(xiàn)對郵箱的索引的技術(shù)問題,進(jìn)一步的,還能解決郵箱服務(wù)器對于海量郵件的存儲成本過高造成的存儲資源大量被占用的技術(shù)問題。
[0018]為解決上述技術(shù)問題,本申請實施例提供了一種郵件索引建立方法,該方法包括:
[0019]對待建立索引的當(dāng)前郵件進(jìn)行分詞得到所述當(dāng)前郵件的關(guān)鍵詞;
[0020]依據(jù)所述當(dāng)前郵件的關(guān)鍵詞更新一級緩存中保存的一級倒排索引記錄;
[0021]判斷所述一級緩存中的一級倒排索引記錄的大小是否到達(dá)第一預(yù)設(shè)閾值,如果是,則將所述一級緩存中的所有一級倒排索引記錄讀取至二級緩存文件中;
[0022]判斷當(dāng)前二級緩存文件的大小是否到達(dá)第二預(yù)設(shè)閾值,如果是,則依據(jù)路徑文件將所述二級緩存文件中的所有二級倒排索引記錄讀取至三級倒排索引文件,所述路徑文件保存關(guān)鍵詞與三級倒排索引文件對應(yīng)的映射關(guān)系。
[0023]可選的,所述將所述二級緩存文件中的所有二級倒排索引記錄讀取至三級倒排索引文件之后,還包括:
[0024]判斷所述三級倒排索引文件的大小是否到達(dá)第三預(yù)設(shè)閾值,如果是,則將所述三級倒排索引文件分裂為兩個倒排索引子文件;
[0025]依據(jù)分裂后的兩個倒排索弓I子文件更新路徑文件。
[0026]可選的,所述將所述二級緩存文件中的所有二級倒排索引記錄讀取至三級倒排索弓I文件,包括:
[0027]將所述二級緩存文件中的所有二級倒排索引記錄讀取至內(nèi)存中;
[0028]依據(jù)路徑文件確定所述二級倒排索引記錄中的關(guān)鍵詞對應(yīng)的三級倒排索引文件;
[0029]將所述二級倒排索引記錄按照關(guān)鍵詞讀取至確定的三級倒排索引文件。
[0030]可選的,所述將所述二級緩存文件中的所有倒排索引記錄按照關(guān)鍵詞讀取至確定的三級倒排索引文件,具體為:
[0031]將所述二級緩存文件中的所有倒排索引記錄按照關(guān)鍵詞以追加方式讀取至確定的三級倒排索引文件。
[0032]可選的,所述三級倒排索引文件包括初始靜態(tài)壓縮文件和增量文件;則所述將所述二級倒排索引記錄按照關(guān)鍵詞讀取至確定的三級倒排索引文件,具體為:
[0033]將所述二級倒排索引記錄按照關(guān)鍵詞讀取至所述增量文件;
[0034]則所述將所述二級緩存文件中的所有倒排索引記錄讀取至三級倒排索引文件之后,還包括:
[0035]判斷所述增量文件是否超過增量閾值,如果是,則解壓所述初始靜態(tài)壓縮文件以得到解壓后的初始靜態(tài)文件;[0036]合并所述初始靜態(tài)文件和所述增加文件得到合并文件,并將合并文件進(jìn)行壓縮以生成當(dāng)前靜態(tài)壓縮文件。
[0037]—種郵件搜索方法,采用前述方法建立郵箱索引;該搜索方法包括:
[0038]獲取用戶提交的待搜索的關(guān)鍵詞;
[0039]依據(jù)路徑文件確定所述關(guān)鍵詞對應(yīng)的三級倒排索引文件;所述路徑文件保存關(guān)鍵詞與三級倒排索引文件對應(yīng)的映射關(guān)系;
[0040]從所述三級倒排索引文件中獲取所述關(guān)鍵詞所在的第一郵件集合,從一級緩存中獲取所述關(guān)鍵詞所在的第二郵件集合,以及,從所述二級緩存文件中獲取所述關(guān)鍵詞所在的第三郵件集合;
[0041]合并所述第一郵件集合、第二郵件集合和第三郵件集合以獲得搜索結(jié)果。
[0042]一種郵件索引建立系統(tǒng),包括:
[0043]分詞單元,用于對待建立索引的當(dāng)前郵件進(jìn)行分詞得到所述當(dāng)前郵件的關(guān)鍵詞;
[0044]更新一級緩存單元,用于依據(jù)所述當(dāng)前郵件的關(guān)鍵詞更新一級緩存中保存的一級倒排索引記錄;
[0045]第一判斷單元,用于判斷所述一級緩存中的一級倒排索引記錄的大小是否到達(dá)第一預(yù)設(shè)閾值;
[0046]第一讀取單元,用于在所述第一判斷單元的結(jié)果為是的情況下,將所述一級緩存中的所有一級倒排索引記錄讀取至二級緩存文件中;
[0047]第二判斷單元,用于判斷當(dāng)前二級緩存文件的大小是否到達(dá)第二預(yù)設(shè)閾值;
[0048]第二讀取單元,用于在所述第二判斷單元的結(jié)果為是的情況下,依據(jù)路徑文件將所述二級緩存文件中的所有二級倒排索引記錄讀取至三級倒排索引文件,所述路徑文件保存關(guān)鍵詞與三級倒排索引文件對應(yīng)的映射關(guān)系。
[0049]可選的,還包括:
[0050]第三判斷單元,用于判斷所述三級倒排索引文件的大小是否到達(dá)第三預(yù)設(shè)閾值;
[0051]拆分單元,用于在所述第三判斷單元的結(jié)果為是的情況下,將所述三級倒排索引文件分裂為兩個倒排索引子文件;
[0052]更新路徑單元,用于依據(jù)分裂后的兩個倒排索弓I子文件更新路徑文件。
[0053]可選的,所述第二讀取單元包括:
[0054]第一讀取模塊,用于將所述二級緩存文件中的所有二級倒排索引記錄讀取至內(nèi)存中;
[0055]確定模塊,用于依據(jù)路徑文件確定所述二級倒排索引記錄中的關(guān)鍵詞對應(yīng)的三級倒排索引文件;
[0056]第二讀取模塊,用于將所述二級倒排索引記錄按照關(guān)鍵詞讀取至確定的三級倒排索引文件。
[0057]可選的,所述第二讀取模塊具體用于:
[0058]將所述二級緩存文件中的所有倒排索引記錄按照關(guān)鍵詞以追加方式讀取至確定的三級倒排索引文件。
[0059]可選的,所述三級倒排索引文件包括初始靜態(tài)壓縮文件和增量文件;則所述第二讀取模塊具體用于:[0060]將所述二級倒排索引記錄按照關(guān)鍵詞讀取至所述增量文件;
[0061]則所述裝置還包括:
[0062]第四判斷單元,用于判斷所述增量文件是否超過增量閾值;
[0063]解壓單元,用于在所述第四判斷單元的結(jié)果為是的情況下,解壓所述初始靜態(tài)壓縮文件以得到解壓后的初始靜態(tài)文件;
[0064]合并單元,用于合并所述初始靜態(tài)文件和所述增加文件得到合并文件;
[0065]壓縮單元,用于將合并文件進(jìn)行壓縮以生成當(dāng)前靜態(tài)壓縮文件。
[0066]一種郵件搜索系統(tǒng),包括:前述的郵件索引建立系統(tǒng);還包括:
[0067]關(guān)鍵詞獲取單元,用于獲取用戶提交的待搜索的關(guān)鍵詞;
[0068]確定單元,用于依據(jù)路徑文件確定所述關(guān)鍵詞對應(yīng)的三級倒排索引文件;所述路徑文件保存關(guān)鍵詞與三級倒排索引文件對應(yīng)的映射關(guān)系;
[0069]第一郵件集合獲取單元,用于從所述三級倒排索引文件中獲取所述關(guān)鍵詞所在的第一郵件集合;
[0070]第二郵件集合獲取單元,用于從一級緩存中獲取所述關(guān)鍵詞所在的第二郵件集合;
[0071]第三郵件集合獲取單元,用于從所述二級緩存文件中獲取所述關(guān)鍵詞所在的第三郵件集合;
[0072]搜索結(jié)果獲取單元,用于合并所述第一郵件集合、第二郵件集合和第三郵件集合以獲得搜索結(jié)果。
[0073]從上述的技術(shù)方案可以看出,本申請實施例中公開的郵件索引建立方法,因為采用一級緩存、二級緩存文件和三級倒排索引文件的方式,對郵件建立的倒排索引記錄可以先保存至一級緩存中,在一級緩存達(dá)到第一預(yù)設(shè)閾值時,再將一級緩存中的一級倒排索引記錄一次性全部轉(zhuǎn)移至二級緩存文件中,并在二級緩存文件達(dá)到第二預(yù)設(shè)閾值時,再將其中的二級倒排索引記錄一次性全部轉(zhuǎn)移至三級倒排索引文件中,這樣就能避免因為郵件的倒排索引記錄過多而導(dǎo)致的對硬盤的寫入次數(shù)過多的現(xiàn)象,從而使得建立郵件索引的過程中增加倒排索引記錄的寫入速度,從而不僅提升了郵件索引的建立速度,也能減少對磁盤的寫入次數(shù)過多而造成的沖擊,就提升了磁盤的IO性能。
[0074]進(jìn)一步的,本申請實施例中的郵件索引有一部分是存在一級緩存即是內(nèi)存中的,因此硬盤上就不會存儲全部的郵件索引,因此,頻繁的插入新郵件時,由于緩沖在內(nèi)存里就不會對磁盤的寫入造成過大的沖擊,并且可以通過提高最新數(shù)據(jù)的速度來達(dá)到搜索實時性的目的。
[0075]對三級倒排索引文件也設(shè)置了第三預(yù)設(shè)閾值,當(dāng)三級倒排索引文件的大小達(dá)到第三預(yù)設(shè)閾值的時候,就將其分裂為兩個倒排索引子文件,并且該倒排索引子文件也要保證不大于第三預(yù)設(shè)閾值,通過這種方式,就可以保證每一個三級倒排索引文件的大小不會過大,進(jìn)而能夠保證對于郵件索引的讀取速度。
[0076]將三級倒排索引文件分為壓縮的初始靜態(tài)文件,以及增量文件,則可以在實現(xiàn)提升郵件索引的建立速度,也減少對磁盤的寫入次數(shù)過多而造成的沖擊,提升磁盤的IO性能的同時,也能夠進(jìn)一步的節(jié)省三級倒排索弓I文件的存儲資源。
[0077]當(dāng)然,實施本申請的任一產(chǎn)品并不一定需要同時達(dá)到以上所述的所有優(yōu)點。【專利附圖】
【附圖說明】
[0078]為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請中記載的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0079]圖1為本申請郵件索引建立方法實施例1的流程圖;
[0080]圖2本申請方法實施例1中步驟103的流程圖;
[0081]圖3為本申請郵件索引建立方法實施例2的流程圖;
[0082]圖4為本申請郵件索引建立方法實施例3的流程圖;
[0083]圖5為本申請郵件搜索方法實施例的流程圖;
[0084]圖6為本申請郵件索引建立系統(tǒng)實施例1的結(jié)構(gòu)示意圖;
[0085]圖7為本申請郵件索引建立系統(tǒng)實施例1中第二獲取單元606的結(jié)構(gòu)示意圖;
[0086]圖8為本申請郵件索引建立系統(tǒng)實施例2的結(jié)構(gòu)示意圖;
[0087]圖9為本申請郵件索引建立系統(tǒng)實施例3的結(jié)構(gòu)示意圖;
[0088]圖10為本申請郵件搜索系統(tǒng)實施例的結(jié)構(gòu)示意圖。
【具體實施方式】
[0089]為了使本【技術(shù)領(lǐng)域】的人員更好地理解本申請方案,下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├绢I(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護(hù)的范圍。
[0090]本申請可用于眾多通用或?qū)S玫挠嬎阆到y(tǒng)環(huán)境或配置中。例如:個人計算機(jī)、服務(wù)器計算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消費電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機(jī)、大型計算機(jī)、包括以上任何系統(tǒng)或設(shè)備的分布式計算環(huán)境等等。
[0091]本申請可以在由計算機(jī)執(zhí)行的計算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計環(huán)境中實踐本申請,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設(shè)備在內(nèi)的本地和遠(yuǎn)程計算機(jī)存儲介質(zhì)中。
[0092]本申請的主要思想之一可以包括,采用一級緩存、二級緩存文件和三級倒排索引文件的方式,其中,一級緩存設(shè)置在內(nèi)存中,而二級緩存文件和三級倒排索引文件設(shè)置在硬盤上,而對郵件建立的倒排索引記錄可以先保存至一級緩存中,在一級緩存達(dá)到第一預(yù)設(shè)閾值時,再將一級緩存中的一級倒排索引記錄一次性全部轉(zhuǎn)移至二級緩存文件中,并在二級緩存文件達(dá)到第二預(yù)設(shè)閾值時,再將其中的二級倒排索引記錄一次性全部轉(zhuǎn)移至三級倒排索引文件中。這種建立郵件索引的過程可以減少對硬盤的讀寫次數(shù),進(jìn)而提升硬盤的IO性能。
[0093]參見圖1,示出了本申請的一種郵件索引建立方法實施例1的流程圖,本實施例可以包括以下步驟:
[0094]步驟101:對待建立索引的當(dāng)前郵件進(jìn)行分詞得到所述當(dāng)前郵件的關(guān)鍵詞。
[0095]本申請實施例在實施時,對于需要建立索引的當(dāng)前郵件進(jìn)行分詞可以得到當(dāng)前郵件的關(guān)鍵詞,在實際應(yīng)用中,如果需要只對郵件正文建立索引,則本步驟可以只對郵件正文進(jìn)行分詞,而如果郵件主題也需要作為建立索引的依據(jù),則本步驟就需要對郵件正文和郵件主題都進(jìn)行分詞以得到郵件的關(guān)鍵詞。本領(lǐng)域技術(shù)人員可以根據(jù)實際需求選擇分詞工具實現(xiàn)本步驟。
[0096]可以理解的是,用戶每接收到一封新郵件,都可以對該新郵件執(zhí)行本申請實施例公開的郵件索引建立方法。
[0097]步驟102:依據(jù)所述當(dāng)前郵件的關(guān)鍵詞更新一級緩存中保存的一級倒排索引記錄。
[0098]在對當(dāng)前郵件進(jìn)行分詞之后,生成關(guān)鍵詞與郵件對應(yīng)的倒排索引記錄,例如假設(shè)當(dāng)前郵件的標(biāo)識為“doc5”,而該當(dāng)前郵件有兩個關(guān)鍵詞,分別為“keywordl”和“keyword5”,則生成如下所示的倒排索引記錄:
[0099]keywordl:doc5,
[0100]keyword5:doc5 ;
[0101]需要說明的是,在本申請實施例中,在內(nèi)存中設(shè)置一級緩存來保存初始倒排索引記錄,即是當(dāng)前郵件最先生成的倒排索引記錄一開始只存在內(nèi)存中的一級緩存里,其中一級緩存中的倒排索引記錄的“key”是各個關(guān)鍵詞(keyword) ,“value”為郵件的標(biāo)識。假設(shè)在本實施例中,一級緩沖的初始倒排索引記錄為:
[0102]keywordl:docl,doc2,doc3,
[0103]keyword2:doc 1,doc4 ;
[0104]那么依據(jù)當(dāng)前郵件新生成的倒排索引記錄更新一級緩存中的初始倒排索引記錄之后,更新后的倒排索引記錄如下所示:
[0105]keywordl:docl, doc2, doc3, doc5,
[0106]keyword2:docl, doc4,
[0107]keyword5:doc5。
[0108]步驟103:判斷所述一級緩存中一級倒排索引記錄的大小是否到達(dá)第一預(yù)設(shè)閾值,如果是,則進(jìn)入步驟104,如果否,則進(jìn)入步驟107。
[0109]在本申請實施例中,設(shè)置兩級緩存來實現(xiàn)對硬盤10操作的次數(shù)。其中,一級緩存設(shè)置在內(nèi)存中,即是內(nèi)存方式的倒排索引記錄,二級緩存文件則設(shè)置在硬盤上。每一次對新郵件進(jìn)行分詞得到倒排索引記錄之后,先寫入該一級緩存中。當(dāng)內(nèi)存中的該一級緩存達(dá)到設(shè)置的第一預(yù)設(shè)閥值,例如2M時再將一級緩存中的倒排索引記錄全部寫入二級緩沖文件。
[0110]而可以理解的是,當(dāng)一級緩存的大小沒有到達(dá)第一預(yù)設(shè)閾值,則該一級緩存中對于當(dāng)前郵件的倒排索引記錄的寫入操作成功,即是已經(jīng)將當(dāng)前郵件的倒排索引記錄保存至一級緩存中,后續(xù)用戶進(jìn)行搜索時如果該當(dāng)前郵件符合搜索要求,就可以從一級緩存中搜索到該當(dāng)前郵件,則結(jié)束當(dāng)前郵件的索引建立流程。
[0111]步驟104:將所述一級緩存中的所有一級倒排索引記錄讀取至二級緩存文件中。
[0112]如果一級緩存的大小已經(jīng)達(dá)到第一預(yù)設(shè)閾值,則將一級緩存中的所有一級倒排索引記錄讀取至二級緩存文件中,具體的合并方式可以參考步驟102,在此不再贅述。
[0113]步驟105:判斷當(dāng)前二級緩存文件的大小是否到達(dá)第二預(yù)設(shè)閾值,如果是,則進(jìn)入步驟106,如果否,則進(jìn)入步驟107。
[0114]在本申請實施例中,也同樣為二級緩存文件設(shè)置一個閾值大小(第二預(yù)設(shè)閾值),以實現(xiàn)在寫入一級緩存中的所有一級倒排索引記錄的當(dāng)前二級緩沖文件達(dá)到設(shè)置的閥值時,可以將二級緩存文件中的所有二級倒排索引記錄寫入至三級倒排索引文件。
[0115]而可以理解的是,當(dāng)二級緩存文件的大小沒有到達(dá)第一預(yù)設(shè)閾值,則該二級緩存文件中對于當(dāng)前郵件的倒排索引記錄的寫入操作成功,即是已經(jīng)將當(dāng)前郵件的倒排索引記錄保存至二級緩存文件中,后續(xù)用戶進(jìn)行搜索時如果該當(dāng)前郵件符合搜索要求,就可以從二級緩存文件中搜索到該當(dāng)前郵件,則結(jié)束當(dāng)前郵件的索引建立流程。
[0116]需要說明的是,在本申請實施例中,二級緩沖文件可以避免因為內(nèi)存中的一級緩存被寫滿后,將其中的倒排索引記錄直接寫入各個關(guān)鍵詞所屬的三級倒排索引文件時需要同時寫入多個三級倒排索引文件的現(xiàn)象。例如,內(nèi)存的一級緩存中有10條倒排索引記錄,該10個倒排索引記錄中的10個關(guān)鍵詞分別屬于5個三級倒排索引文件,此時如果直接將一級緩存中的倒排索引記錄直接寫入三級倒排索引文件,則必須同時對5個三級倒排索引文件執(zhí)行寫入操作。而在本申請實施例中,二級緩存文件存在的情況下,只需要將該10條倒排索引記錄寫入一個二級緩存文件即可。而當(dāng)該二級緩存文件增加到一定閥值(例如4M)的時候,再對二級緩存文件中的二級倒排索引進(jìn)行一次性的歸類,即是寫入10個關(guān)鍵詞各自所屬的三級倒排索引文件,這樣就可以大大減少對于硬盤上的文件的寫入次數(shù)。
[0117]步驟106:依據(jù)路徑文件將所述二級緩存文件中的所有二級倒排索引記錄讀取至三級倒排索引文件,所述路徑文件保存關(guān)鍵詞與三級倒排索引文件對應(yīng)的映射關(guān)系。
[0118]在本申請實施例中,為了記錄關(guān)鍵詞與三級倒排索引文件的映射關(guān)系,即是哪個關(guān)鍵詞在哪個三級倒排索引文件中保存,則可以產(chǎn)生一個路徑文件來記錄關(guān)鍵詞到三級倒排索引文件的映射關(guān)系。其中,路徑文件中的記錄示例如下:
[0119]keywordl ?keyword3:/xx/ 存放的文件名 I
[0120]keyword2 ?.keywordx:/xx/ 存放的文件名 2
[0121]......[0122]keywordn ?keywordm:/xx/ 存放的文件名
[0123]當(dāng)設(shè)置路徑文件之后,后續(xù)在郵箱檢索的時候,就可以先從路徑文件中記錄的映射關(guān)系定位關(guān)鍵詞所在的三級倒排索引文件,然后再讀取該三級倒排索引文件就可以知道包括關(guān)鍵詞的郵件有哪些。因此,本申請實施例中的;路徑文件實際上定義了關(guān)鍵詞到三級倒排索引文件的路徑。
[0124]在實際應(yīng)用中,步驟106具體可以包括:
[0125]步驟201:將所述二級緩存文件中的所有二級倒排索引記錄讀取至內(nèi)存中;
[0126]首先,可以先將該二級緩存文件的所有二級倒排索引記錄讀取到內(nèi)存中;
[0127]步驟202:依據(jù)路徑文件確定所述二級倒排索引記錄中的關(guān)鍵詞對應(yīng)的三級倒排索引文件;
[0128]然后根據(jù)路徑文件描述的關(guān)鍵詞到三級倒排索引文件的路徑,確定二級倒排索引記錄中的關(guān)鍵詞對應(yīng)的三級倒排索引文件;[0129]步驟203:將所述二級倒排索引記錄按照關(guān)鍵詞寫入確定的三級倒排索引文件。
[0130]最后將這些二級倒排索引記錄寫入已經(jīng)確定的各自所屬的三級倒排索引文件里。在往三級倒排索引文件中寫入二級倒排索引記錄時,可以將所述二級緩存文件中的所有倒排索引記錄按照關(guān)鍵詞以追加方式讀取至確定的三級倒排索引文件,采用追加方式對三級倒排索引文件進(jìn)行寫入操作,可以提高寫入速度。
[0131]當(dāng)達(dá)到閾值后,系統(tǒng)會讀取第2點提到的根節(jié)點文件。此時系統(tǒng)掃描緩沖文件的倒排記錄,讀取每行記錄的關(guān)鍵詞比如keywordl,然后根據(jù)根節(jié)點文件的信息得到keywordl這行記錄應(yīng)該在哪個倒排文件,于是將該行記錄追加到該文件里。
[0132]步驟107:結(jié)束當(dāng)前郵件的索引建立流程。
[0133]本申請實施例中,因為采用一級緩存、二級緩存文件和三級倒排索引文件的方式,對郵件建立的倒排索引記錄可以先保存至一級緩存中,在一級緩存達(dá)到第一預(yù)設(shè)閾值時,再將一級緩存中的一級倒排索引記錄一次性全部轉(zhuǎn)移至二級緩存文件中,并在二級緩存文件達(dá)到第二預(yù)設(shè)閾值時,再將其中的二級倒排索引記錄一次性全部轉(zhuǎn)移至三級倒排索引文件中,這樣就能避免因為郵件的倒排索引記錄過多而導(dǎo)致的對硬盤的寫入次數(shù)過多的現(xiàn)象,從而使得建立郵件索引的過程中增加倒排索引記錄的寫入速度,從而不僅提升了郵件索引的建立速度,也能減少對磁盤的寫入次數(shù)過多而造成的沖擊,就提升了磁盤的IO性倉泛。
[0134]進(jìn)一步的,本申請實施例中的郵件索引有一部分是存在一級緩存即是內(nèi)存中的,因此硬盤上就不會存儲全部的郵件索引,因此,頻繁的插入新郵件時,由于緩沖在內(nèi)存里就不會對磁盤的寫入造成過大的沖擊,并且可以通過提高最新數(shù)據(jù)的速度來達(dá)到搜索實時性的目的。
[0135]參見圖3,示出了本申請的一種郵件索引建立方法實施例2的流程圖,在本實施例中,執(zhí)行完前述實施例1的所有步驟之后,本實施例還可以包括以下步驟:
[0136]步驟301:判斷三級倒排索引文件的大小是否到達(dá)第三預(yù)設(shè)閾值,如果是,則進(jìn)入步驟302。
[0137]在本實施例中,進(jìn)一步的包括對三級倒排索引文件的大小進(jìn)行閾值判斷的過程,其中,三級倒排索引文件的閾值雖然設(shè)置為第三預(yù)設(shè)閾值,但是其可以和二級緩存文件的第二預(yù)設(shè)閾值相同。
[0138]可以理解的是,在本實施例中,對于一級緩存、二級緩存文件和三級倒排索引文件的閾值大小的設(shè)置,可以從一定時間內(nèi)對磁盤的讀寫次數(shù),以及在用戶搜索郵箱時需要在多少時間內(nèi)返回用戶搜索結(jié)果等方面考慮設(shè)置,當(dāng)然,文件越小,就會使得讀寫速度更快,但是也會導(dǎo)致文件過多以及讀寫速度較慢的現(xiàn)象,因此,可以依據(jù)實際情況適應(yīng)性調(diào)整閾值的大小。
[0139]在本步驟中,如果三級倒排索引文件的大小沒有達(dá)到第三預(yù)設(shè)閾值,例如4M,則不會執(zhí)行后續(xù)步驟。
[0140]步驟302:將所述三級倒排索引文件分裂為兩個倒排索引子文件。
[0141]而如果三級倒排索引文件太大則可以根據(jù)關(guān)鍵詞對三級倒排索引文件進(jìn)行分裂。分裂的方式是按照關(guān)鍵詞的粒度進(jìn)行分裂,即是一個關(guān)鍵詞對應(yīng)的倒排索引記錄只會在一個倒排索引子文件里。這樣后續(xù)查詢一個關(guān)鍵詞所涉及的郵件時只會讀取一個三級倒排索引文件,而且這個三級倒排索引文件也不會超過4M,就能保證對于郵件索引的讀取速度。如下:
[0142]keywordl:docl, doc2, doc3........[0143]keyword2:doc I, doc3, doc4....[0144]keyword3:doc 1,doc6......[0145].......[0146]keywordn:docl, dock.......[0147]當(dāng)此文件太大的時候則會在虛線位置分裂成兩個倒排索引子文件。
[0148]可以理解的是,在本申請實施例中,在將三級倒排索引文件分裂為兩個倒排索引子文件時,需要參考兩個因素,一是關(guān)鍵詞粒度,即是保證一個關(guān)鍵詞對應(yīng)的倒排索引記錄一定存在一個倒排索引子文件中,而是需要考慮兩個倒排索引子文件的大小應(yīng)該盡量接近,這樣才能盡量減少后續(xù)對于倒排索引子文件進(jìn)行分裂的次數(shù)。
[0149]步驟106:依據(jù)分裂后的兩個倒排索引子文件更新路徑文件。
[0150]因為超過第三預(yù)設(shè)閾值的三級倒排索引文件分裂為兩個倒排索引子文件,那么,原三級倒排索引文件中的各個關(guān)鍵詞所對應(yīng)的倒排索引記錄也發(fā)生了變化,因此需要按照分裂后的倒排索引子文件更新路徑文件。對路徑文件更新完畢后可以刪除掉原三級倒排索引文件。
[0151]本實施例與實施例1不同之處在于,對三級倒排索引文件也設(shè)置了第三預(yù)設(shè)閾值,當(dāng)三級倒排索引文件的大小達(dá)到第三預(yù)設(shè)閾值的時候,就將其分裂為兩個倒排索引子文件,并且該倒排索引子文件也要保證不大于第三預(yù)設(shè)閾值,通過這種方式,就可以保證每一個三級倒排索引文件的大小不會過大,進(jìn)而能夠保證對于郵件索引的讀取速度。
[0152]參見圖4,示出了本申請的一種郵件索引建立方法實施例3的流程圖,本實施例可以包括以下步驟:
[0153]步驟401:對待建立索引的當(dāng)前郵件進(jìn)行分詞得到所述當(dāng)前郵件的關(guān)鍵詞。
[0154]步驟402:依據(jù)所述當(dāng)前郵件的關(guān)鍵詞更新一級緩存中保存的一級倒排索引記錄。
[0155]步驟403:判斷存儲所述一級緩存的大小是否到達(dá)第一預(yù)設(shè)閾值,如果是,則進(jìn)入步驟404。
[0156]步驟404:將所述一級緩存中的所有一級倒排索引記錄讀取至二級緩存文件中。
[0157]步驟405:判斷當(dāng)前二級緩存文件的大小是否到達(dá)第二預(yù)設(shè)閾值,如果是,則進(jìn)入步驟406。
[0158]步驟406:將所述二級緩存文件中的所有二級倒排索引記錄讀取至內(nèi)存中。
[0159]步驟407:依據(jù)路徑文件確定所述二級倒排索引記錄中的關(guān)鍵詞對應(yīng)的三級倒排索引文件。
[0160]步驟401~步驟407可以參考實施例1中的介紹,在此不再贅述。
[0161]步驟408:將所述二級倒排索引記錄按照關(guān)鍵詞讀取至確定的三級倒排索引文件中的增量文件。 [0162]本實施例與實施例1和實施例2的不同之處在于,所述三級倒排索引文件設(shè)置為兩個部分,即是初始靜態(tài)壓縮文件和增量文件,其中,初始靜態(tài)壓縮文件保存的是壓縮后的倒排索引記錄,而增量文件保存的沒有進(jìn)行壓縮的倒排索引記錄。其中,當(dāng)有新郵件的倒排索引記錄生成的時候,可以將該新生的倒排索引記錄寫入該增量文件。
[0163]步驟409:判斷所述增量文件是否超過增量閾值,如果是,則進(jìn)入步驟410。
[0164]在本實施例中,對增量文件的閾值也可以進(jìn)行設(shè)置,例如增量文件也不大于4M,當(dāng)增量文件達(dá)到預(yù)設(shè)的增量閥值時,就可以再將增量文件保存的內(nèi)容進(jìn)行壓縮,以減小三級倒排索引文件的大小及其所占用的硬盤存儲空間。
[0165]步驟410:解壓所述初始靜態(tài)壓縮文件以得到解壓后的初始靜態(tài)文件。
[0166]如果增量文件的大小超過增量閾值,則先讀取初始靜態(tài)壓縮文件的內(nèi)容進(jìn)行解壓,以得到?jīng)]有壓縮的初始靜態(tài)文件。
[0167]步驟411:合并所述初始靜態(tài)文件和所述增量文件得到合并文件。
[0168]在將初始靜態(tài)文件和增量文件進(jìn)行合并得到合并文件。
[0169]步驟412:將合并文件進(jìn)行壓縮以生成當(dāng)前靜態(tài)壓縮文件。
[0170]最后將合并文件再進(jìn)行壓縮,生成當(dāng)前的靜態(tài)壓縮文件,同時清空增量文件中原來保存的內(nèi)容。這樣做的目的是在用壓縮技術(shù)降低三級倒排索引文件存儲成本的同時,節(jié)約頻繁寫入數(shù)據(jù)時解壓和壓縮的計算開銷和磁盤寫入開銷。
[0171]本實施例與實施例2的不同之處在于,將三級倒排索引文件分為壓縮的初始靜態(tài)文件,以及增量文件,則可以在實現(xiàn)提升郵件索引的建立速度,也減少對磁盤的寫入次數(shù)過多而造成的沖擊,提升磁盤的IO性能的同時,也能夠進(jìn)一步的節(jié)省三級倒排索引文件的存儲資源。
[0172]參見圖5,示出了本申請的一種郵件搜索方法實施例的流程圖,本實施例需要先采用前述郵件索引建立方法的實施例1、實施例2和實施例3來建立用戶的郵件索引,則在郵件索引建立之后,本實施例可以包括以下步驟:
[0173]步驟501:獲取用戶提交的待搜索的關(guān)鍵詞。
[0174]在用戶搜索郵件時,先接收用戶提交的待搜索的關(guān)鍵詞。
[0175]步驟502:依據(jù)路徑文件確定所述關(guān)鍵詞對應(yīng)的三級倒排索引文件,所述路徑文件保存關(guān)鍵詞與三級倒排索引文件對應(yīng)的映射關(guān)系。
[0176]具體在實現(xiàn)時,可以根據(jù)路徑文件確定關(guān)鍵詞對應(yīng)的三級倒排索引文件,即是包括待搜索的關(guān)鍵詞的三級倒排索引文件,再將該三級倒排索引文件載入到內(nèi)存中的二叉樹數(shù)據(jù)結(jié)構(gòu)中。
[0177]步驟503:從所述三級倒排索引文件中獲取所述關(guān)鍵詞所在的第一郵件集合。
[0178]再從內(nèi)存中的二叉樹數(shù)據(jù)解雇中檢索出該待搜索的關(guān)鍵詞所在的郵件,將這些郵件作為第一郵件集合。
[0179]步驟504:從一級緩存中獲取所述關(guān)鍵詞所在的第二郵件集合。
[0180]因為在本申請實施例中,一級緩存中也可能存在一部分包括該關(guān)鍵詞的郵件,這部分郵件在一級緩存未達(dá)到第一預(yù)設(shè)閾值的情況下,還未被讀取至二級緩存文件中,因此需要再從一級緩存中檢索到這些郵件作為第二郵件集合。
[0181]步驟505:從所述二級緩存文件中獲取所述關(guān)鍵詞所在的第三郵件集合。
[0182]同時在本申請實施例中,二級緩存文件中也可能存在一部分包括該關(guān)鍵詞的郵件,這部分郵件在二級緩存文件未達(dá)到第二預(yù)設(shè)閾值的情況下,還未被讀取至三級倒排索引文件中,因此需要再從二級緩存文件中檢索到這些郵件作為第三郵件集合。
[0183]步驟506:合并所述第一郵件集合、第二郵件集合和第三郵件集合以獲得搜索結(jié)果O
[0184]最后將分別檢索到的第一郵件集合、第二郵件集合和第三郵件集合合并之后的總和,作為用戶當(dāng)前關(guān)鍵詞的搜索結(jié)果。需要說明的是,其中步驟503~步驟505的步驟在實施時并不區(qū)分先后順序,先檢索到哪一個郵件集合都可以最終實現(xiàn)本申請。
[0185]在本實施例中,在檢索郵件時,根據(jù)用戶的待搜索關(guān)鍵詞分別從一級緩存、二級緩存文件和三級倒排索引文件中檢索郵件,并且一級緩存、二級緩存文件和三級倒排索引文件的大小都不會超過各自的預(yù)設(shè)閾值,這樣就可以通過對三者的分別檢索來減少對硬盤的讀寫次數(shù),提升郵件檢索的速度,也提升硬盤的IO性能。
[0186]通過以上的方法實施例的描述,所屬領(lǐng)域的技術(shù)人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:只讀存儲器(ROM)、隨機(jī)存取存儲器(RAM)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
[0187]相應(yīng)于上面的方法實施例,本申請實施例還提供一種郵件索引建立系統(tǒng)。參見圖6,示出了一種郵件索引建立系統(tǒng)實施例1的結(jié)構(gòu)示意圖,可以包括:
[0188]分詞單元601,用于對待建立索引的當(dāng)前郵件進(jìn)行分詞得到所述當(dāng)前郵件的關(guān)鍵
ο`
[0189]更新一級緩存單元602,用于依據(jù)所述當(dāng)前郵件的關(guān)鍵詞更新一級緩存中保存的一級倒排索引記錄。
[0190]第一判斷單元603,用于判斷存儲所述一級緩存中一級倒排索引記錄的大小是否到達(dá)第一預(yù)設(shè)閾值。
[0191]第一讀取單元604,用于在所述第一判斷單元的結(jié)果為是的情況下,將所述一級緩存中的所有一級倒排索引記錄讀取至二級緩存文件中。
[0192]第二判斷單元605,用于判斷當(dāng)前二級緩存文件的大小是否到達(dá)第二預(yù)設(shè)閾值。
[0193]第二讀取單元606,用于在所述第二判斷單元的結(jié)果為是的情況下,依據(jù)路徑文件將所述二級緩存文件中的所有二級倒排索引記錄讀取至三級倒排索引文件,所述路徑文件保存關(guān)鍵詞與三級倒排索引文件對應(yīng)的映射關(guān)系。
[0194]參考圖7所示,在實際應(yīng)用中所述第二讀取單元606具體可以包括:
[0195]第一讀取模塊701,用于將所述二級緩存文件中的所有二級倒排索引記錄讀取至內(nèi)存中;
[0196]確定模塊702,用于依據(jù)路徑文件確定所述二級倒排索引記錄中的關(guān)鍵詞對應(yīng)的三級倒排索引文件;
[0197]第二讀取模塊703,用于將所述二級倒排索引記錄按照關(guān)鍵詞讀取至確定的三級倒排索引文件。
[0198]所述第二讀取模塊703具體可以用于:將所述二級緩存文件中的所有倒排索引記錄按照關(guān)鍵詞以追加方式讀取至確定的三級倒排索引文件。
[0199]本申請實施例中,因為采用一級緩存、二級緩存文件和三級倒排索引文件的方式,對郵件建立的倒排索引記錄可以先保存至一級緩存中,在一級緩存達(dá)到第一預(yù)設(shè)閾值時,再將一級緩存中的一級倒排索引記錄一次性全部轉(zhuǎn)移至二級緩存文件中,并在二級緩存文件達(dá)到第二預(yù)設(shè)閾值時,再將其中的二級倒排索引記錄一次性全部轉(zhuǎn)移至三級倒排索引文件中,這樣就能避免因為郵件的倒排索引記錄過多而導(dǎo)致的對硬盤的寫入次數(shù)過多的現(xiàn)象,從而使得建立郵件索引的過程中增加倒排索引記錄的寫入速度,從而不僅提升了郵件索引的建立速度,也能減少對磁盤的寫入次數(shù)過多而造成的沖擊,就提升了磁盤的IO性倉泛。
[0200]進(jìn)一步的,本申請實施例中的郵件索弓丨有一部分是存在一級緩存即是內(nèi)存中的,因此硬盤上就不會存儲全部的郵件索引,因此,頻繁的插入新郵件時,由于緩沖在內(nèi)存里就不會對磁盤的寫入造成過大的沖擊,并且可以通過提高最新數(shù)據(jù)的速度來達(dá)到搜索實時性的目的。
[0201]參見圖8,示出了一種郵件索引建立系統(tǒng)實施例2的結(jié)構(gòu)示意圖,除了圖7所示的郵件索引建立系統(tǒng)實施例1中的功能單元之外,所述郵件索引建立系統(tǒng)還可以包括:
[0202]第三判斷單元801,用于判斷三級倒排索引文件的大小是否到達(dá)第三預(yù)設(shè)閾值。
[0203]拆分單元802,用于在所述第三判斷單元的結(jié)果為是的情況下,將所述三級倒排索引文件分裂為兩個倒排索引子文件。
[0204]更新路徑單元803,用于依據(jù)分裂后的兩個倒排索引子文件更新路徑文件。
[0205]本實施例對三級倒排索引文件也設(shè)置了第三預(yù)設(shè)閾值,當(dāng)三級倒排索引文件的大小達(dá)到第三預(yù)設(shè)閾值的時候,就將其分裂為兩個倒排索引子文件,并且該倒排索引子文件也要保證不大于第三預(yù)設(shè)閾值,通過這種方式,就可以保證每一個三級倒排索引文件的大小不會過大,進(jìn)而能夠保證對于郵件索引的讀取速度。
`[0206]參見圖9,示出了本申請的一種郵件索引建立系統(tǒng)實施例3的結(jié)構(gòu)示意圖,可以包括:
[0207]分詞單元601,用于對待建立索引的當(dāng)前郵件進(jìn)行分詞得到所述當(dāng)前郵件的關(guān)鍵
ο
[0208]更新一級緩存單元602,用于依據(jù)所述當(dāng)前郵件的關(guān)鍵詞更新一級緩存中保存的一級倒排索引記錄。
[0209]第一判斷單元603,用于判斷存儲所述一級緩存中一級倒排索引記錄的大小是否到達(dá)第一預(yù)設(shè)閾值。
[0210]第一讀取單元604,用于在所述第一判斷單元的結(jié)果為是的情況下,將所述一級緩存中的所有一級倒排索引記錄讀取至二級緩存文件中。
[0211]第二判斷單元605,用于判斷所述二級緩存文件的大小是否到達(dá)第二預(yù)設(shè)閾值。
[0212]第一讀取模塊701,用于將所述二級緩存文件中的所有二級倒排索引記錄讀取至內(nèi)存中。
[0213]確定模塊702,用于依據(jù)路徑文件確定所述二級倒排索引記錄中的關(guān)鍵詞對應(yīng)的三級倒排索引文件。
[0214]在本實施例中,所述三級倒排索引文件具體可以包括初始靜態(tài)壓縮文件和增量文件。
[0215]第二讀取模塊703具體可以用于:將所述二級倒排索引記錄按照關(guān)鍵詞讀取至所述增量文件。
[0216]第四判斷單元901,用于判斷所述增量文件是否超過增量閾值。
[0217]解壓單元902,用于在所述第四判斷單元的結(jié)果為是的情況下,解壓所述初始靜態(tài)壓縮文件以得到解壓后的初始靜態(tài)文件。
[0218]合并單元903,用于合并所述初始靜態(tài)文件和所述增加文件得到合并文件。
[0219]壓縮單元904,用于將合并文件進(jìn)行壓縮以生成當(dāng)前靜態(tài)壓縮文件。
[0220]在本實施例中,將三級倒排索引文件分為壓縮的初始靜態(tài)文件,以及增量文件,則可以在實現(xiàn)提升郵件索引的建立速度,也減少對磁盤的寫入次數(shù)過多而造成的沖擊,提升磁盤的IO性能的同時,也能夠進(jìn)一步的節(jié)省三級倒排索引文件的存儲資源。
[0221]本申請還提供一種郵件搜索系統(tǒng),參考圖10所示,為郵件搜索系統(tǒng)實施例的結(jié)構(gòu)示意圖,該郵件搜索系統(tǒng)除了包括前述的郵件索引建立系統(tǒng)實施例1、實施例2或?qū)嵤├?之外,還可以包括:
[0222]關(guān)鍵詞獲取單元1001,用于獲取用戶提交的待搜索的關(guān)鍵詞;
[0223]確定單元1002,用于依據(jù)路徑文件確定所述關(guān)鍵詞對應(yīng)的三級倒排索引文件;所述路徑文件保存關(guān)鍵詞與三級倒排索引文件對應(yīng)的映射關(guān)系;
[0224]第一郵件集合獲取單元1003,用于從所述三級倒排索引文件中獲取所述關(guān)鍵詞所在的第一郵件集合;
[0225]第二郵件集合獲取單元1004,用于從一級緩存中獲取所述關(guān)鍵詞所在的第二郵件集合;
[0226]第三郵件集合獲取單元1005,用于從所述二級緩存文件中獲取所述關(guān)鍵詞所在的第三郵件集合;
[0227]搜索結(jié)果獲取單元1006,用于合并所述第一郵件集合、第二郵件集合和第三郵件集合以獲得搜索結(jié)果。
[0228]在本實施例中,在檢索郵件時,根據(jù)用戶的待搜索關(guān)鍵詞分別從一級緩存、二級緩存文件和三級倒排索引文件中檢索郵件,并且一級緩存、二級緩存文件和三級倒排索引文件的大小都不會超過各自的預(yù)設(shè)閾值,這樣就可以通過對三者的分別檢索來減少對硬盤的讀寫次數(shù),提升郵件檢索的速度,也提升硬盤的IO性能。
[0229]需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有
的要素。在沒有更多限制的情況下,由語句“包括一個......”限定的要素,并不排除在包
括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
[0230]對于系統(tǒng)實施例而言,由于其基本對應(yīng)于方法實施例,所以相關(guān)之處參見方法實施例的部分說明即可。以上所描述的系統(tǒng)實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
[0231]以上所述僅是本申請的【具體實施方式】,應(yīng)當(dāng)指出,對于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本申請原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本申請的保護(hù)范圍。
【權(quán)利要求】
1.一種郵件索引建立方法,其特征在于,包括: 對待建立索引的當(dāng)前郵件進(jìn)行分詞得到所述當(dāng)前郵件的關(guān)鍵詞; 依據(jù)所述當(dāng)前郵件的關(guān)鍵詞更新一級緩存中保存的一級倒排索引記錄; 判斷所述一級緩存中的一級倒排索引記錄的大小是否到達(dá)第一預(yù)設(shè)閾值,如果是,則將所述一級緩存中的所有一級倒排索引記錄讀取至二級緩存文件中; 判斷當(dāng)前二級緩存文件的大小是否到達(dá)第二預(yù)設(shè)閾值,如果是,則依據(jù)路徑文件將所述二級緩存文件中的所有二級倒排索引記錄讀取至三級倒排索引文件,所述路徑文件保存關(guān)鍵詞與三級倒排索引文件對應(yīng)的映射關(guān)系。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將所述二級緩存文件中的所有二級倒排索引記錄讀取至三級倒排索引文件之后,還包括: 判斷所述三級倒排索引文件的大小是否到達(dá)第三預(yù)設(shè)閾值,如果是,則將所述三級倒排索引文件分裂為兩個倒排索引子文件; 依據(jù)分裂后的兩個倒排索引子文件更新路徑文件。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將所述二級緩存文件中的所有二級倒排索引記錄讀取至三級倒排索引文件,包括: 將所述二級緩存文件中的所有二級倒排索引記錄讀取至內(nèi)存中; 依據(jù)路徑文件確定所述二級倒排索引記錄中的關(guān)鍵詞對應(yīng)的三級倒排索引文件; 將所述二級倒排索引記錄按照關(guān)鍵詞讀取至確定的三級倒排索引文件。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述將所述二級緩存文件中的所有倒排索引記錄按照關(guān)鍵詞讀取至確定的三級倒排索引文件,具體為: 將所述二級緩存文件中的所有倒排索引記錄按照關(guān)鍵詞以追加方式讀取至確定的三級倒排索引文件。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述三級倒排索引文件包括初始靜態(tài)壓縮文件和增量文件;則所述將所述二級倒排索引記錄按照關(guān)鍵詞讀取至確定的三級倒排索引文件,具體為: 將所述二級倒排索引記錄按照關(guān)鍵詞讀取至所述增量文件; 則所述將所述二級緩存文件中的所有倒排索引記錄讀取至三級倒排索引文件之后,還包括: 判斷所述增量文件是否超過增量閾值,如果是,則解壓所述初始靜態(tài)壓縮文件以得到解壓后的初始靜態(tài)文件; 合并所述初始靜態(tài)文件和所述增加文件得到合并文件,并將合并文件進(jìn)行壓縮以生成當(dāng)前靜態(tài)壓縮文件。
6.—種郵件搜索方法,其特征在于,采用如權(quán)利要求1所述的方法建立郵箱索引;該搜索方法包括: 獲取用戶提交的待搜索的關(guān)鍵詞; 依據(jù)路徑文件確定所述關(guān)鍵詞對應(yīng)的三級倒排索引文件;所述路徑文件保存關(guān)鍵詞與三級倒排索引文件對應(yīng)的映射關(guān)系; 從所述三級倒排索引文件中獲取所述關(guān)鍵詞所在的第一郵件集合,從一級緩存中獲取所述關(guān)鍵詞所在的第二郵件集合, 以及,從所述二級緩存文件中獲取所述關(guān)鍵詞所在的第三郵件集合; 合并所述第一郵件集合、第二郵件集合和第三郵件集合以獲得搜索結(jié)果。
7.一種郵件索引建立系統(tǒng),其特征在于,包括: 分詞單元,用于對待建立索引的當(dāng)前郵件進(jìn)行分詞得到所述當(dāng)前郵件的關(guān)鍵詞; 更新一級緩存單元,用于依據(jù)所述當(dāng)前郵件的關(guān)鍵詞更新一級緩存中保存的一級倒排索引記錄; 第一判斷單元,用于判斷所述一級緩存中的一級倒排索引記錄的大小是否到達(dá)第一預(yù)設(shè)閾值; 第一讀取單元,用于在所述第一判斷單元的結(jié)果為是的情況下,將所述一級緩存中的所有一級倒排索引記錄讀取至二級緩存文件中; 第二判斷單元,用于判斷當(dāng)前二級緩存文件的大小是否到達(dá)第二預(yù)設(shè)閾值; 第二讀取單元,用于在所述第二判斷單元的結(jié)果為是的情況下,依據(jù)路徑文件將所述二級緩存文件中的所有二級倒排索引記錄讀取至三級倒排索引文件,所述路徑文件保存關(guān)鍵詞與三級倒排索引文件對應(yīng)的映射關(guān)系。
8.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,還包括: 第三判斷單元,用于判斷所述三級倒排索引文件的大小是否到達(dá)第三預(yù)設(shè)閾值; 拆分單元,用于在所述第三判斷單元的結(jié)果為是的情況下,將所述三級倒排索引文件分裂為兩個倒排索引子文件; 更新路徑單元,用于依據(jù)分裂后`的兩個倒排索引子文件更新路徑文件。
9.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述第二讀取單元包括: 第一讀取模塊,用于將所述二級緩存文件中的所有二級倒排索引記錄讀取至內(nèi)存中;確定模塊,用于依據(jù)路徑文件確定所述二級倒排索引記錄中的關(guān)鍵詞對應(yīng)的三級倒排索引文件; 第二讀取模塊,用于將所述二級倒排索引記錄按照關(guān)鍵詞讀取至確定的三級倒排索引文件。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述第二讀取模塊具體用于: 將所述二級緩存文件中的所有倒排索引記錄按照關(guān)鍵詞以追加方式讀取至確定的三級倒排索引文件。
11.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述三級倒排索引文件包括初始靜態(tài)壓縮文件和增量文件;則所述第二讀取模塊具體用于: 將所述二級倒排索引記錄按照關(guān)鍵詞讀取至所述增量文件; 則所述裝置還包括: 第四判斷單元,用于判斷所述增量文件是否超過增量閾值; 解壓單元,用于在所述第四判斷單元的結(jié)果為是的情況下,解壓所述初始靜態(tài)壓縮文件以得到解壓后的初始靜態(tài)文件; 合并單元,用于合并所述初始靜態(tài)文件和所述增加文件得到合并文件; 壓縮單元,用于將合并文件進(jìn)行壓縮以生成當(dāng)前靜態(tài)壓縮文件。
12.—種郵件搜索系統(tǒng),其特征在于,包括:如權(quán)利要求7所述的郵件索引建立系統(tǒng);還包括:關(guān)鍵詞獲取單元,用于獲取用戶提交的待搜索的關(guān)鍵詞; 確定單元,用于依據(jù)路徑文件確定所述關(guān)鍵詞對應(yīng)的三級倒排索引文件;所述路徑文件保存關(guān)鍵詞與三級倒排索引文件對應(yīng)的映射關(guān)系; 第一郵件集合獲取單元,用于從所述三級倒排索引文件中獲取所述關(guān)鍵詞所在的第一郵件集合; 第二郵件集合獲取單元,用于從一級緩存中獲取所述關(guān)鍵詞所在的第二郵件集合; 第三郵件集合獲取單元,用于從所述二級緩存文件中獲取所述關(guān)鍵詞所在的第三郵件集合; 搜索結(jié)果獲取單元,用于合并所述 第一郵件集合、第二郵件集合和第三郵件集合以獲得搜索結(jié)果。
【文檔編號】G06F17/30GK103678405SQ201210357269
【公開日】2014年3月26日 申請日期:2012年9月21日 優(yōu)先權(quán)日:2012年9月21日
【發(fā)明者】佘智勇 申請人:阿里巴巴集團(tuán)控股有限公司