專利名稱:基于多層優(yōu)化平衡樹的數(shù)值與文本混合倒排索引算法的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息檢索、數(shù)據(jù)庫(kù)管理系統(tǒng)領(lǐng)域,特別是涉及數(shù)值與文本混合型數(shù)據(jù)管理系統(tǒng)中的索引算法。
背景技術(shù):
數(shù)據(jù)庫(kù)管理系統(tǒng)和搜索引擎技術(shù)原本起源于相互獨(dú)立的應(yīng)用需求,但是隨著實(shí)際應(yīng)用面向的數(shù)據(jù)中非結(jié)構(gòu)化數(shù)據(jù)占據(jù)比例越來越大,數(shù)據(jù)庫(kù)技術(shù)和搜索引擎技術(shù)在趨向于融合。數(shù)據(jù)庫(kù)系統(tǒng)對(duì)數(shù)值型字段采用B+樹索引來提高查詢性能,而全文檢索系統(tǒng)中使用倒排索引來提高全文查詢性能,但傳統(tǒng)倒排索引結(jié)構(gòu)僅僅適用于文本。但數(shù)據(jù)庫(kù)系統(tǒng)對(duì)于文本字段的搜索需求與搜索引擎系統(tǒng)對(duì)于數(shù)值型字段的查詢需求都在與日俱增。通用的倒排索引結(jié)構(gòu)僅僅對(duì)文本進(jìn)行分詞,建立關(guān)鍵詞詞典,詞典是一個(gè)包含關(guān)鍵詞項(xiàng)的數(shù)組。每個(gè)關(guān)鍵詞項(xiàng)的結(jié)構(gòu)如下〈詞文本值,指向倒排列表指針〉。倒排列表是一個(gè)包含許多倒排項(xiàng)的變長(zhǎng)數(shù)組。倒排項(xiàng)的結(jié)構(gòu)一般如下< 文獻(xiàn)號(hào),偏移量,其他結(jié)構(gòu)信息〉。在傳統(tǒng)的倒排結(jié)構(gòu)中,通常是把數(shù)值類型轉(zhuǎn)換為文本表示后再按文本倒排方法建立索引。但是這種方法,由于改變了數(shù)值的實(shí)際存儲(chǔ)類型,查詢條件只能基于數(shù)值的文本表示進(jìn)行字符串比較,無法對(duì)數(shù)值進(jìn)行范圍比較和精確比較,而且文本比較的性能要明顯低于數(shù)值比較的性能。本發(fā)明算法對(duì)傳統(tǒng)的倒排索引結(jié)構(gòu)進(jìn)行了增強(qiáng),可以將數(shù)值屬性的字段按數(shù)值格式存儲(chǔ)在詞典中,并在詞典中結(jié)合多層平衡樹索引,以提高數(shù)值類型在倒排索引中的查詢性能,實(shí)現(xiàn)數(shù)值的精確查詢和范圍查詢。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種面向文本與數(shù)值混合數(shù)據(jù)類型的基于多層優(yōu)化平衡樹倒排索引算法。本發(fā)明的目的是通過以下技術(shù)方案來實(shí)現(xiàn)的1.概述本小節(jié)給出數(shù)值與文本混合倒排索引所涉及的術(shù)語與背景知識(shí)的描述。給定一個(gè)包含N個(gè)文檔的數(shù)據(jù)集合,每個(gè)文檔包含多個(gè)文本字段和數(shù)值字段(例如價(jià)格、日期、年齡等)。在信息檢索系統(tǒng)中,文本字段和數(shù)值字段都可能出現(xiàn)多值或空值的情況。為便于論述,先假定每個(gè)文檔的每個(gè)數(shù)值字段最多僅出現(xiàn)一個(gè)值。本發(fā)明論述的方法可以方便地?cái)U(kuò)展到一個(gè)數(shù)值字段中包含多個(gè)值的情形??紤]可能的數(shù)值查詢的情況。文本與數(shù)值的混合查詢中,一般是以全文檢索為主條件,輔之以數(shù)值查詢條件的約束。數(shù)值查詢可分為精確查詢和范圍查詢。范圍查詢可以是單邊的,定義為[V,⑴]或[-⑴,V];也可以是雙邊的,定義為[vmin,vmax]。雙邊查詢是更一般的范圍查詢方式,因此我們僅僅考慮雙邊范圍查詢條件。精確查詢可表達(dá)為雙邊的閉區(qū)間范圍查詢,是范圍查詢的一種特例,因此數(shù)值查詢條件的討論可以僅僅考慮范圍查詢
3的情形。
在全文檢索應(yīng)用中,數(shù)值查詢通常只作為過濾條件,而不參與相關(guān)度計(jì)算;相關(guān)度計(jì)算以查詢條件中的文本查詢?yōu)橐罁?jù)。倒排索引結(jié)構(gòu)是全文檢索系統(tǒng)中普遍使用索引結(jié)構(gòu),在許多論文中已有詳細(xì)描述,因此在本文中不會(huì)對(duì)倒排索引的一般結(jié)構(gòu)的描述做詳盡展開,僅僅給出文本倒排索引結(jié)構(gòu)的簡(jiǎn)要說明。本發(fā)明側(cè)重于研發(fā)如何將高效的數(shù)值查詢整合到一般的文本倒排索引模型中去。2.普通文本倒排索引結(jié)構(gòu)文本倒排索引由詞典和倒排列表兩部分構(gòu)成。詞典是一個(gè)包含關(guān)鍵詞項(xiàng)的數(shù)組。每個(gè)關(guān)鍵詞項(xiàng)的結(jié)構(gòu)如下< 詞文本值,指向倒排列表指針>。倒排列表是一個(gè)包含許多倒排項(xiàng)的變長(zhǎng)數(shù)組。倒排項(xiàng)的結(jié)構(gòu)一般如下< 文獻(xiàn)號(hào), 偏移量,其他結(jié)構(gòu)信息〉。倒排索引一般存放于磁盤等二級(jí)存儲(chǔ)設(shè)備中。文本字段值通過詞法分析切分為多個(gè)關(guān)鍵詞項(xiàng),包括關(guān)鍵詞的文本值以及所在文獻(xiàn)號(hào)、字段、字段內(nèi)偏移量。關(guān)鍵詞項(xiàng)先在內(nèi)存中建立倒排列表,內(nèi)存中的倒排列表一般是個(gè)以詞的文本值做哈希影射的哈希表,哈希表項(xiàng)的結(jié)構(gòu)式 < 詞文本值,倒排列表指針 >。內(nèi)存倒排列表滿了后就寫入磁盤的倒排索引。3.基于二叉樹的數(shù)值文本混合型倒排索引結(jié)構(gòu)考慮在普通文本倒排索引結(jié)構(gòu)的基礎(chǔ)上,對(duì)數(shù)值類型的值進(jìn)行增強(qiáng)處理,使該結(jié)構(gòu)適用于數(shù)值的范圍查詢。最直接的方法是用數(shù)值表示替換文本關(guān)鍵字放入詞典中。字段中的每個(gè)數(shù)值都占據(jù)詞典的一個(gè)項(xiàng) < 數(shù)值,指向倒排列表的指針 >,并指向一個(gè)倒排列表 < 文獻(xiàn)號(hào),數(shù)值 >。為了使得數(shù)值倒排索引的性能不隨數(shù)值的分布而發(fā)生變化,我們考慮用空間換時(shí)間的方法。 假定以上描述的數(shù)值倒排索引結(jié)構(gòu)為level-Ο,在此層上我們創(chuàng)建冗余的層來存儲(chǔ)數(shù)值倒排索引。每一層的詞典項(xiàng)都是通過合并上層相鄰詞典項(xiàng)的倒排列表而獲得。假設(shè),Ievel-O包含k個(gè)倒排列表,詞典項(xiàng)的數(shù)值為Y0 < V1 <-< Vk ;那么,Ievel-I包含k/2個(gè)倒排列表,第j個(gè)倒排列表為合并Ievel-O的第2j和第2j+l個(gè)倒排列表的結(jié)果。合并結(jié)果按文獻(xiàn)號(hào)排序。依次類推,我們共得到[log2k]_l層。最頂層包含2個(gè)倒排列表。每一層都完全索引了數(shù)值字段中的每一條記錄和每一個(gè)值。在該索引結(jié)構(gòu)下,任意單邊的數(shù)值查詢[V,⑴]或[_⑴,ν],只要找到ν所在的層, 就可以最多讀取一次數(shù)值倒排列表;任意雙邊的數(shù)值查詢[vmin,VmaJ,最多讀取二次數(shù)值倒排列表?;诙鏄涞臄?shù)值倒排索引結(jié)構(gòu)的Ievel-O仍然依賴于數(shù)值分布。在數(shù)值分布的極限情形下(每個(gè)文檔一個(gè)數(shù)值),Ievel-O將包含N個(gè)長(zhǎng)度為1的倒排列表,整個(gè)索引具有[log/]-l層。此結(jié)構(gòu)仍然會(huì)導(dǎo)致范圍查詢的性能隨著數(shù)值分布分散而明顯下降。4.基于多層優(yōu)化平衡樹的數(shù)值文本混合型倒排索引結(jié)構(gòu)改進(jìn)基于二叉樹的方法,使Ievel-O的每個(gè)節(jié)點(diǎn)包含多個(gè)倒排列表,并引入合并因子C。計(jì)算c和b值與索引代價(jià)、查詢代價(jià)、空間膨脹率之間的關(guān)系,從而求得最優(yōu)的參數(shù)值,得到優(yōu)化性能的數(shù)值文本混合型倒排索引結(jié)構(gòu)。定義N為文檔總數(shù),b為Ievel-O的倒排列表個(gè)數(shù),c為合并因子,L為附加層個(gè)數(shù)。數(shù)值詞典部分由多層平衡樹構(gòu)成,平衡樹的節(jié)點(diǎn)構(gòu)造如圖2所示。每個(gè)節(jié)點(diǎn)的結(jié)構(gòu)中包括最小值和最大值,以及指向一個(gè)數(shù)值倒排列表。數(shù)值倒排列表中僅包含文獻(xiàn)號(hào)。Ievel-O具有b個(gè)倒排列表,每個(gè)文獻(xiàn)號(hào)出現(xiàn)且僅出現(xiàn)在一個(gè)倒排列表里。對(duì)于層號(hào)j(j = 1,…,L),構(gòu)造b/V個(gè)倒排列表,列表大小為(Ncj)/b,倒排列表 i(i = 0,…,b/cj-l)由第j_l層的倒排列表ic,…,(i+l)c-l合并而成。
圖1為基于多層優(yōu)化平衡樹的數(shù)值文本混合倒排索引結(jié)構(gòu)圖。圖2為數(shù)值詞典部分的多層優(yōu)化平衡樹的結(jié)構(gòu)。
具體實(shí)施例方式本節(jié)說明基于多層優(yōu)化平衡樹的數(shù)值與文本混合倒排索引算法的具體實(shí)施步驟。1.索引構(gòu)造步驟(1).第0層節(jié)點(diǎn)的創(chuàng)建a.對(duì)于文檔集N中的每個(gè)對(duì) < 文獻(xiàn)號(hào),數(shù)值 > 按值進(jìn)行排序,令V為所有唯一值的
皇A
朱口b.將a步中排序的列表分為b塊,每塊長(zhǎng)度為N/b。將每塊的最小值(第一個(gè)數(shù)值)和最大值(最后一個(gè)數(shù)值),存入數(shù)組Tmin和Tmax。c.對(duì)于每一塊創(chuàng)建一個(gè)倒排列表,按文獻(xiàn)號(hào)排序。滿足對(duì)1 <= i < j <= b, 塊i中的所有數(shù)值不大于塊j中的所有數(shù)值。第0層節(jié)點(diǎn)的創(chuàng)建性能取決于a步驟,時(shí)間復(fù)雜度為=O(NlogN),空間復(fù)雜度為 O(N)。(2).附加層的創(chuàng)建
a.對(duì)于文檔集N中的每個(gè)對(duì) < 文獻(xiàn)號(hào),數(shù)值 > 按文獻(xiàn)號(hào)排序,放入緩存1b.對(duì)于文檔集N中的每個(gè)對(duì) < 文獻(xiàn)號(hào),數(shù)值 > 按值排序,放入緩存2,并創(chuàng)建數(shù)組 Tmin 和 TmaxOC.對(duì)于每一層j = 0,…,L 將緩存分隔為b/V個(gè)列表。初始化所有子倒排列表。 掃描緩存1,從第0層列表中獲取對(duì)應(yīng)文獻(xiàn)號(hào),并寫入倒排列表的空位中。d.將每層寫入磁盤上。附加層的創(chuàng)建時(shí)間復(fù)雜度為0(N[logN+L])。2.數(shù)值查詢步驟(5)查詢第0層的Tmin和Tmax表(6)找到與查詢條件范圍r = [Vmin,VmaJ相匹配的最左和最右的第0層節(jié)點(diǎn),創(chuàng)建帶過濾條件的倒排列表(7)從最大層開始,找到最長(zhǎng)的符合查詢條件的倒排列表。層i (i > 0)的節(jié)點(diǎn)被
5選中,當(dāng)前僅當(dāng)它的值集范圍滿足查詢條件的約束,同時(shí)在i+ι層它的被包含節(jié)點(diǎn)中包含一些數(shù)值不滿足查詢條件 的約束。 (8)將(3)中選中的倒排列表按文獻(xiàn)號(hào)進(jìn)行合并。
權(quán)利要求
1.一種基于多層優(yōu)化平衡樹的數(shù)值與文本混合倒排索引方法,其特征在于在普通文本倒排索引結(jié)構(gòu)的基礎(chǔ)上,對(duì)數(shù)值倒排詞典的二叉樹結(jié)構(gòu)進(jìn)行增強(qiáng),數(shù)值詞典部分引入多層優(yōu)化平衡樹,使得查詢性能不會(huì)隨著數(shù)值的分布范圍而急劇下降。該混合索引結(jié)構(gòu)如圖 1所示。
2.如權(quán)利要求1所述的基于多層優(yōu)化平衡樹的數(shù)值與文本混合倒排索引方法,其特征在于,索引的結(jié)構(gòu)如下數(shù)值詞典部分由多層平衡樹構(gòu)成,平衡樹的節(jié)點(diǎn)構(gòu)造如圖2所示。每個(gè)節(jié)點(diǎn)的結(jié)構(gòu)中包括最小值和最大值,以及指向一個(gè)數(shù)值倒排列表。數(shù)值倒排列表中僅包含文獻(xiàn)號(hào)。平衡樹的第O層將文檔N的值集范圍V[Vmin,Vmax]分隔為b個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)表示V的一個(gè)子集。設(shè)c為合并因子。對(duì)于平衡樹的第j層(j = 1,…,L),構(gòu)造b/cj個(gè)節(jié)點(diǎn),節(jié)點(diǎn)個(gè)數(shù)為(Ncj)/b,節(jié)點(diǎn)所指向的倒排列表i(i = 0,…,b/cj-1)由第j_l層的倒排列表ic,…, (i+l)c-l合并而成。
3.如權(quán)利要求2所述的基于多層優(yōu)化平衡樹的數(shù)值與文本混合倒排索引方法,其特征在于,索引的構(gòu)造步驟如下(1).第O層節(jié)點(diǎn)的創(chuàng)建a.對(duì)于文檔集N中的每個(gè)對(duì)< 文獻(xiàn)號(hào),數(shù)值 > 按值進(jìn)行排序,令V為所有唯一值的集合b.將a步中排序的列表分為b塊,每塊長(zhǎng)度為N/b。將每塊的最小值(第一個(gè)數(shù)值) 和最大值(最后一個(gè)數(shù)值),存入數(shù)組Tmin和Tmax。c.對(duì)于每一塊創(chuàng)建一個(gè)倒排列表,按文獻(xiàn)號(hào)排序。滿足對(duì)1< = i < j < = b,塊i 中的所有數(shù)值不大于塊j中的所有數(shù)值。第O層節(jié)點(diǎn)的創(chuàng)建性能取決于a步驟,時(shí)間復(fù)雜度為=O(NlogN),空間復(fù)雜度為0(N)。(2).附加層的創(chuàng)建a.對(duì)于文檔集N中的每個(gè)對(duì)< 文獻(xiàn)號(hào),數(shù)值 > 按文獻(xiàn)號(hào)排序,放入緩存1b.對(duì)于文檔集N中的每個(gè)對(duì)< 文獻(xiàn)號(hào),數(shù)值 > 按值排序,放入緩存2,并創(chuàng)建數(shù)組Tmin和T1 max °C.對(duì)于每一層j=0,…,L 將緩存分隔為b/V個(gè)列表。初始化所有子倒排列表。掃描緩存1,從第O層列表中獲取對(duì)應(yīng)文獻(xiàn)號(hào),并寫入倒排列表的空位中。d.將每層寫入磁盤上。附加層的創(chuàng)建時(shí)間復(fù)雜度為0(N[logN+L])。
4.如權(quán)利要求2所述的基于多層優(yōu)化平衡樹的數(shù)值與文本混合倒排索引方法,其特征在于,基于該索引結(jié)構(gòu)的數(shù)值查詢步驟如下(1)查詢第O層的Tmin和Tmax表(2)找到與查詢條件范圍r=[Vmin,VmaJ相匹配的最左和最右的第O層節(jié)點(diǎn),創(chuàng)建帶過濾條件的倒排列表(3)從最大層開始,找到最長(zhǎng)的符合查詢條件的倒排列表。層i(i>0)的節(jié)點(diǎn)被選中, 當(dāng)前僅當(dāng)它的值集范圍滿足查詢條件的約束,同時(shí)在i+Ι層它的被包含節(jié)點(diǎn)中包含一些數(shù)值不滿足查詢條件的約束。(4)將(3)中選中的倒排列表按文獻(xiàn)號(hào)進(jìn)行合并。
全文摘要
本發(fā)明實(shí)現(xiàn)了一種基于多層優(yōu)化平衡樹的數(shù)值與文本的混合倒排索引算法。傳統(tǒng)的文本倒排索引僅僅支持對(duì)自由文本的索引,數(shù)值內(nèi)容通常轉(zhuǎn)換為文本后按照文本內(nèi)容建立倒排索引。本發(fā)明對(duì)傳統(tǒng)的文本倒排索引算法進(jìn)行了優(yōu)化和擴(kuò)展,使之能夠支持?jǐn)?shù)值與文本的混合型數(shù)據(jù)的索引,并在查詢性能、索引空間、構(gòu)建性能方面實(shí)現(xiàn)合理的平衡。本發(fā)明的索引算法,適合于使用在混合型的數(shù)據(jù)管理引擎中,提高數(shù)值與文本混合型數(shù)據(jù)的復(fù)合查詢性能。
文檔編號(hào)G06F17/30GK102402540SQ201010282299
公開日2012年4月4日 申請(qǐng)日期2010年9月15日 優(yōu)先權(quán)日2010年9月15日
發(fā)明者鄭益 申請(qǐng)人:浙江天宇信息技術(shù)有限公司