加密數(shù)據(jù)搜索方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別是涉及一種加密數(shù)據(jù)搜索方法和裝置。
【背景技術(shù)】
[0002]為了數(shù)據(jù)的安全性,通常用來(lái)保存數(shù)據(jù)的數(shù)據(jù)庫(kù)會(huì)采用加密方案,其中加密方案通常有整體加密、內(nèi)容加密或兩者結(jié)合。對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù),通常會(huì)有搜索需求。而如果數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行了內(nèi)容加密,則無(wú)法完成在數(shù)據(jù)庫(kù)里面的關(guān)鍵字匹配。傳統(tǒng)技術(shù)中,通常需要將數(shù)據(jù)庫(kù)數(shù)據(jù)讀入內(nèi)存,讀入內(nèi)存后數(shù)據(jù)會(huì)進(jìn)行解密動(dòng)作,這樣則可以在內(nèi)存中進(jìn)行關(guān)鍵字匹配以完成搜索。然而,傳統(tǒng)的這種搜索方式,由于都要將數(shù)據(jù)庫(kù)數(shù)據(jù)讀入內(nèi)存,對(duì)于數(shù)據(jù)量較大的情況,搜索效率非常慢。雖然對(duì)大量數(shù)據(jù)也可以采用分批處理,但數(shù)據(jù)全部返回所花費(fèi)的時(shí)間仍較長(zhǎng),并不能很好的解決搜索效率慢的問(wèn)題。
【發(fā)明內(nèi)容】
[0003]基于此,有必要針對(duì)上述技術(shù)問(wèn)題,提供一種能提高搜索效率的加密數(shù)據(jù)搜索方法和裝置。
[0004]—種加密數(shù)據(jù)搜索方法,所述方法包括:
[0005]獲取搜索字符;
[0006]獲取數(shù)據(jù)庫(kù)中與搜索字符匹配的字符索引,所述字符索引以明文形式存儲(chǔ);
[0007]獲取與所述匹配的字符索引對(duì)應(yīng)的結(jié)果集,將所述結(jié)果集進(jìn)行緩存;
[0008]在緩存中進(jìn)行關(guān)鍵字匹配,得到所述結(jié)果集中與所述搜索字符匹配的搜索結(jié)果。
[0009]—種加密數(shù)據(jù)搜索裝置,所述裝置包括:
[0010]字符獲取模塊,用于獲取搜索字符;
[0011]索引匹配模塊,用于獲取數(shù)據(jù)庫(kù)中與搜索字符匹配的字符索引,所述字符索引以明文形式存儲(chǔ);
[0012]緩存模塊,用于獲取與所述匹配的字符索引對(duì)應(yīng)的結(jié)果集,將所述結(jié)果集進(jìn)行緩存;
[0013]關(guān)鍵字匹配模塊,用于在緩存中進(jìn)行關(guān)鍵字匹配,得到所述結(jié)果集中與所述搜索字符匹配的搜索結(jié)果。
[0014]上述加密數(shù)據(jù)搜索方法和裝置,由于字符索引以明文形式存儲(chǔ),可直接進(jìn)行匹配,在搜索時(shí)先獲取數(shù)據(jù)庫(kù)中與搜索字符匹配的字符索引,進(jìn)一步獲取與匹配的字符索引對(duì)應(yīng)的結(jié)果集,將結(jié)果集進(jìn)行緩存,然后在緩存中進(jìn)行關(guān)鍵字匹配,得到結(jié)果集中與搜索字符匹配的搜索結(jié)果。相對(duì)于現(xiàn)有技術(shù),由于先進(jìn)行了一次字符索引的匹配,只緩存字符索引匹配的數(shù)據(jù),減少了數(shù)據(jù)庫(kù)數(shù)據(jù)讀入內(nèi)存的時(shí)間,從而提高了加密數(shù)據(jù)的搜索效率。
【附圖說(shuō)明】
[0015]圖1為一個(gè)實(shí)施例中加密數(shù)據(jù)搜索方法的流程圖;
[0016]圖2為另一個(gè)實(shí)施例中加密數(shù)據(jù)搜索方法的流程圖;
[0017]圖3為一個(gè)實(shí)施例中的聯(lián)系人搜索界面的示意圖;
[0018]圖4為圖3所示實(shí)施例中展示搜索結(jié)果的界面示意圖;
[0019]圖5為一個(gè)實(shí)施例中加密數(shù)據(jù)搜索裝置的結(jié)構(gòu)框圖;
[0020]圖6為另一個(gè)實(shí)施例中加密數(shù)據(jù)搜索裝置的結(jié)構(gòu)框圖;
[0021]圖7為一個(gè)實(shí)施例中終端的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0022]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0023]如圖1所示,在一個(gè)實(shí)施例中,提供了一種加密數(shù)據(jù)搜索方法,該方法包括:
[0024]步驟102,獲取搜索字符。
[0025]本實(shí)施例中,可提供一搜索界面,該搜索界面中包含搜索輸入框,通過(guò)搜索輸入框接收用戶輸入的關(guān)鍵字,并提取關(guān)鍵字對(duì)應(yīng)的搜索字符。接收到的關(guān)鍵字包含中文、英文或者中英文組合。比如,關(guān)鍵字為英文,則搜索字符為對(duì)應(yīng)的英文字符;關(guān)鍵字為中文,則搜索字符為對(duì)應(yīng)的中文拼音字符。
[0026]步驟104,獲取數(shù)據(jù)庫(kù)中與搜索字符匹配的字符索引。
[0027]字符索引是指存儲(chǔ)數(shù)據(jù)時(shí)將數(shù)據(jù)中的字符作為數(shù)據(jù)的索引進(jìn)行存儲(chǔ),這里的數(shù)據(jù)即為字段。優(yōu)選的,可將字段中的前綴字符作為索引。這里的前綴字符可以是字段的第一個(gè)字符或者前面至少兩個(gè)字符。本實(shí)施例中,字符索引以明文形式存儲(chǔ),因此在數(shù)據(jù)庫(kù)中可直接進(jìn)行匹配。
[0028]進(jìn)一步的,獲取到搜索字符后,可將搜索字符中的前綴字符作為參數(shù)在數(shù)據(jù)庫(kù)的字符索引中進(jìn)行搜索,以得到與搜索字符匹配的字符索引。這里匹配的字符索引是指前綴字符與搜索字符的前綴字符相同的字符索引。
[0029]步驟106,獲取與匹配的字符索引對(duì)應(yīng)的結(jié)果集,建立結(jié)果集緩存。
[0030]本實(shí)施例中,數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)以數(shù)據(jù)中的前綴字符為索引,也就是一個(gè)字符索弓I對(duì)應(yīng)包含該字符索引的多條字段。例如,字符索引為“ a”,對(duì)應(yīng)存儲(chǔ)的字段包括“ ab ”、“abc”、“ac”等。獲取到數(shù)據(jù)庫(kù)中與搜索字符匹配的字符索引后,進(jìn)一步的可獲取數(shù)據(jù)庫(kù)中與匹配的字符索引對(duì)應(yīng)的這些數(shù)據(jù),即結(jié)果集中。將結(jié)果集進(jìn)行緩存,也就是讀入內(nèi)存,數(shù)據(jù)讀入內(nèi)存后即可進(jìn)行解密。
[0031]步驟108,在緩存中進(jìn)行關(guān)鍵字匹配,得到結(jié)果集中與搜索字符匹配的搜索結(jié)果。
[0032]由于數(shù)據(jù)讀入內(nèi)存后即可進(jìn)行解密,則在緩存中可直接進(jìn)行關(guān)鍵字匹配。具體的,結(jié)果集與搜索字符匹配的搜索結(jié)果可以是包含搜索字符的字段,或者與搜索字符模糊匹配的字段,依據(jù)與搜索字符的匹配程度對(duì)搜索結(jié)果進(jìn)行排序,匹配程度越高,則搜索結(jié)果越靠
、廣.刖。
[0033]本實(shí)施例中,由于在數(shù)據(jù)庫(kù)中字符索引以明文形式存儲(chǔ),可直接進(jìn)行匹配,在搜索時(shí)先獲取數(shù)據(jù)庫(kù)中與搜索字符匹配的字符索引,進(jìn)一步獲取與匹配的字符索引對(duì)應(yīng)的結(jié)果集,將結(jié)果集進(jìn)行緩存,然后在緩存中進(jìn)行關(guān)鍵字匹配,得到結(jié)果集中與搜索字符匹配的搜索結(jié)果。相對(duì)于現(xiàn)有技術(shù),由于先進(jìn)行了一次字符索引的匹配,只緩存字符索引匹配的數(shù)據(jù),減少了數(shù)據(jù)庫(kù)數(shù)據(jù)讀入內(nèi)存的時(shí)間,從而提高了加密數(shù)據(jù)的搜索效率。
[0034]此外,字符索引使用字段中的前綴字符,雖然在數(shù)據(jù)庫(kù)中以明文形式存儲(chǔ)了前綴字符,但只有前綴字符基本很難獲知具體內(nèi)容,犧牲了很小的安全性,在提高了搜索效率的同時(shí)并不會(huì)對(duì)數(shù)據(jù)的安全性構(gòu)成影響。且由于在匹配時(shí),先匹配字符索引,通過(guò)索引的方式進(jìn)行搜索,也能提高加密數(shù)據(jù)的搜索效率。
[0035]在一個(gè)實(shí)施例中,字符索引為字段的前綴字符。則步驟102中獲取數(shù)據(jù)庫(kù)中與搜索字符的前綴字符匹配的字符索引。本實(shí)施例中,字段的前綴字符優(yōu)選為字段的第一個(gè)字符,也就是首字符。當(dāng)然也可以是字段的前面至少兩個(gè)字符。具體前綴字符為字段的前面多少個(gè)字符可根據(jù)具體的搜索場(chǎng)景確定。
[0036]在一個(gè)實(shí)施例中,在獲取數(shù)據(jù)庫(kù)中與搜索字符匹配的字符索引的步驟之前,還包括:檢測(cè)結(jié)果集緩存是否為空,若是,則進(jìn)入獲取數(shù)據(jù)庫(kù)中與搜索字符匹配的字符索引的步驟;否則,在緩存中搜索與搜索字符匹配的搜索結(jié)果。
[0037]進(jìn)一步的,在一個(gè)實(shí)施例中,在緩存中搜索與搜索字符匹配的搜索結(jié)果的步驟包括:檢測(cè)緩存中是否存在與搜索字符匹配的前綴字符,若是,則執(zhí)行在緩存中進(jìn)行關(guān)鍵字匹配,得到結(jié)果集中與搜索字符匹配的搜索結(jié)果的步驟;否則,進(jìn)入步驟104獲取數(shù)據(jù)庫(kù)中與搜索字符匹配的字符索引的步驟。
[0038]在一個(gè)實(shí)施例中,緩存中保存了前綴字符和對(duì)應(yīng)的包含前綴字符的字段。本實(shí)施例中,緩存中保存的前綴字符是指匹配過(guò)的字符索引,對(duì)應(yīng)包含該前綴字符的字段為從數(shù)據(jù)庫(kù)讀入到內(nèi)存中的與匹配的字符索引對(duì)應(yīng)的字段。由于緩存中保存了之前匹配過(guò)的結(jié)果集,因此在進(jìn)行匹配時(shí),可先檢測(cè)結(jié)果集緩存中是否為空,若不為空,則進(jìn)一步檢測(cè)緩存中是否存在與搜索字符匹配的前綴字符,如果存在,則表明搜索字符之前搜索過(guò),緩存中有之前的搜索結(jié)果,可直接從緩存中進(jìn)行關(guān)鍵字匹配,無(wú)需再將結(jié)果集進(jìn)行緩存,進(jìn)一步提高了加密數(shù)據(jù)的搜索效率。
[0039]如圖2所示,在一個(gè)實(shí)施例中,提供了一種加密數(shù)據(jù)搜索方法,該方法包括:
[0040]步驟202,獲取搜索字符。
[0041]步驟204,檢測(cè)緩存是否為空,若是,則進(jìn)入步驟206,否則進(jìn)入步驟212。
[0042]本實(shí)施例中,緩存中保存了一個(gè)二維表,該二維表中記錄了匹配過(guò)的前綴字符和對(duì)應(yīng)的從數(shù)據(jù)庫(kù)讀入內(nèi)存的包含該前綴字符的字段。
[0043]例如,二維表中記錄了如下數(shù)據(jù):
[0044]{
[0045]“A”:[ “Abc”,“auf”]
[0046]“B,,:[ “Bbc,,,“bwfV,,]
[0047]}
[0048]其中,“A”和“B”為前綴字符,本例子中為字段的首字符,對(duì)應(yīng)保存了包含首字符的字段。
[0049]步驟206,檢測(cè)緩存中是否存在與搜索字符匹配的前綴字符,若是,則進(jìn)入步驟210,否則進(jìn)入步驟208。
[0050]本實(shí)施例中,可檢測(cè)緩存中保存的二維表中是否存在與搜索字符的前綴字符相同的前綴字符,如果存在,則表明該搜索字符的前綴字符之前匹配過(guò),直接在結(jié)果集緩存中進(jìn)行關(guān)鍵字匹配;如果不存在,則需要重新將與搜索字符匹配的前綴字符對(duì)應(yīng)的一條記錄讀入內(nèi)存,該條記錄保存了匹配的前綴字符和包含前綴字符的字段。
[0051]步驟208,獲取數(shù)據(jù)庫(kù)中與搜索字符匹配的字符索引。
[0052]本實(shí)施例中,字符索引為字段的前綴字符,也就是將字段的前綴字符作為索引,且前綴字符以明文形式存儲(chǔ),可以直接與搜索字符進(jìn)行關(guān)鍵字匹配。具體的,以搜索字符的前綴字符為參數(shù)在數(shù)據(jù)庫(kù)中進(jìn)行搜索,得到前綴字符與搜索字符的前綴字符相同的索引。
[0053]步驟210,獲取與匹配的字符索引對(duì)應(yīng)的結(jié)果集,建立結(jié)果集緩存。
[0054]本實(shí)施例中,得到與搜索字符匹配的字符索引后,則可直接獲取數(shù)據(jù)庫(kù)中與該匹配的字符索引對(duì)應(yīng)的