一種用于離線搜索的小規(guī)模索引數(shù)據(jù)存儲方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于數(shù)據(jù)存儲領(lǐng)域,尤其涉及一種用于離線搜索的小規(guī)模索引數(shù)據(jù)存儲方法。
【背景技術(shù)】
[0002]全文搜索是一種普遍的需求,無論是對網(wǎng)站,還是對文檔,全文檢索都是一種非常方便的搜索方式。傳統(tǒng)的全文檢索都是在服務(wù)器端建立索引結(jié)構(gòu),在客戶端也就是Web端輸入查詢指令,服務(wù)端接受查詢指令,在服務(wù)端完成搜索任務(wù),然后將結(jié)果返回客戶端,典型的如Google,百度等搜索引擎。針對小規(guī)模的數(shù)據(jù)如企業(yè)網(wǎng)站或一般的技術(shù)文檔等,數(shù)據(jù)量有限,采用傳統(tǒng)的在線全文檢索方式成本較高,特別是檢索過程較復(fù)雜,受網(wǎng)絡(luò)環(huán)境影響較大,用戶體驗(yàn)較差。
【發(fā)明內(nèi)容】
[0003]發(fā)明目的:本發(fā)明旨在解決現(xiàn)有技術(shù)中的問題,提出一種用于離線搜索的小規(guī)模索引數(shù)據(jù)存儲方法。
[0004]技術(shù)方案:本發(fā)明提供了一種用于離線搜索的小規(guī)模索引數(shù)據(jù)存儲方法,包括如下步驟:
[0005](1)將數(shù)據(jù)內(nèi)容按照從0開始的順序編號,將各標(biāo)題存入數(shù)組中;
[0006](2)逐一對數(shù)據(jù)內(nèi)容拆分關(guān)鍵字;
[0007](3)逐一將步驟(2)中拆分的關(guān)鍵字存入關(guān)聯(lián)數(shù)組結(jié)構(gòu)中,關(guān)聯(lián)數(shù)組的鍵就是關(guān)鍵字本身,關(guān)聯(lián)數(shù)組的值就是一個(gè)大二進(jìn)制數(shù),某位η為1表明該關(guān)鍵字在第η篇網(wǎng)頁或文檔中存在,為0表示不存在;
[0008](4)在對所有內(nèi)容完成前述步驟⑴?步驟(3)的分析之后,對關(guān)聯(lián)數(shù)組做內(nèi)容壓縮,即壓縮關(guān)聯(lián)數(shù)組的值,將連續(xù)相同的位采用行程壓縮方法做第一次壓縮;
[0009](5)將步驟(4)中關(guān)聯(lián)數(shù)組做序列化輸出成字符串,對該字符串再次壓縮;如果網(wǎng)站服務(wù)器支持gzip壓縮方式,則直接利用網(wǎng)站服務(wù)器來壓縮;
[0010](6)客戶端在取得經(jīng)壓縮的關(guān)聯(lián)數(shù)組字符串之后,將其解壓并反序列化,獲得關(guān)聯(lián)數(shù)組索引結(jié)構(gòu);
[0011](7)在用戶查詢單一關(guān)鍵字時(shí),用Javascript從關(guān)聯(lián)數(shù)組中查詢關(guān)鍵字,如果找到了,將該鍵的值表達(dá)成查詢結(jié)果,返回一個(gè)有網(wǎng)頁或文檔標(biāo)題的列表;
[0012](8)對于組合查詢,用Javascript從關(guān)聯(lián)數(shù)組中查詢各關(guān)鍵字,將其找到的值做組合運(yùn)算,其運(yùn)算結(jié)果即為結(jié)果大二進(jìn)制數(shù)字,如果某位位1則該篇網(wǎng)頁或文檔存在,為0則不存在,給用戶返回一個(gè)查詢結(jié)果即可。
[0013]有益效果:針對小規(guī)模的全文搜索,本發(fā)明建立一種簡潔緊湊的索引數(shù)據(jù)存儲結(jié)構(gòu),在用戶第一次查詢時(shí),將索引數(shù)據(jù)下載到客戶端也就是Web端,此后的所有全文檢索都是在客戶端完成,省去了網(wǎng)絡(luò)交互過程,提高了用戶體驗(yàn)。本發(fā)明提供的索引數(shù)據(jù)存儲方法,具有結(jié)構(gòu)簡單,數(shù)據(jù)緊湊,查詢速度快,以及對組合查詢運(yùn)算友好的特性。
【附圖說明】
[0014]圖1是為本發(fā)明流程圖。
【具體實(shí)施方式】
[0015]下面將結(jié)合附圖,對本發(fā)明的實(shí)施案例進(jìn)行詳細(xì)的描述;
[0016]如圖1所示,一種用于離線搜索的小規(guī)模索引數(shù)據(jù)存儲方法,包括如下步驟:
[0017](1)將數(shù)據(jù)內(nèi)容如網(wǎng)頁,文檔章節(jié)等按照從0開始的順序編號;將標(biāo)題等資料存入數(shù)組中;
[0018](2)逐一對數(shù)據(jù)內(nèi)容拆分關(guān)鍵字;
[0019](3)逐一將關(guān)鍵字存入關(guān)聯(lián)數(shù)組結(jié)構(gòu)中,關(guān)聯(lián)數(shù)組的鍵就是關(guān)鍵字本身,關(guān)聯(lián)數(shù)組的值就是一個(gè)大二進(jìn)制數(shù),某位η為1表明該關(guān)鍵字在第η篇網(wǎng)頁或文檔中存在,為0表示不存在;
[0020](4)在完成所有內(nèi)容的分析之后,對關(guān)聯(lián)數(shù)組做內(nèi)容壓縮,即壓縮關(guān)聯(lián)數(shù)組的值,將連續(xù)相同的位采用行程壓縮方法做第一次壓縮;
[0021](5)將關(guān)聯(lián)數(shù)組做序列化輸出成字符串,對該字符串再次壓縮;如果網(wǎng)站服務(wù)器支持gzip等壓縮方式,可以直接利用網(wǎng)站服務(wù)器來壓縮;
[0022](6)客戶端在取得經(jīng)壓縮的關(guān)聯(lián)數(shù)組字符串之后,將其解壓并反序列化,獲得關(guān)聯(lián)數(shù)組索引結(jié)構(gòu);
[0023](7)在用戶查詢單一關(guān)鍵字時(shí),用Javascript從關(guān)聯(lián)數(shù)組中查詢關(guān)鍵字,如果找到了,將該鍵的值表達(dá)成查詢結(jié)果,典型的是返回一個(gè)有網(wǎng)頁或文檔標(biāo)題的列表;
[0024](8)對于組合查詢,如多個(gè)關(guān)鍵字做And,Or或Xor或者某個(gè)關(guān)鍵字做Not,甚至是以上條件的組合,用Javascript從關(guān)聯(lián)數(shù)組中查詢各關(guān)鍵字,將其找到的值(大二進(jìn)制數(shù)字),做組合運(yùn)算(如And,Or, Xor和Not組合),其運(yùn)算結(jié)果即為結(jié)果大二進(jìn)制數(shù)字,按照某位位1則該篇網(wǎng)頁或文檔存在,為0則不存在,給用戶返回一個(gè)查詢結(jié)果即可。
[0025](9)實(shí)施案例:我們將本發(fā)明的方法應(yīng)用于一個(gè)軟件的在線文檔幫助系統(tǒng),取得了很好的效果。該在線文檔幫助系統(tǒng)文件較少,100多個(gè)文件,收集整理(經(jīng)第一次壓縮)之后的離線索引文件約為18KB,經(jīng)第二次壓縮(gzip壓縮)之后只有7KB,Web客戶端取得該索引數(shù)據(jù)之后,就可以完全在Web客戶端做離線搜索,完全不需要和服務(wù)器交互,平均查詢時(shí)間為毫秒級,再細(xì)分下去,單獨(dú)查詢時(shí)間小于1毫秒,加上展示結(jié)果的時(shí)間總計(jì)也不超過100毫秒,也即0.1秒以內(nèi),極大的提高了用戶體驗(yàn)。
[0026]本發(fā)明提供的一種用于離線搜索的小規(guī)模索引數(shù)據(jù)存儲方法,提供的索引數(shù)據(jù)存儲方法,具有結(jié)構(gòu)簡單,數(shù)據(jù)緊湊,查詢速度快,以及對組合查詢運(yùn)算友好的特性。本發(fā)明提供的方法可以用于如企業(yè)網(wǎng)站,技術(shù)文檔等小規(guī)模文本的全文檢索,通過將上述文檔建立簡潔緊湊的索引,在客戶端第一次查詢時(shí)下載經(jīng)過特殊編排的壓縮索引數(shù)據(jù),在客戶端查詢時(shí)利用解壓反序列化的關(guān)聯(lián)數(shù)組,可以快速的進(jìn)行全文檢索,不需要再通過服務(wù)器查詢,從而提高了用戶體驗(yàn)。本發(fā)明的索引數(shù)據(jù)存儲結(jié)構(gòu)還可以支持復(fù)雜的組合查詢,如And,0r或Xor,Not等邏輯組合,具有廣泛的用途。
【主權(quán)項(xiàng)】
1.一種用于離線搜索的小規(guī)模索引數(shù)據(jù)存儲方法,其特征在于,包括如下步驟: (1)將數(shù)據(jù)內(nèi)容按照從0開始的順序編號,將各標(biāo)題存入數(shù)組中; (2)逐一對數(shù)據(jù)內(nèi)容拆分關(guān)鍵字; (3)逐一將步驟(2)中拆分的關(guān)鍵字存入關(guān)聯(lián)數(shù)組結(jié)構(gòu)中,關(guān)聯(lián)數(shù)組的鍵就是關(guān)鍵字本身,關(guān)聯(lián)數(shù)組的值就是一個(gè)大二進(jìn)制數(shù),某位η為1表明該關(guān)鍵字在第η篇網(wǎng)頁或文檔中存在,為0表示不存在; (4)在對所有內(nèi)容完成前述步驟(1)?步驟(3)的分析之后,對關(guān)聯(lián)數(shù)組做內(nèi)容壓縮,即壓縮關(guān)聯(lián)數(shù)組的值,將連續(xù)相同的位采用行程壓縮方法做第一次壓縮; (5)將步驟(4)中關(guān)聯(lián)數(shù)組做序列化輸出成字符串,對該字符串再次壓縮;如果網(wǎng)站服務(wù)器支持gzip壓縮方式,則直接利用網(wǎng)站服務(wù)器來壓縮; (6)客戶端在取得經(jīng)壓縮的關(guān)聯(lián)數(shù)組字符串之后,將其解壓并反序列化,獲得關(guān)聯(lián)數(shù)組索引結(jié)構(gòu); (7)在用戶查詢單一關(guān)鍵字時(shí),用Javascript從關(guān)聯(lián)數(shù)組中查詢關(guān)鍵字,如果找到了,將該鍵的值表達(dá)成查詢結(jié)果,返回一個(gè)有網(wǎng)頁或文檔標(biāo)題的列表; (8)對于組合查詢,用Javascript從關(guān)聯(lián)數(shù)組中查詢各關(guān)鍵字,將其找到的值做組合運(yùn)算,其運(yùn)算結(jié)果即為結(jié)果大二進(jìn)制數(shù)字,如果某位位1則該篇網(wǎng)頁或文檔存在,為0則不存在,給用戶返回一個(gè)查詢結(jié)果即可。
【專利摘要】本發(fā)明公開了一種用于離線搜索的小規(guī)模索引數(shù)據(jù)存儲方法,包括如下步驟:將數(shù)據(jù)內(nèi)容按照從0開始的順序編號,將各標(biāo)題存入數(shù)組中;逐一對數(shù)據(jù)內(nèi)容拆分關(guān)鍵字;逐一將拆分的關(guān)鍵字存入關(guān)聯(lián)數(shù)組結(jié)構(gòu)中,關(guān)聯(lián)數(shù)組的鍵就是關(guān)鍵字本身,關(guān)聯(lián)數(shù)組的值就是一個(gè)大二進(jìn)制數(shù),某位n為1表明該關(guān)鍵字在第n篇網(wǎng)頁或文檔中存在,為0表示不存在;在對所有內(nèi)容完成分析之后,對關(guān)聯(lián)數(shù)組做內(nèi)容壓縮,即壓縮關(guān)聯(lián)數(shù)組的值,將連續(xù)相同的位采用行程壓縮方法做第一次壓縮;將關(guān)聯(lián)數(shù)組做序列化輸出成字符串,對該字符串再次壓縮。本發(fā)明提供的索引數(shù)據(jù)存儲方法,具有結(jié)構(gòu)簡單,數(shù)據(jù)緊湊,查詢速度快,以及對組合查詢運(yùn)算友好的特性。
【IPC分類】G06F17/30
【公開號】CN105426519
【申請?zhí)枴緾N201510884263
【發(fā)明人】許軍才, 張衛(wèi)東, 賴金輝, 任青文, 沈振中
【申請人】河海大學(xué)
【公開日】2016年3月23日
【申請日】2015年12月4日