本發(fā)明涉及數(shù)據(jù)檢索,具體地指一種基于哈希函數(shù)的高效層級(jí)索引構(gòu)建及檢索方法。
背景技術(shù):
在信息技術(shù)日益發(fā)達(dá)的今天,檢索技術(shù)成為了信息技術(shù)中極其重要的一個(gè)領(lǐng)域,對(duì)于信息系統(tǒng)的用戶(hù)而言,通過(guò)檢索技術(shù)快速定位和獲取目標(biāo)數(shù)據(jù)已經(jīng)成為信息系統(tǒng)日常使用中必不可少的環(huán)節(jié)。日常檢索技術(shù)在為人們帶來(lái)極大方便的同時(shí),也帶來(lái)了許多安全性威脅。在一些涉密單位的相關(guān)部門(mén)中,由于日常工作涉及的數(shù)據(jù)量非常巨大,必須使用檢索技術(shù)來(lái)快速獲取數(shù)據(jù),但是由于數(shù)據(jù)涉密,檢索過(guò)程的安全性成為一個(gè)備受關(guān)注的問(wèn)題。在信息安全形勢(shì)日益嚴(yán)峻的今天,如何對(duì)涉密數(shù)據(jù)進(jìn)行安全檢索將是數(shù)據(jù)存儲(chǔ)問(wèn)題中一個(gè)很重要的環(huán)節(jié),只有實(shí)現(xiàn)安全高效的數(shù)據(jù)檢索,才能保證海量數(shù)據(jù)的使用價(jià)值,使海量數(shù)據(jù)的存儲(chǔ)具有意義。
但是傳統(tǒng)的全文檢索結(jié)構(gòu)往往是基于明文的全文檢索,即對(duì)文檔數(shù)據(jù)構(gòu)建索引時(shí)僅僅直接按照明文關(guān)鍵詞構(gòu)建明文索引,在索引結(jié)構(gòu)中,系統(tǒng)不僅會(huì)保留對(duì)文檔數(shù)據(jù)進(jìn)行分詞得到的關(guān)鍵詞集合,同時(shí)還會(huì)保存與這些關(guān)鍵詞相關(guān)聯(lián)的位置信息,這一特點(diǎn)導(dǎo)致一旦系統(tǒng)的索引存儲(chǔ)區(qū)域遭受不明攻擊者的攻擊,攻擊者可以通過(guò)系統(tǒng)中存儲(chǔ)的索引數(shù)據(jù)通過(guò)統(tǒng)計(jì)方法還原成原始文檔數(shù)據(jù),傳統(tǒng)索引結(jié)構(gòu)存在的這一嚴(yán)重的安全問(wèn)題會(huì)導(dǎo)致存儲(chǔ)數(shù)據(jù)的用戶(hù)蒙受巨大的損失。另一方面,在傳統(tǒng)方法中,同樣存在著一些針對(duì)密文數(shù)據(jù)的全文檢索,對(duì)于密文數(shù)據(jù)的全文檢索由于將文檔數(shù)據(jù)和全文關(guān)鍵詞進(jìn)行了加密操作,因此其安全性相比于傳統(tǒng)的明文數(shù)據(jù)來(lái)說(shuō)安全性相對(duì)較高,一種傳統(tǒng)的密文全文檢索解決方式是對(duì)目前構(gòu)建的明文全文索引進(jìn)行加密處理,這種處理一般被分為兩個(gè)層次,即索引級(jí)加密處理和索引詞級(jí)加密處理。這兩種處理在檢索過(guò)程中仍需要對(duì)密文進(jìn)行解密,本質(zhì)上仍然是明文全文檢索,同樣存在著很大的安全隱患,這就需要一套更加安全合理的密文全文檢索系統(tǒng)來(lái)提供安全高效的密文全文檢索服務(wù)。
正是基于以上需求,本發(fā)明提出一種基于哈希函數(shù)的高效層級(jí)全文檢索方法。
樹(shù)形結(jié)構(gòu)數(shù)據(jù)這類(lèi)存儲(chǔ)方式非常便于面向檢索的索引結(jié)構(gòu),具有數(shù)據(jù)組織有序、檢索效率高等優(yōu)勢(shì)。而哈希函數(shù)具有單向性的特點(diǎn),即由哈希函數(shù)通過(guò)輸入得出輸出結(jié)果比較簡(jiǎn)單,而從哈希函數(shù)輸出結(jié)果逆推函數(shù)輸入?yún)s有著很大的難度,需要投入非常大的計(jì)算成本,因此,哈希函數(shù)具有較高的安全性本方法以哈希函數(shù)為基礎(chǔ),采用樹(shù)形結(jié)構(gòu)為主要數(shù)據(jù)結(jié)構(gòu)構(gòu)建全文檢索索引,不僅能夠保證索引效率受到的影響較少,同時(shí)也能夠提高索引的安全性。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明目的在于克服上述現(xiàn)有技術(shù)的不足而提供一種基于哈希函數(shù)的高效層級(jí)索引構(gòu)建及其檢索方法,該方法能夠?qū)崿F(xiàn)安全高效的密文全文檢索。
實(shí)現(xiàn)本發(fā)明目的采用的技術(shù)方案是一種基于哈希函數(shù)的高效層級(jí)索引構(gòu)建方法,該方法包括:
將待歸檔文檔di構(gòu)建成n維向量ti;
對(duì)待歸檔文檔di中的每個(gè)關(guān)鍵詞進(jìn)行哈希操作,得到代表各個(gè)關(guān)鍵詞的k個(gè)正整數(shù)的集合;
代表關(guān)鍵詞集合的k個(gè)正整數(shù)集合構(gòu)成最終表示待歸檔文檔di的n維向量tik;
將所述n維向量tik放入文檔集合索引矩陣t中,集合索引矩陣中第i行表示文檔di的索引信息,第j列表示文檔中存在哈希處理結(jié)果為j的關(guān)鍵詞。
此外,本發(fā)明還提供一種基于上述高效層級(jí)索引構(gòu)建的檢索方法,該方法包括:
將查詢(xún)請(qǐng)求中的查詢(xún)關(guān)鍵詞轉(zhuǎn)換為多個(gè)子關(guān)鍵詞的析取范式或合取范式;
將所述析取范式或合取范式構(gòu)建一個(gè)與文檔集合索引矩陣相同維度的n維向量tq,利用與索引構(gòu)建時(shí)相同的哈希算法對(duì)子關(guān)鍵詞集合進(jìn)行哈希操作,將子關(guān)鍵詞轉(zhuǎn)換為正整數(shù),并插入到集合z(z1,z2,…,zn)中,將tq的z1、z2、……、zn位分別置為1,表示當(dāng)前查詢(xún)請(qǐng)求含有某些特定關(guān)鍵詞,將tq與文檔索引矩陣進(jìn)行矩陣t乘法操作:
t’=t·tq
在t’中選擇所有不為0的行,記為t1,t2,…,tn行,表示含有當(dāng)前關(guān)鍵詞的文檔的索引向量,根據(jù)這些向量確認(rèn)所有含有當(dāng)前查詢(xún)關(guān)鍵詞的文檔dt{dt1,dt2,……,dtn},根據(jù)指針查找到目標(biāo)文檔dt的層次索引中,然后,系統(tǒng)會(huì)根據(jù)關(guān)鍵詞的哈希結(jié)果zq繼續(xù)逐段查找文檔的索引中各個(gè)段落的索引向量,判斷向量中dt1、dt2、……、dtn位是否為1,命中后再查找命中段落的逐句索引向量,同樣判斷向量中dt1、dt2、……、dtn位是否為1,最終命中含有查詢(xún)關(guān)鍵詞的目標(biāo)語(yǔ)句,完成查詢(xún)流程。
本發(fā)明采用的樹(shù)形結(jié)構(gòu)數(shù)據(jù)非常適合用于檢索數(shù)據(jù)的索引結(jié)構(gòu),由于其本身的結(jié)構(gòu)特點(diǎn),檢索時(shí)系統(tǒng)可以按照檢索要求查找,精確定位,具有數(shù)據(jù)組織有序、檢索效率高等優(yōu)勢(shì)。而哈希函數(shù)具有單向性的特點(diǎn),即由哈希函數(shù)通過(guò)輸入得出輸出結(jié)果比較簡(jiǎn)單,而從哈希函數(shù)輸出結(jié)果逆推函數(shù)輸入?yún)s有著很大的難度,需要投入非常大的計(jì)算成本,因此,哈希函數(shù)具有較高的安全性本方法以哈希函數(shù)為基礎(chǔ),采用樹(shù)形結(jié)構(gòu)為主要數(shù)據(jù)結(jié)構(gòu)構(gòu)建全文檢索索引,不僅能夠保證索引效率受到的影響較少,同時(shí)也能夠提高索引的安全性。
附圖說(shuō)明
圖1為本發(fā)明基于哈希函數(shù)的高效層級(jí)索引構(gòu)建及其檢索放方法的流程圖。
圖2為通過(guò)本發(fā)明基于哈希函數(shù)的高效層級(jí)索引構(gòu)建方法構(gòu)建的全文索引圖。
具體實(shí)施方式
下面結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案作進(jìn)一步具體的說(shuō)明。
本發(fā)明基于哈希函數(shù)的高效層級(jí)索引構(gòu)建及其檢索方法的流程如圖1所示。
當(dāng)待歸檔文檔di存儲(chǔ)到本系統(tǒng)后,檢索系統(tǒng)首先會(huì)對(duì)其進(jìn)行分詞操作,得到關(guān)鍵詞的集合wi(w1,w2,…,wk),同時(shí),針對(duì)每個(gè)分詞記錄,為關(guān)鍵詞記錄該關(guān)鍵詞的位置信息,位置信息按照文檔結(jié)構(gòu)進(jìn)行劃分,對(duì)于關(guān)鍵詞wk,其位置信息為段落、句子、句中偏移量組成的三元組,表示為lk(pk,sk,ok),這樣,待歸檔文檔di即可表示為di(wk,lk),其中l(wèi)k為位置信息lk的集合,獲取此集合后,系統(tǒng)會(huì)根據(jù)其關(guān)鍵詞信息及位置信息進(jìn)行索引構(gòu)建操作。
在索引構(gòu)建算法中,對(duì)于當(dāng)前文檔di,構(gòu)建一個(gè)n維向量ti,將各個(gè)維度初始化為0,得到ti0。
對(duì)于關(guān)鍵詞wk,系統(tǒng)采用哈希算法對(duì)關(guān)鍵詞進(jìn)行哈希操作,將關(guān)鍵詞wk轉(zhuǎn)換為正整數(shù)zk,將ti中的zi1,zi2,…,zin位分別置1,表示文檔中含有關(guān)鍵詞中的各個(gè)字符,得到新的n維向量ti1,然后,針對(duì)集合wi中的每個(gè)關(guān)鍵詞進(jìn)行相同的處理(即對(duì)關(guān)鍵詞進(jìn)行哈希操作,然后根據(jù)關(guān)鍵詞的哈希結(jié)果處理表示當(dāng)前文檔的n維向量),得到最終表示當(dāng)前文檔的n維向量tik,將tik放入文檔集合索引矩陣t中,形成最終的文檔索引矩陣
上述文檔集合索引的構(gòu)建過(guò)程如下所示:
本發(fā)明在索引構(gòu)建階段,當(dāng)系統(tǒng)需要對(duì)待歸檔數(shù)據(jù)進(jìn)行索引構(gòu)建,系統(tǒng)首先對(duì)待歸檔數(shù)據(jù)進(jìn)行分詞操作,完成分詞操作之后,對(duì)當(dāng)前文檔中得到的分詞結(jié)果進(jìn)行哈希函數(shù)處理,完成處理之后,根據(jù)哈希函數(shù)的輸出結(jié)果對(duì)索引向量進(jìn)行處理,具體流程可通過(guò)以下算法實(shí)現(xiàn):
完成文檔集合索引構(gòu)建之后,根據(jù)分詞結(jié)果中記錄的分詞結(jié)果,對(duì)待歸檔文檔di進(jìn)行分層處理,對(duì)于文章中每一段落、每一句子構(gòu)建一個(gè)n維向量,針對(duì)各段落的分詞結(jié)果進(jìn)行哈希函數(shù)處理,完成處理之后,根據(jù)哈希函數(shù)的輸出結(jié)果對(duì)索引向量進(jìn)行處理,具體流程可通過(guò)以下算法實(shí)現(xiàn):
將處理之后的段落索引向量和語(yǔ)句向量加入到索引層次結(jié)構(gòu)中,通過(guò)指針鏈接。
上述操作得到段落索引向量和語(yǔ)句向量的過(guò)程與得到當(dāng)前文檔的n維向量tik的過(guò)程相同。
通過(guò)上述方法構(gòu)建的全文索引圖如圖2所示,在圖2所示的結(jié)構(gòu)中,展示了本發(fā)明所采用的索引結(jié)構(gòu)的層次性,即系統(tǒng)在進(jìn)行查詢(xún)時(shí),在根據(jù)索引矩陣定位到文章的索引結(jié)構(gòu)之后,系統(tǒng)可以根據(jù)附圖2的索引結(jié)構(gòu)逐層查找,首先確定關(guān)鍵詞的段落位置,然后確定其語(yǔ)句位置,之后確定其精確位置。詳細(xì)的檢索過(guò)程如下:
通過(guò)上述方法完成待歸檔文檔di的索引構(gòu)建后,當(dāng)接收到查詢(xún)請(qǐng)求時(shí),首先會(huì)對(duì)該查詢(xún)請(qǐng)求進(jìn)行一次分詞操作,將查詢(xún)關(guān)鍵詞轉(zhuǎn)換為多個(gè)子關(guān)鍵詞的析取范式或合取范式,然后,系統(tǒng)會(huì)構(gòu)建一個(gè)與文檔索引矩陣相同維度的n維向量tq,各維度初始為0,再利用與索引構(gòu)建時(shí)相同的哈希算法對(duì)子關(guān)鍵詞集合進(jìn)行哈希操作,將子關(guān)鍵詞轉(zhuǎn)換為正整數(shù),并插入到集合z(z1,z2,…,zk)中,將tq的z1、z2、……、zk位分別置為1,表示當(dāng)前查詢(xún)請(qǐng)求含有某些特定關(guān)鍵詞,將tq與文檔索引矩陣t進(jìn)行矩陣乘法操作:
t’=t·tq
在t’中選擇所有不為0的行,記為t1,t2,…,tr行,表示含有當(dāng)前關(guān)鍵詞的文檔的索引向量,根據(jù)這些向量確認(rèn)所有含有當(dāng)前查詢(xún)關(guān)鍵詞的文檔dt{dt1,dt2,……,dtr},根據(jù)指針鏈接到目標(biāo)文檔dt的層次索引中,然后,根據(jù)關(guān)鍵詞的哈希結(jié)果zq繼續(xù)逐段查找文檔的索引中各個(gè)段落的索引向量,判斷各個(gè)段落索引向量中dt1、dt2、……、dtr位是否為1,命中后再查找命中段落的逐句索引向量,同樣判斷向量中dt1、dt2、……、dtr位是否為1,最終命中含有查詢(xún)關(guān)鍵詞的目標(biāo)語(yǔ)句,完成查詢(xún)流程。具體流程通過(guò)以下算法實(shí)現(xiàn):
讀取當(dāng)前的查詢(xún)請(qǐng)求q,將其解析為多個(gè)子關(guān)鍵詞集合wq{wq1,wq2,…,wqr}
對(duì)關(guān)鍵詞集合中的關(guān)鍵詞進(jìn)行哈希操作:zq=hash(wq)
初始化n維向量tq,將該向量的各個(gè)維度初始化為0
基于哈希結(jié)構(gòu)zq對(duì)tq進(jìn)行處理,得到包含關(guān)鍵詞信息的n維向量tq’
將tq’與文檔索引矩陣tij進(jìn)行矩陣乘法處理,選擇出所有含有當(dāng)前查詢(xún)關(guān)鍵詞的文檔dt{dt1,dt2,……,dtr}
fori=1……tr
根據(jù)zq查找各個(gè)段落的索引向量中dt1、dt2、……、dtr位是否為1
根據(jù)指針找到命中段落的逐句索引向量
根據(jù)zq查找命中段落的逐句索引向量中dt1、dt2、……、dtr位是否為1
將查找到的語(yǔ)句加入結(jié)果集合r中
返回結(jié)果集合r。