本發(fā)明屬于數(shù)據(jù)檢索領(lǐng)域,尤其是涉及一種全文索引數(shù)據(jù)的創(chuàng)建方法及裝置。
背景技術(shù):
在關(guān)系數(shù)據(jù)庫系統(tǒng)里,全文索引是檢索文檔數(shù)據(jù)最有效率的方式之一,在當(dāng)前的網(wǎng)絡(luò)環(huán)境下,信息量和用戶量都成爆炸性的增長,全文索引成為信息檢索系統(tǒng)的主要手段之一,倒排索引是全文檢索系統(tǒng)的核心部分,其創(chuàng)建效率對(duì)全文檢索系統(tǒng)應(yīng)用也有很大的影響。
倒排索引(英語:Inverted index),也常被稱為反向索引、置入檔案或反向檔案,是一種索引方法,被用來存儲(chǔ)在全文搜索下某個(gè)單詞在一個(gè)文檔或者一組文檔中的存儲(chǔ)位置的映射。它是文檔檢索系統(tǒng)中最常用的數(shù)據(jù)結(jié)構(gòu)。通過倒排索引,可以根據(jù)單詞快速獲取包含這個(gè)單詞的文檔列表。
全文索引倒排文檔數(shù)據(jù)是由Term ID對(duì)應(yīng)的一組文檔編號(hào)和在文檔中的偏移組成,其表現(xiàn)形式為Term ID(詞條編號(hào))-->{<doc ID(文檔編號(hào)),{offset}(偏移量)},其中Term ID是斷詞器劃分的最小索引單元,在中文全文檢索中一般為字、詞、英文、數(shù)字串和幾種形式的組合,數(shù)據(jù)創(chuàng)建過程具有以下特點(diǎn):隨著文檔數(shù)量以及單文檔數(shù)據(jù)量的增加,文檔的索引的壓力會(huì)集中在索引流程的分詞等復(fù)雜環(huán)節(jié),導(dǎo)致索引數(shù)據(jù)的效率下降,無法有效的利用CPU的計(jì)算能力。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例提供了一種全文索引數(shù)據(jù)的創(chuàng)建方法及裝置,以解決現(xiàn)有技術(shù)中索引數(shù)據(jù)的效率下降的技術(shù)問題。
一方面,本發(fā)明實(shí)施例提供了一種全文索引數(shù)據(jù)的創(chuàng)建方法,包括:
并行對(duì)文檔進(jìn)行拆分為單詞,記錄單詞位置和單詞標(biāo)記;
按照用于記錄單詞位置和單詞標(biāo)記的存儲(chǔ)數(shù)據(jù)塊順序?qū)λ龃鎯?chǔ)數(shù)據(jù)塊依次進(jìn)行封裝,生成索引任務(wù);
根據(jù)所述索引任務(wù)對(duì)單詞進(jìn)行排序;
對(duì)所述索引任務(wù)進(jìn)行拆包,對(duì)相同的單詞進(jìn)行歸類。
進(jìn)一步的,在并行對(duì)文檔進(jìn)行拆分為單詞之前,還包括:
對(duì)待索引文檔進(jìn)行編號(hào),并根據(jù)所述編號(hào)和文檔內(nèi)容生成數(shù)據(jù)項(xiàng);
將所述數(shù)據(jù)項(xiàng)填入預(yù)設(shè)大小的內(nèi)存塊中。
進(jìn)一步的,所述根據(jù)所述索引任務(wù)對(duì)單詞進(jìn)行排序,包括:
對(duì)單詞按照單詞標(biāo)記遞增排序。
進(jìn)一步的,所述對(duì)單詞按照單詞標(biāo)記遞增排序,包括:
在單詞標(biāo)記相同時(shí),對(duì)所述單詞按照文本編號(hào)標(biāo)記遞增排序。
更進(jìn)一步的,在對(duì)相同的單詞進(jìn)行歸類之后,還包括:
按照所述分類對(duì)單詞進(jìn)行封裝,生成封裝數(shù)據(jù)包,所述封裝數(shù)據(jù)包包括:單詞標(biāo)記和所述單詞標(biāo)記對(duì)應(yīng)的位置信息數(shù)據(jù),所述位置信息數(shù)據(jù)采用分別差分方式進(jìn)行存儲(chǔ)。
另一方面,本發(fā)明實(shí)施例還提供了一種全文索引數(shù)據(jù)的創(chuàng)建裝置,包括:
分詞單元,用于并行對(duì)文檔進(jìn)行分詞,記錄單詞位置和單詞標(biāo)記;
封裝單元,用于按照用于記錄單詞位置和單詞標(biāo)記的存儲(chǔ)數(shù)據(jù)塊順序?qū)λ龇衷~的結(jié)果依次進(jìn)行封裝,生成封裝塊和封裝塊的索引,所述索引包括:詞編號(hào)及數(shù)量;
排序單元,用于根據(jù)所述索引對(duì)單詞進(jìn)行排序;
歸類單元,用于對(duì)所述封裝塊進(jìn)行拆包,對(duì)相同的單詞進(jìn)行歸類。
進(jìn)一步的,所述裝置還包括:
編號(hào)單元,用于對(duì)待索引文檔進(jìn)行編號(hào),并根據(jù)所述編號(hào)和文檔內(nèi)容生成數(shù)據(jù)項(xiàng);
填入單元,用于將所述數(shù)據(jù)項(xiàng)填入預(yù)設(shè)大小的內(nèi)存塊中。
進(jìn)一步的,所述排序單元用于:
對(duì)單詞按照單詞標(biāo)記遞增排序。
進(jìn)一步的,所述排序單元用于:
在單詞標(biāo)記相同時(shí),對(duì)所述單詞按照文本編號(hào)標(biāo)記遞增排序。
更進(jìn)一步的,所述裝置還包括:
數(shù)據(jù)包封裝單元,用于按照所述分類對(duì)單詞進(jìn)行封裝,生成封裝數(shù)據(jù)包,所述封裝數(shù)據(jù)包包括:單詞標(biāo)記和所述單詞標(biāo)記對(duì)應(yīng)的位置信息數(shù)據(jù),所述位置信息數(shù)據(jù)采用分別差分方式進(jìn)行存儲(chǔ)。
本發(fā)明實(shí)施例提供的全文索引數(shù)據(jù)的創(chuàng)建方法及裝置,通過多線程并行對(duì)文檔進(jìn)行分詞,并可根據(jù)順序?qū)Ψ衷~進(jìn)行封裝并生成索引,根據(jù)所述索引對(duì)單詞進(jìn)行排序,并對(duì)拆包后的相同單詞進(jìn)行歸類,獲取最后的索引數(shù)據(jù)??梢杂行Ю糜?jì)算資源,減少分詞時(shí)間,并可對(duì)并行分詞結(jié)果排序處理,準(zhǔn)確的得到索引數(shù)據(jù)。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例一提供的全文索引數(shù)據(jù)的創(chuàng)建方法的流程示意圖;
圖2是本發(fā)明實(shí)施例一提供的全文索引數(shù)據(jù)的創(chuàng)建方法中過程示意圖;
圖3是本發(fā)明實(shí)施例二提供的全文索引數(shù)據(jù)的創(chuàng)建方法的流程示意圖;
圖4是本發(fā)明實(shí)施例三提供的全文索引數(shù)據(jù)的創(chuàng)建方法的流程示意圖;
圖5是本發(fā)明實(shí)施例三提供的全文索引數(shù)據(jù)的創(chuàng)建方法中實(shí)例創(chuàng)建示意圖;
圖6是本發(fā)明實(shí)施例四提供的全文索引數(shù)據(jù)的創(chuàng)建裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
實(shí)施例一
圖1為本發(fā)明實(shí)施例一提供的全文索引數(shù)據(jù)的創(chuàng)建方法的流程圖,本實(shí)施例可適用于創(chuàng)建全文索引數(shù)據(jù)的情況,該方法可以由全文索引數(shù)據(jù)的創(chuàng)建裝置來執(zhí)行,該裝置可由軟件/硬件方式實(shí)現(xiàn),并可集成于數(shù)據(jù)庫系統(tǒng)中。
參見圖1,所述全文索引數(shù)據(jù)的創(chuàng)建方法,包括:
S110,并行對(duì)文檔進(jìn)行分詞,記錄單詞位置和單詞標(biāo)記。
圖2是本發(fā)明實(shí)施例一提供的全文索引數(shù)據(jù)的創(chuàng)建方法中過程示意圖,C參考圖1和圖2,示例性的,可以采用多個(gè)并行的處理線程來進(jìn)行分詞,具體數(shù)量可以根據(jù)用戶的實(shí)際硬件資源調(diào)整,每個(gè)線程的工作內(nèi)容是一樣的,即實(shí)際的數(shù)據(jù)切分,分配單詞標(biāo)記Term ID,記錄單詞位置Term位置。所述并行的處理線程是指當(dāng)一個(gè)程序啟動(dòng)時(shí),就有一個(gè)進(jìn)程被操作系統(tǒng)(OS)創(chuàng)建,與此同時(shí)一個(gè)線程也立刻運(yùn)行,該線程通常叫做程序的主線程(Main Thread),因?yàn)樗浅绦蜷_始時(shí)就執(zhí)行的,如果你需要再創(chuàng)建線程,那么創(chuàng)建的線程就是這個(gè)主線程的子線程。每個(gè)進(jìn)程至少都有一個(gè)主線程。子線程的數(shù)量由系統(tǒng)的硬件處理能力決定。示例性的,根據(jù)中央處理器頻率、緩存大小和內(nèi)存大小等決定。硬件處理能力越強(qiáng),子線程的數(shù)量越多。
S120,按照用于記錄單詞位置和單詞標(biāo)記的存儲(chǔ)數(shù)據(jù)塊順序?qū)λ龇衷~的結(jié)果依次進(jìn)行封裝,生成封裝塊和封裝塊的索引,所述索引包括:詞編號(hào)及數(shù)量。
在分詞完成后,按照用于記錄單詞位置和單詞標(biāo)記的存儲(chǔ)數(shù)據(jù)塊順序?qū)λ龇衷~的結(jié)果依次進(jìn)行封裝。具體的,對(duì)分詞結(jié)果可以按照線程處理順序封裝成封裝塊,并生成后續(xù)流程可以處理的索引,包括編號(hào),詞數(shù)量等信息,也可保證了整體數(shù)據(jù)的有序性。
S130,根據(jù)所述索引對(duì)單詞進(jìn)行排序。
根據(jù)生成的索引對(duì)每個(gè)線程處理的分詞結(jié)果進(jìn)行排序,示例性的,可以對(duì)分詞結(jié)果按照Term ID遞增排序,相同的Term ID內(nèi)部,按照Doc ID遞增排序,相同的Doc ID內(nèi)部按照位置信息遞增排序
S140,對(duì)所述封裝塊進(jìn)行拆包,對(duì)相同的單詞進(jìn)行歸類。
對(duì)接收到的有序分詞結(jié)果進(jìn)行索引任務(wù)的拆包處理,使得相同Term的數(shù)據(jù)歸為一類,這樣就生成了最終需要的倒排數(shù)據(jù)。
本實(shí)施例通過多線程并行對(duì)文檔進(jìn)行分詞,并可根據(jù)順序?qū)Ψ衷~進(jìn)行封裝并生成索引,根據(jù)所述索引對(duì)單詞進(jìn)行排序,并對(duì)拆包后的相同單詞進(jìn)行歸類,獲取最后的索引數(shù)據(jù)。可以有效利用計(jì)算資源,減少分詞時(shí)間,并可對(duì)并行分詞結(jié)果排序處理,準(zhǔn)確的得到索引數(shù)據(jù)。
實(shí)施例二
圖3是本發(fā)明實(shí)施例二提供的全文索引數(shù)據(jù)的創(chuàng)建方法的流程示意圖,本發(fā)明實(shí)施例以上述實(shí)施例為基礎(chǔ),進(jìn)一步的,在并行對(duì)文檔進(jìn)行分詞之前,增加:對(duì)待索引文檔進(jìn)行編號(hào),并根據(jù)所述編號(hào)和文檔內(nèi)容生成數(shù)據(jù)項(xiàng);將所述數(shù)據(jù)項(xiàng)填入預(yù)設(shè)大小的內(nèi)存塊中。
參見圖3,所述全文索引數(shù)據(jù)的創(chuàng)建方法,包括:
S210,對(duì)待索引文檔進(jìn)行編號(hào),并根據(jù)所述編號(hào)和文檔內(nèi)容生成數(shù)據(jù)項(xiàng)。
據(jù)Doc ID(文檔編號(hào))的順序開始封裝數(shù)據(jù)項(xiàng),每個(gè)數(shù)據(jù)塊含有有序的Doc ID及對(duì)應(yīng)的文檔內(nèi)容。
S220,將所述數(shù)據(jù)項(xiàng)填入預(yù)設(shè)大小的內(nèi)存塊中。
示例性的,可以通過主線程預(yù)先讀取文檔到文本池,所述文本池可理解為一塊大內(nèi)存,多個(gè)分詞子線程負(fù)責(zé)從文本池讀入將讀存儲(chǔ)位置偏移量offset下移,然后進(jìn)行分詞。主線程與工作線程采用生產(chǎn)者消費(fèi)者模式機(jī)制,之間用信號(hào)量控制。并由主線程負(fù)責(zé)設(shè)置當(dāng)前所有分詞線程結(jié)果存放結(jié)果的內(nèi)存指針。
S230,并行對(duì)文檔進(jìn)行分詞,記錄單詞位置和單詞標(biāo)記。
S240,按照用于記錄單詞位置和單詞標(biāo)記的存儲(chǔ)數(shù)據(jù)塊順序?qū)λ龇衷~的結(jié)果依次進(jìn)行封裝,生成封裝塊和封裝塊的索引,所述索引包括:詞編號(hào)及數(shù)量。
S250,根據(jù)所述索引對(duì)單詞進(jìn)行排序。
S260,對(duì)所述封裝塊進(jìn)行拆包,對(duì)相同的單詞進(jìn)行歸類。
本實(shí)施例通過在并行對(duì)文檔進(jìn)行分詞之前,增加:對(duì)待索引文檔進(jìn)行編號(hào),并根據(jù)所述編號(hào)和文檔內(nèi)容生成數(shù)據(jù)項(xiàng);將所述數(shù)據(jù)項(xiàng)填入預(yù)設(shè)大小的內(nèi)存塊中??梢愿鶕?jù)線程分配相同的數(shù)據(jù)塊進(jìn)行分詞處理,使每個(gè)線程工作量均衡,并可保證順序一致。
實(shí)施例三
圖4是本發(fā)明實(shí)施例三提供的全文索引數(shù)據(jù)的創(chuàng)建方法的流程示意圖,本發(fā)明實(shí)施例以上述實(shí)施例為基礎(chǔ),進(jìn)一步的,在對(duì)相同的單詞進(jìn)行歸類之后,增加如下步驟:按照所述分類對(duì)單詞進(jìn)行封裝,生成封裝數(shù)據(jù)包,所述封裝數(shù)據(jù)包包括:單詞標(biāo)記和所述單詞標(biāo)記對(duì)應(yīng)的位置信息數(shù)據(jù),所述位置信息數(shù)據(jù)采用分別差分方式進(jìn)行存儲(chǔ)。
參見圖4,所述全文索引數(shù)據(jù)的創(chuàng)建方法,包括:
S310,對(duì)待索引文檔進(jìn)行編號(hào),并根據(jù)所述編號(hào)和文檔內(nèi)容生成數(shù)據(jù)項(xiàng)。
圖5是本發(fā)明實(shí)施例三提供的全文索引數(shù)據(jù)的創(chuàng)建方法中實(shí)例創(chuàng)建示意圖,參見圖4和圖5。
S320,將所述數(shù)據(jù)項(xiàng)填入預(yù)設(shè)大小的內(nèi)存塊中。
S330,并行對(duì)文檔進(jìn)行分詞,記錄單詞位置和單詞標(biāo)記。
S340,按照用于記錄單詞位置和單詞標(biāo)記的存儲(chǔ)數(shù)據(jù)塊順序?qū)λ龇衷~的結(jié)果依次進(jìn)行封裝,生成封裝塊和封裝塊的索引,所述索引包括:詞編號(hào)及數(shù)量。
S350,根據(jù)所述索引對(duì)單詞進(jìn)行排序。
S360,對(duì)所述封裝塊進(jìn)行拆包,對(duì)相同的單詞進(jìn)行歸類。
S370,按照所述分類對(duì)單詞進(jìn)行封裝,生成封裝數(shù)據(jù)包,所述封裝數(shù)據(jù)包包括:單詞標(biāo)記和所述單詞標(biāo)記對(duì)應(yīng)的位置信息數(shù)據(jù),所述位置信息數(shù)據(jù)采用分別差分方式進(jìn)行存儲(chǔ)。
在按照Term進(jìn)行分類,相同Term封裝成一個(gè)數(shù)據(jù)包,包內(nèi)數(shù)據(jù)采用的是每個(gè)Term ID對(duì)應(yīng)的doc串和位置信息串分別差分方式,可減少后期數(shù)據(jù)存儲(chǔ)的壓力。舉例如下:
數(shù)據(jù)值序列=3,5,7,11,13,17,...
壓縮編碼后=3,2,2,4,2,4,...。
本實(shí)施例通過在對(duì)相同的單詞進(jìn)行歸類之后,增加如下步驟:按照所述分類對(duì)單詞進(jìn)行封裝,生成封裝數(shù)據(jù)包,所述封裝數(shù)據(jù)包包括:單詞標(biāo)記和所述單詞標(biāo)記對(duì)應(yīng)的位置信息數(shù)據(jù),所述位置信息數(shù)據(jù)采用分別差分方式進(jìn)行存儲(chǔ)。可以有效減少后期數(shù)據(jù)存儲(chǔ)的壓力。
實(shí)施例四
圖6是本發(fā)明實(shí)施例斯提供的全文索引數(shù)據(jù)的創(chuàng)建裝置的結(jié)構(gòu)示意圖,如圖6所示,所述裝置包括:
分詞單元410,用于并行對(duì)文檔進(jìn)行分詞,記錄單詞位置和單詞標(biāo)記;
封裝單元420,用于按照用于記錄單詞位置和單詞標(biāo)記的存儲(chǔ)數(shù)據(jù)塊順序?qū)λ龇衷~的結(jié)果依次進(jìn)行封裝,生成封裝塊和封裝塊的索引,所述索引包括:詞編號(hào)及數(shù)量;
排序單元430,用于根據(jù)所述索引對(duì)單詞進(jìn)行排序;
歸類單元440,用于對(duì)所述封裝塊進(jìn)行拆包,對(duì)相同的單詞進(jìn)行歸類。
本實(shí)施例提供的全文索引數(shù)據(jù)的創(chuàng)建裝置,通過多線程并行對(duì)文檔進(jìn)行分詞,并可根據(jù)順序?qū)Ψ衷~進(jìn)行封裝并生成索引,根據(jù)所述索引對(duì)單詞進(jìn)行排序,并對(duì)拆包后的相同單詞進(jìn)行歸類,獲取最后的索引數(shù)據(jù)??梢杂行Ю糜?jì)算資源,減少分詞時(shí)間,并可對(duì)并行分詞結(jié)果排序處理,準(zhǔn)確的得到索引數(shù)據(jù)。
進(jìn)一步的,所述裝置還包括:
編號(hào)單元,用于對(duì)待索引文檔進(jìn)行編號(hào),并根據(jù)所述編號(hào)和文檔內(nèi)容生成數(shù)據(jù)項(xiàng);
填入單元,用于將所述數(shù)據(jù)項(xiàng)填入預(yù)設(shè)大小的內(nèi)存塊中。
進(jìn)一步的,所述排序單元用于:
對(duì)單詞按照單詞標(biāo)記遞增排序。
進(jìn)一步的,所述排序單元用于:
在單詞標(biāo)記相同時(shí),對(duì)所述單詞按照文本編號(hào)標(biāo)記遞增排序。
更進(jìn)一步的,所述裝置還包括:
數(shù)據(jù)包封裝單元,用于按照所述分類對(duì)單詞進(jìn)行封裝,生成封裝數(shù)據(jù)包,所述封裝數(shù)據(jù)包包括:單詞標(biāo)記和所述單詞標(biāo)記對(duì)應(yīng)的位置信息數(shù)據(jù),所述位置信息數(shù)據(jù)采用分別差分方式進(jìn)行存儲(chǔ)。
本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
最后應(yīng)說明的是:以上各實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。
以上對(duì)本發(fā)明的一個(gè)實(shí)施例進(jìn)行了詳細(xì)說明,但所述內(nèi)容僅為本發(fā)明的較佳實(shí)施例,不能被認(rèn)為用于限定本發(fā)明的實(shí)施范圍。凡依本發(fā)明申請(qǐng)范圍所作的均等變化與改進(jìn)等,均應(yīng)仍歸屬于本發(fā)明的專利涵蓋范圍之內(nèi)。