專利名稱:用于最優(yōu)化索引搜索的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的各方面涉及一種最優(yōu)化索引搜索設(shè)備和方法,更具體地講,涉 及一種使用增加存儲(chǔ)空間的效率并提供各種操作的索引的搜索方法和最優(yōu)化 索引搜索設(shè)備。
背景技術(shù):
基于元數(shù)據(jù)的用戶界面(UI)已經(jīng)隨著數(shù)字內(nèi)容技術(shù)的進(jìn)步和不斷增長(zhǎng) 的普及性而變得流行。當(dāng)存在大量數(shù)據(jù)時(shí),難以僅使用文件夾和文件名來搜 索內(nèi)容。然而,基于元數(shù)據(jù)的UI能夠改變搜索條件來搜索內(nèi)容,并使得用戶 能夠容易地記住元數(shù)據(jù)值。
具體地講,在基于元數(shù)據(jù)的瀏覽中,基于多層次聚類的UI使得用戶能夠 更方便地理解內(nèi)容的分布,并且能夠通過應(yīng)用多種搜索條件來更有效地訪問 期望的內(nèi)容。基于多層次聚類的UI對(duì)按層次分類的內(nèi)容進(jìn)行聚類,并使用索 引以便在聚類之間移動(dòng)。
聚類指的是將相似的對(duì)象分為一組。在多層次聚類中,根據(jù)第N條件 (N21 )劃分的每個(gè)聚類可根據(jù)第(N+l )條件被進(jìn)一步劃分為更詳細(xì)的聚類。 內(nèi)容瀏覽器通過^^據(jù)預(yù)定條件將整個(gè)內(nèi)容劃分為多個(gè)聚類并隨后將劃分的內(nèi) 容提供給用戶,來選擇基于多層次聚類的UI
圖1示出了存儲(chǔ)圖像信息的表的圖解。如圖1所示,對(duì)于表的每條記錄, 存在與關(guān)于年、月、日的信息對(duì)應(yīng)的字段12。由該表管理的圖像經(jīng)由多層次 聚類的UI,根據(jù)基于年、月、日字段12的三個(gè)層次中的每一層次被進(jìn)行聚 類,并隨后被顯示在屏幕上。按照標(biāo)題對(duì)最低層次(即,"日")的聚類進(jìn)行 排序和顯示。為了實(shí)現(xiàn)多層次聚類的UI,應(yīng)該從數(shù)據(jù)庫中提取包括在聚類中 的圖像記錄。
如果期望瀏覽包括在2006年(第一層次)5月(第二層次)1日(第三 層次)中的相片,可通過以下查詢將記錄顯示在屏幕上,即,"Select*fromTable where year = 2006 and month = 5 and day = 1 order by title"。
當(dāng)包括關(guān)于若干個(gè)字段的預(yù)定條件的查詢(諸如上述查詢)在沒有適當(dāng) 索引的情況下被處理時(shí),根據(jù)圖像記錄數(shù)量的增加,需要更長(zhǎng)的時(shí)間來處理 查詢。當(dāng)在查詢中使用等號(hào)(=)并且存在關(guān)于最低字段的排序條件時(shí),使用 多列B+樹索引。多列B+樹索引組合相應(yīng)字段并將所述相應(yīng)字段作為索引的 關(guān)鍵字來使用。
圖2描述了多列B+樹索引20的結(jié)構(gòu)。如圖2所示,如果使用多列B+ 樹索引20,則當(dāng)選擇年、月、日作為特定值時(shí),滿足預(yù)定條件的索引的條目 已經(jīng)按照標(biāo)題順序被排列并且彼此相鄰。因此,沒有可減少查詢花費(fèi)的時(shí)間 的另外的排列成本。
當(dāng)瀏覽第二層次(月)或第一層次(年),而非第三層次(日)時(shí),可使
用多列B+樹索引。然而,因?yàn)閮H使用多列B+樹索引20獲得按照每一高層次 顯示的聚類名需要更長(zhǎng)的時(shí)間,所以需要附加索引(如圖3所示)。為了使用 多列B+樹索引20獲得將在第一層次上顯示的聚類,應(yīng)該讀取索引的所有條 目,這不能滿足交互式屏幕配置所需的響應(yīng)時(shí)間。
圖3描述了用于存儲(chǔ)多層次聚類的多列B+樹索引。如上所述,為了減少 響應(yīng)時(shí)間,需要附加索引30以快速搜索存在于相應(yīng)字段中的值。當(dāng)用戶希望 顯示配置第一層次的聚類時(shí),使用第一層次聚類的名稱作為索引。如果用戶 希望顯示包括在預(yù)定聚類(例如,與2005對(duì)應(yīng)的聚類)中的記錄時(shí),多列 B+樹索引連續(xù)讀取2005的記錄("年=2005")。
當(dāng)在第二層次中瀏覽聚類時(shí),需要"年、月"的多列B+樹索引40以減少 響應(yīng)時(shí)間。當(dāng)在第三層次中瀏覽聚類時(shí),需要"年、月、曰"的多列B+樹索引 50。如果配置全部層次的字段的數(shù)量為N,則所需的多列B+樹索引的總數(shù)為 N。因此,第一層次關(guān)鍵字值被重復(fù)地存儲(chǔ)在N個(gè)索引中,并且第二層次關(guān) 鍵字值被存儲(chǔ)在N-l個(gè)索引中,這導(dǎo)致存儲(chǔ)空間的浪費(fèi)。
發(fā)明內(nèi)容
本發(fā)明的各方面提供了 一種使用增加存儲(chǔ)空間的效率并提供各種操作的 更有效的索引的最優(yōu)化索引搜索設(shè)備和方法。
根據(jù)本發(fā)明的一方面,提供了一種最優(yōu)化索引搜索方法,包括在索引
中搜索與第一關(guān)鍵字值對(duì)應(yīng)的第一字段;當(dāng)輸入搜索請(qǐng)求時(shí),基于第一字段 在索引中搜索與搜索請(qǐng)求對(duì)應(yīng)的第二字段;和提取與第二字段對(duì)應(yīng)的標(biāo)識(shí)符。
根據(jù)本發(fā)明的另一方面,提供了一種最優(yōu)化索引搜索設(shè)備,包括搜索 單元,在索引中搜索與第一關(guān)鍵字值對(duì)應(yīng)的第一字段;并且當(dāng)輸入搜索請(qǐng)求 時(shí),基于第一字段搜索與搜索請(qǐng)求對(duì)應(yīng)的第二字段;和提取單元,提取與第 二字l殳對(duì)應(yīng)的標(biāo)識(shí)符。
根據(jù)本發(fā)明的另 一方面,提供了 一種用于最優(yōu)化搜索與用戶輸入的搜索 請(qǐng)求層次對(duì)應(yīng)的字段的索引的單元,所述單元包括第一字段,存儲(chǔ)第一層 次的第一關(guān)鍵字值;第二字段,存儲(chǔ)第二層次的第二關(guān)鍵字值;第一指針, 指向包含不同于所述第一關(guān)鍵字值的第一層次的另一第一關(guān)鍵字值的另一單 元的另一節(jié)點(diǎn);第二指針,指向包含不同于所述第二關(guān)鍵字值的第二層次的 另一第二關(guān)^;字值的另一單元的另一節(jié)點(diǎn),其中,用于識(shí)別內(nèi)容的元數(shù)據(jù)或
內(nèi)容的標(biāo)識(shí)符對(duì)應(yīng)于所述第一關(guān)鍵字值和所述第二關(guān)鍵字值。
根據(jù)本發(fā)明的另一方面,提供了一種最優(yōu)化索引搜索方法,包括在索 引中搜索與第一關(guān)鍵字值對(duì)應(yīng)的第一字段;接收對(duì)低于第一字段的層次的指 定層次的搜索操作;基于第一字段對(duì)與指定層次對(duì)應(yīng)的第二字段執(zhí)行搜索操 作;和提取與存儲(chǔ)在第二字段中的第二關(guān)鍵字值對(duì)應(yīng)的標(biāo)識(shí)符。
在下面的描述中將部分地闡明本發(fā)明另外的方面和/或優(yōu)點(diǎn),通過描述部 分地將會(huì)變得更加清楚,或者通過實(shí)施本發(fā)明可以了解。
通過下面結(jié)合附圖對(duì)實(shí)施例進(jìn)行的描述,本發(fā)明的這些和/或其他方面和 優(yōu)點(diǎn)將會(huì)變得清楚和更易于理解,其中 圖1示出了存儲(chǔ)圖像信息的表的圖解; 圖2描述了多列B+樹索引的結(jié)構(gòu); 圖3描述了用于存儲(chǔ)多層次聚類的多列B+樹索引; 圖4是顯示根據(jù)本發(fā)明實(shí)施例的最優(yōu)化索引搜索設(shè)備的框圖; 圖5是顯示根據(jù)本發(fā)明實(shí)施例的最優(yōu)化索引搜索方法的流程圖; 圖6描述了根據(jù)本發(fā)明實(shí)施例的索引的葉節(jié)點(diǎn); 圖7是顯示根據(jù)本發(fā)明實(shí)施例的索引節(jié)點(diǎn)的結(jié)構(gòu)的示圖8描述了根據(jù)本發(fā)明實(shí)施例的索引的葉節(jié)點(diǎn)的單元(cell)結(jié)構(gòu); 圖9示出了根據(jù)本發(fā)明實(shí)施例的單元結(jié)構(gòu)的示例;和 圖10描述了根據(jù)本發(fā)明實(shí)施例的用于索引搜索的UI。
具體實(shí)施例方式
現(xiàn)在對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)的描述,其示例表示在附圖中,其中,相 同的標(biāo)號(hào)始終表示相同組件。下面通過參照附圖對(duì)實(shí)施例進(jìn)行描述以解釋本 發(fā)明。
圖4是顯示根據(jù)本發(fā)明實(shí)施例的最優(yōu)化索引搜索設(shè)備200的框圖。最優(yōu) 化索引搜索設(shè)備200包括存儲(chǔ)單元205、管理單元207、搜索單元210、 UI 提供單元215、提取單元220和內(nèi)容提供單元230。
存儲(chǔ)單元205存儲(chǔ)索引中的關(guān)鍵字值和標(biāo)識(shí)符。關(guān)鍵字值可存儲(chǔ)在索引 的每個(gè)字段中,標(biāo)識(shí)符可以是記錄ID (RID)。索引的每個(gè)字段存儲(chǔ)指示節(jié)點(diǎn) (上一關(guān)鍵字值和下一關(guān)鍵字值存儲(chǔ)在其中)的一個(gè)或多個(gè)指針。如果上一 關(guān)^t字值和/或下一關(guān)lt字值存在于相同的節(jié)點(diǎn)中,則可省略存儲(chǔ)指針。將參 照?qǐng)D6至圖9描述根據(jù)本發(fā)明各方面的索引結(jié)構(gòu)。
管理單元207管理存儲(chǔ)在存儲(chǔ)單元205中的值。例如,管理單元207排 列、添加、刪除和更新存^f諸的值。
搜索單元210在索引中搜索相應(yīng)字段。如果輸入請(qǐng)求,則搜索單元210 搜索與請(qǐng)求對(duì)應(yīng)的層次的字段。搜索單元210可包括UI提供單元215,或者 UI提供單元215可被單獨(dú)地布置。
UI提供單元215為用戶提供用戶界面(UI),以便用戶可通過提供的UI 搜索與關(guān)鍵字值對(duì)應(yīng)的字段。也就是說,當(dāng)用戶通過UI提供單元215選擇關(guān) 鍵字值時(shí),經(jīng)由搜索單元210發(fā)現(xiàn)相應(yīng)字段,這將在圖10中示出。
提取單元220提取與發(fā)現(xiàn)的字段對(duì)應(yīng)的標(biāo)識(shí)符。標(biāo)識(shí)符可以是記錄ID (RID )。提取單元220提取與關(guān)鍵字值對(duì)應(yīng)的RID。
內(nèi)容提供單元230根據(jù)標(biāo)識(shí)符(可以是RID )為用戶提供內(nèi)容的元數(shù)據(jù) 或內(nèi)容。將參照?qǐng)D10描述包括在最優(yōu)化索引搜索設(shè)備200中的各種操作的示 例。
這里使用的術(shù)語"單元"的指的是,但不限于,執(zhí)行特定任務(wù)的軟件和硬 件組件(諸如現(xiàn)場(chǎng)可編程門陣列(FPGA)或?qū)S眉呻娐?ASIC))。模塊
可以被配置以駐留在可尋址的存儲(chǔ)介質(zhì)上,并且可^C配置以在一個(gè)或多個(gè)處
理器上執(zhí)行。因此,舉例來說,模塊可以包括諸如軟件組件、面向?qū)ο蟮?br>
軟件組件、類組件和任務(wù)組件的組件、進(jìn)程、函數(shù)、屬性、過程、子程序、 程序代碼段、驅(qū)動(dòng)程序、固件、微碼、電路、數(shù)據(jù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)、表、 數(shù)組和變量。在組件和模塊中提供的功能可被組合為更少的組件和模塊,或 者可進(jìn)一步被分離成另外的組件和模塊。
圖5是顯示根據(jù)本發(fā)明實(shí)施例的最優(yōu)化索引搜索方法的流程圖。參照?qǐng)D 4和圖5,將描述搜索內(nèi)容的方法。在操作S501中,搜索單元210在索引中 搜索與預(yù)定關(guān)鍵字值對(duì)應(yīng)的字段??芍付ㄋ阉麝P(guān)鍵字的層次。也就是說,當(dāng) UI被提供給用戶時(shí),用戶可經(jīng)由UI來指定關(guān)鍵字的層次,并且通過搜索單 元210發(fā)現(xiàn)與關(guān)鍵字值對(duì)應(yīng)的字段。用戶可通過移動(dòng)到搜索到的字段并輸入 搜索請(qǐng)求來指定層次。當(dāng)經(jīng)由UI輸入請(qǐng)求時(shí),搜索單元210在索引中搜索與 請(qǐng)求對(duì)應(yīng)的層次的字段。圖10中示出了更具體的示例。
在操作S511中,提取單元220提取與發(fā)現(xiàn)的字段對(duì)應(yīng)的標(biāo)識(shí)符(諸如 RID)。
因此,在^:作S521中,內(nèi)容提供單元230才艮據(jù)標(biāo)識(shí)符向用戶提供內(nèi)容的 元數(shù)據(jù)或內(nèi)容。
圖6描述了根據(jù)本發(fā)明實(shí)施例的索引的葉節(jié)點(diǎn)。如圖6所示,假設(shè)在索 引的葉節(jié)點(diǎn)中,第一層次字段具有數(shù)字值,第二層次字段具有英文字母,第 三字段具有韓文字母。然而,應(yīng)該理解,其他和/或不同的值類型、字符類型 或符號(hào)類型可用于所述字段和不同層次的字段(例如,第一層次字段可以是 英文字母,第二層次字段可以是數(shù)字值,第三層次字段可以是希臘符號(hào),第 四層次字段可以是英文字母)。此時(shí),使用關(guān)鍵字和RID配置的條目可以被 存儲(chǔ)為單元(cell)結(jié)構(gòu)600。
在傳統(tǒng)技術(shù)中,整個(gè)關(guān)鍵字被識(shí)別為二進(jìn)制字符串并劃分前綴。然而, 根據(jù)本發(fā)明的各方面,可通過索引中的字段來區(qū)分關(guān)鍵字。例如,在傳統(tǒng)技 術(shù)中,"2005, IO,,和"2005, 12"的前綴是"2005, 1*,,,而根據(jù)本發(fā)明的各方 面則是"2005,。,因此,"1, a, 7},, 602和"b, 7f" 604本來是"1, a, 7p, 和"1, b, 7p,,但通過省略相同的層次字段而被存儲(chǔ)。
在存儲(chǔ)在節(jié)點(diǎn)100 (節(jié)點(diǎn)的頁編號(hào)(page number"中的"3, a, U"606 中,第一層次關(guān)鍵字"3"具有存儲(chǔ)在相同節(jié)點(diǎn)100中的上一關(guān)鍵字"2"和存儲(chǔ)
在節(jié)點(diǎn)300中的下一關(guān)鍵字"4"。因此,第一層次關(guān)鍵字"3"指示該關(guān)鍵字所 屬的節(jié)點(diǎn)100 (其中存儲(chǔ)有上一關(guān)鍵字)和作為存儲(chǔ)下一關(guān)鍵字的節(jié)點(diǎn)的節(jié) 點(diǎn)300。也就是說,索引的每個(gè)字段具有指示存儲(chǔ)上一關(guān)鍵字和存儲(chǔ)下一關(guān) 鍵字的節(jié)點(diǎn)的指針,從而可快速地發(fā)現(xiàn)上一關(guān)鍵字和下一關(guān)鍵字。
當(dāng)"3, a,斗"存儲(chǔ)在節(jié)點(diǎn)200中時(shí),"3, a,,608和"斗"610被劃分 和存儲(chǔ)。也就是說,"3, a, 4" 607和"3, a,叫,,之間的不同是第三字段 。因此,只有"斗,,610被存儲(chǔ)。當(dāng)基于葉節(jié)點(diǎn)發(fā)現(xiàn)關(guān)鍵字時(shí),仍將"3, a,, 608作為節(jié)點(diǎn)前綴單獨(dú)存儲(chǔ)在節(jié)點(diǎn)200中,以在沒有參考其他節(jié)點(diǎn)(即,節(jié) 點(diǎn)100)的情況下得知高層次的關(guān)鍵字值。例如,當(dāng)在節(jié)點(diǎn)300的"4, a,屮 612中發(fā)現(xiàn)第三層次關(guān)鍵字"4"時(shí),在沒有參考其他節(jié)點(diǎn)的情況下,可得 知上一關(guān)鍵字是"3, d,叫"614。然而,即使高層次關(guān)鍵字值與上一單元的 關(guān)鍵字值相同,根據(jù)其他方面應(yīng)該理解,單元也沒有被劃分和存儲(chǔ),而是被 整個(gè)一起存儲(chǔ)(例如,"3, a,斗,,),以在沒有參考其他節(jié)點(diǎn)的情況下得知高 層次的關(guān)鍵字值。在下文中,將參照?qǐng)D7描述索引的詳細(xì)的節(jié)點(diǎn)結(jié)構(gòu)。
圖7是顯示根據(jù)本發(fā)明實(shí)施例的索引節(jié)點(diǎn)的結(jié)構(gòu)的示圖。索引結(jié)構(gòu)的特 征可以是B+樹。在1970年提出的B樹包括一些變換的B樹版本(諸如,B+ 樹,B4對(duì)和前綴B樹)。索引可以是甚至能夠有效地存儲(chǔ)多層次聚類關(guān)鍵字 的變換的B+樹。此外,因?yàn)闊o論用戶搜索什么關(guān)鍵字,都可以在葉節(jié)點(diǎn)中發(fā) 現(xiàn)相應(yīng)的關(guān)鍵字并且搜索時(shí)間將會(huì)是相同的,所以索引可以是平衡樹。
使用關(guān)鍵字和RID配置的條目可以被存儲(chǔ)為單元結(jié)構(gòu)。因?yàn)殛P(guān)鍵字的長(zhǎng) 度是可變的,所以單元被劃分為存儲(chǔ)實(shí)際數(shù)據(jù)的區(qū)域704和存儲(chǔ)數(shù)據(jù)偏移 (offset)的區(qū)域702 (存儲(chǔ)每個(gè)關(guān)鍵字的長(zhǎng)度),以存儲(chǔ)具有可變長(zhǎng)度的關(guān)鍵 字。因此,存儲(chǔ)空間被可變地使用。也就是說,用于存儲(chǔ)偏移的區(qū)域702從 左向右彈性地存儲(chǔ)數(shù)據(jù),用于存儲(chǔ)數(shù)據(jù)的區(qū)域704從右向左彈性地存儲(chǔ)數(shù)據(jù), 從而可有效地使用存儲(chǔ)空間。
與此相反,如果兩個(gè)區(qū)域702和704的大小固定,則當(dāng)實(shí)際數(shù)據(jù)的長(zhǎng)度 較長(zhǎng)時(shí),區(qū)域704可能迅速填滿,當(dāng)實(shí)際數(shù)據(jù)的長(zhǎng)度相對(duì)較短時(shí),區(qū)域702 可能是"滿",而區(qū)域704仍然是空的。因此,不能有效地使用存儲(chǔ)空間。
存儲(chǔ)節(jié)點(diǎn)前綴的偏移的區(qū)域706存儲(chǔ)節(jié)點(diǎn)前綴。如果節(jié)點(diǎn)不需要節(jié)點(diǎn)前 綴,則可以將節(jié)點(diǎn)前綴偏移區(qū)域706初始化為0。
每個(gè)字段可存儲(chǔ)指示包含上一關(guān)鍵字的節(jié)點(diǎn)和包含下一關(guān)鍵字的節(jié)點(diǎn)的 指針。如果為所有關(guān)^fc字保留兩個(gè)4字節(jié)的指針,則可能減小用于存儲(chǔ)實(shí)際 數(shù)據(jù)的空間。因此。如果上一關(guān)鍵字和/或下一關(guān)鍵字與當(dāng)前關(guān)鍵字存在于同 一節(jié)點(diǎn)中,則索引的每個(gè)字段可省略存儲(chǔ)指示存儲(chǔ)上一關(guān)鍵字或下一關(guān)鍵字 的節(jié)點(diǎn)的指針,以確保用于存儲(chǔ)實(shí)際數(shù)據(jù)的較大的空間。如果第i層次的上 一/下一關(guān)鍵字存在于當(dāng)前節(jié)點(diǎn)中,則第(i+l)層次的上一/下一關(guān)鍵字也存 在于當(dāng)前節(jié)點(diǎn)中。如果第i層次的上一/下一關(guān)鍵字存在于另一節(jié)點(diǎn)中,則第 (i+l )層次的上一/下一關(guān)^t字也存在于另 一節(jié)點(diǎn)中。這一原理可用于確???間。這里,假設(shè)第一層次是最高層次。
使用低層次從屬于高層次的事實(shí),可基于發(fā)現(xiàn)的(或當(dāng)前的)關(guān)鍵字省 略存儲(chǔ)指示存儲(chǔ)上一關(guān)鍵字或下一關(guān)鍵字的節(jié)點(diǎn)的指針。當(dāng)控制搜索的層次 時(shí),因?yàn)楦邔哟侮P(guān)鍵字和低層次關(guān)鍵字被存儲(chǔ)在單個(gè)條目中,所以不必訪問 另外的節(jié)點(diǎn)。
如果(2000年,9月,1日)是在包括[(2000年,8月,16日),(20 日),(9月,1日),(2日),(4日)]的第一節(jié)點(diǎn)和包括[(2001年,1月,4 曰),...]的第二節(jié)點(diǎn)中發(fā)現(xiàn)的關(guān)鍵字,則當(dāng)月層次的上一關(guān)鍵字U000年,8 月)存在于當(dāng)前節(jié)點(diǎn)中時(shí),日層次(比月層次進(jìn)一步再分的聚類層次)的上 一關(guān)鍵字也存在于當(dāng)前節(jié)點(diǎn)中。也就是說,月層次值的改變指示日層次值也 被改變。當(dāng)U000年,8月,16日)是發(fā)現(xiàn)的關(guān)鍵字時(shí),如果月層次的下一 關(guān)鍵字存在于當(dāng)前節(jié)點(diǎn)中,則日層次的下一關(guān)鍵字也存在于當(dāng)前節(jié)點(diǎn)中。
現(xiàn)在參照?qǐng)D8和圖9來描述索引的單元結(jié)構(gòu)。這里,在每個(gè)字段中輸入 的值的單位可以是比特或字節(jié),這顯示在附圖中。在下文中,單位被表示為 預(yù)定值。
圖8描述了根據(jù)本發(fā)明實(shí)施例的索引的葉節(jié)點(diǎn)的單元結(jié)構(gòu)。如圖8所示, 在計(jì)數(shù)信息區(qū)810中,字段計(jì)數(shù)字段801顯示(或存儲(chǔ))配置單元(或包括 在單元中)的字段的數(shù)量,發(fā)現(xiàn)的關(guān)鍵字存在于所述單元中。例如,參照?qǐng)D 6,對(duì)于"3, a, U"606,計(jì)數(shù)字段801的值是3。可經(jīng)由單元的字段計(jì)數(shù)字段 801確定索引中每個(gè)層次的邊界點(diǎn)。也就是說,在同一節(jié)點(diǎn)中,層次的邊界 點(diǎn)被確定為單元的字段計(jì)數(shù)值。如果層次的邊界點(diǎn)不存在于同一節(jié)點(diǎn)中,則 可使用節(jié)點(diǎn)前綴值發(fā)現(xiàn)邊界點(diǎn)。因此,可快速發(fā)現(xiàn)按照每個(gè)層次具有相同關(guān) 鍵字值的條目的起點(diǎn)和終點(diǎn)。
上一計(jì)數(shù)字段802指示上一指針的數(shù)量。下一計(jì)數(shù)字段803指示下一指
針的數(shù)量。填充字段804是預(yù)定的保留存儲(chǔ)空間。
指針區(qū)域820按層次存儲(chǔ)指示存在上一關(guān)鍵字或下一關(guān)鍵字的節(jié)點(diǎn)的指 針。具體地講,當(dāng)瀏覽第i層次時(shí),上一指針字段822基于第i層次存儲(chǔ)上一 關(guān)^t字被存儲(chǔ)在其中的節(jié)點(diǎn)的指針。這里,指針可以是節(jié)點(diǎn)的頁編號(hào)。例如, 上一指針1基于第一層次存儲(chǔ)指示存儲(chǔ)上一關(guān)鍵字的節(jié)點(diǎn)的指針。上一指針 2基于第二層次存儲(chǔ)指示存儲(chǔ)上一關(guān)鍵字的節(jié)點(diǎn)的指針。上一指針3基于第 三層次存儲(chǔ)指示存儲(chǔ)上一關(guān)鍵字的節(jié)點(diǎn)的指針。參照?qǐng)D6,例如,在存儲(chǔ)在 節(jié)點(diǎn)100中的"3, a, 4"606中,第一層次關(guān)鍵字"3"具有存儲(chǔ)在同一節(jié)點(diǎn) 100中的上一關(guān)鍵字"2"。因此,單元的上一指針字段822存儲(chǔ)節(jié)點(diǎn)100的 指針。然而,應(yīng)該理解,當(dāng)對(duì)于所述層次的上一關(guān)鍵字被存儲(chǔ)在同一節(jié)點(diǎn)中 時(shí),可以但非必須省略(即,不存儲(chǔ))指針。
當(dāng)瀏覽第i層次時(shí),下一指針字段824基于第i層次存儲(chǔ)下一關(guān)鍵字被存 儲(chǔ)在其中的節(jié)點(diǎn)的指針。這里,指針可以是節(jié)點(diǎn)的頁編號(hào)。例如,下一指針 1基于第一層次存儲(chǔ)指示存儲(chǔ)下一關(guān)鍵字的節(jié)點(diǎn)的指針。下一指針2基于第 二層次存儲(chǔ)指示存儲(chǔ)下一關(guān)鍵字的節(jié)點(diǎn)的指針。下一指針3基于第三層次存 儲(chǔ)指示存儲(chǔ)下一關(guān)鍵字的節(jié)點(diǎn)的指針。參照?qǐng)D6,例如,在存儲(chǔ)在節(jié)點(diǎn)100 中的"3, a,化,606中,第一層次關(guān)鍵字"3"具有存儲(chǔ)在節(jié)點(diǎn)300中的下一 關(guān)鍵字"4"。因此,單元的下一指針字段824存儲(chǔ)節(jié)點(diǎn)300的指針。應(yīng)該理 解,當(dāng)對(duì)于所述層次的下一關(guān)鍵字被存儲(chǔ)在同一節(jié)點(diǎn)中時(shí),可以但非必須省 略(即,不存儲(chǔ))指針。
在存儲(chǔ)關(guān)鍵字值的區(qū)域830中,關(guān)鍵字大小字段832指示第i字段的長(zhǎng) 度。例如,當(dāng)層次的總數(shù)為x時(shí)(即,當(dāng)層次是年、月、日時(shí),x=3),關(guān)鍵 字大小具有第(x-N+i)層次的字段數(shù)據(jù)長(zhǎng)度(字節(jié)),其中,N指示字段計(jì) 數(shù)字段的值。關(guān)鍵字字段834指示預(yù)定層次的數(shù)據(jù),并且存儲(chǔ)第(x-N+i)層 次的數(shù)據(jù)。當(dāng)在計(jì)數(shù)信息區(qū)域810中字段計(jì)數(shù)字l殳801的值是2時(shí),第i字 段的關(guān)鍵字大小是x-N+i=3-2+1 。指示第二層次的字段數(shù)據(jù)的大小的關(guān)鍵字大 小字段832指示月數(shù)據(jù)的長(zhǎng)度。關(guān)鍵字字段834存儲(chǔ)關(guān)鍵字的數(shù)據(jù)值。
參照?qǐng)D6,當(dāng)基于第一層次提取所有關(guān)鍵字時(shí),可提取"1、 2、 3、 4"。 當(dāng)基于第二層次提取所有關(guān)鍵字時(shí),可提取"la、 lb、 2a、 3a、 3b、 3c、 3d、 4a、 5b"。當(dāng)基于第三層次提取所有關(guān)鍵字時(shí),可提取"la7}、 lb 2a 4 、2a叫、3a4、 3a 4、 3a斗、3a 口K 3b 7}、 3b屮。因此,對(duì)于"3, a,
U"606 (或3a MO,計(jì)數(shù)字段801的值是3。上一計(jì)數(shù)字段802的值是0。下 一計(jì)數(shù)字段803的值是2。因?yàn)榛诘谝粚哟?3)的下一關(guān)鍵字(4)被存 儲(chǔ)在節(jié)點(diǎn)300中,所以下一指針1字段824的值是300。因?yàn)樯弦挥?jì)數(shù)字段802 的值是0(即,第一層次(3)、第二層次(3a)和第三層次(3a4)的上一 值存在于當(dāng)前節(jié)點(diǎn)100中),所以上一指針字段822不存儲(chǔ)上一指針。可選擇 地,根據(jù)其他方面,即使上一值存在于當(dāng)前節(jié)點(diǎn)中,上一指針字段822也可 存儲(chǔ)上一指針(例如,因?yàn)榈谝粚哟?3)、第二層次(3a)和第三層次(3a MO的上一值存在于當(dāng)前節(jié)點(diǎn)100中,所以上一指針l字段、上一指針2字 段和上一指針3字段822的每一個(gè)都存儲(chǔ)值100 )。因?yàn)榛诘诙哟?3a) 的下一關(guān)4建字(3b )被存儲(chǔ)在節(jié)點(diǎn)200中,所以下一指針2字段824的值是 200。因?yàn)榈谌龑哟?3a 4)的值存在于當(dāng)前節(jié)點(diǎn)100中,所以下一指針3 字段824不存儲(chǔ)下一指針??蛇x擇地,根據(jù)其他方面,即使下一值存在于當(dāng) 前節(jié)點(diǎn)中,下一指針字段824也可存儲(chǔ)下一指針(例如,因?yàn)榈谌龑哟?3a MO的下一值存在于當(dāng)前節(jié)點(diǎn)100中,所以下一指針3字段824將存儲(chǔ)值100) 。在關(guān)鍵字大小字段832中,關(guān)鍵字大小1字段的值是4,關(guān)鍵字大小2字 段的值是l,關(guān)鍵字大小3字段的值是2。在關(guān)鍵字字段834中,關(guān)鍵字l的 字段值是3,關(guān)鍵字2的字段值是a,關(guān)鍵字3的字段值是M"。
因?yàn)樵趦?nèi)部節(jié)點(diǎn)中沒有執(zhí)行連續(xù)的關(guān)鍵字瀏覽,所以不需要保持存在于 不同節(jié)點(diǎn)中的關(guān)4建字之間的鏈接。因此,可以在內(nèi)部節(jié)點(diǎn)的單元結(jié)構(gòu)中清除
包括在葉節(jié)點(diǎn)的單元結(jié)構(gòu)中的上一指針和下一指針。與一般的多列B+樹索引 相同,內(nèi)部節(jié)點(diǎn)可具有區(qū)分前綴或保持全部的關(guān)4定字值的結(jié)構(gòu)。
如上所述,即使節(jié)點(diǎn)前綴是已在上一節(jié)點(diǎn)的相鄰關(guān)鍵字中用作前綴的高 層次字段值,也可將節(jié)點(diǎn)前綴記錄在當(dāng)前節(jié)點(diǎn)中,以在當(dāng)前節(jié)點(diǎn)中通報(bào)高層 次字段值。節(jié)點(diǎn)前綴可以不被存儲(chǔ)在存儲(chǔ)有更低層次字段值的同一單元中, 其可以配置為附加單元。
圖9示出了才艮據(jù)本發(fā)明實(shí)施例的單元結(jié)構(gòu)的示例。在圖9中,圖6所示 的節(jié)點(diǎn)200的節(jié)點(diǎn)前綴"3, a" 910的單元結(jié)構(gòu)參照?qǐng)D8^皮示出。因?yàn)樵诠?jié)點(diǎn) 200的節(jié)點(diǎn)前綴"3, a,, 910的單元結(jié)構(gòu)中使用兩個(gè)字段配置當(dāng)前關(guān)鍵字,所 以字段計(jì)數(shù)字段801的值是2。因?yàn)樯弦恢羔樅拖乱恢羔樀臄?shù)量是0,所以上 一計(jì)數(shù)字段802和下一計(jì)數(shù)字段803的值是0。關(guān)鍵字大小字段832的值是 與"3, a" 910的每個(gè)關(guān)鍵字大小值對(duì)應(yīng)的l和2。關(guān)鍵字字段834的值是3
和a。參照?qǐng)D8描述了每個(gè)值的單位。
圖IO描述了根據(jù)本發(fā)明實(shí)施例的用于索引搜索的UI。如圖IO所示,用 戶經(jīng)由UI請(qǐng)求搜索期望的內(nèi)容以接收服務(wù)。此時(shí),使用根據(jù)本發(fā)明各方面提 供的索引結(jié)構(gòu)的操作(函數(shù))包括fmd—key、 find—next_entry、 fmd_prev—entry、 fmd—first—key、 find—last—key 、 find—next—key、 fmd_prev—key、 find—upper—key、 和find—down一key。當(dāng)假設(shè)具有高優(yōu)先權(quán)的聚類關(guān)鍵字(或關(guān)鍵字)的層次是 l時(shí),年層次是l,月層次是2,日層次是3。如圖IO中所述,每個(gè)字段包括 關(guān)鍵字值和RID信息。用戶可選擇每個(gè)字段。
當(dāng)用戶經(jīng)由UI在字段之間移動(dòng)時(shí),用戶輸入搜索請(qǐng)求。例如,當(dāng)用戶經(jīng) 由UI選擇2005年5月(表示為"2005, 5"字段IOOO)時(shí),2005, 5 (第二 層次)的值被輸入,因此與關(guān)鍵字值對(duì)應(yīng)的標(biāo)識(shí)符被提取。如果存在若干個(gè) 提取的標(biāo)識(shí)符,則可返回字段1000的第一值,并且可將與字段的標(biāo)識(shí)符對(duì)應(yīng) 的內(nèi)容和內(nèi)容的元數(shù)據(jù)提供給用戶。因此,用戶可經(jīng)由UI直接指定將發(fā)現(xiàn)的 關(guān)鍵字的層次(第二層次),從而基于指定的層次使用各種操作來搜索字段。
在下文中,將參照?qǐng)DIO詳細(xì)描述操作。fmd一key操作在葉節(jié)點(diǎn)中搜索與 搜索的關(guān)鍵字匹配的條目(或字段),并返回標(biāo)識(shí)符(即RID)。如果存在多 個(gè)匹配的RID,則返回第一RID。然而,根據(jù)其他方面,應(yīng)該理解,可返回 另一RID,或者可返回所有匹配的RID。此時(shí),當(dāng)與傳統(tǒng)4支術(shù)不同,多列地 配置索引時(shí),可指定搜索的關(guān)鍵字的層次。在圖10中,如果用戶經(jīng)由UI移 動(dòng)到"2005, 5"字段1000,則將5711 ( a)作為RID返回。也就是說,"2005, 5"字段1000包括作為更低層次的字段5和6,并且每個(gè)字段包括多個(gè)RID 值。此時(shí),可返回第一RID(即,5711 (a))并且可將與發(fā)現(xiàn)的字段1000的 標(biāo)識(shí)符對(duì)應(yīng)的內(nèi)容或內(nèi)容的元數(shù)據(jù)提供給用戶。此外,可基于"2005, 5"關(guān) 鍵字(或字段)搜索隨后執(zhí)行的操作。
find—next—entry操作搜索最近發(fā)現(xiàn)的條目的下一條目并返回關(guān)鍵字和標(biāo) 識(shí)符(如RID)。如果改變搜索的層次的關(guān)鍵字值,則在改變的字段中還返回 最高層次號(hào)。如果由于在基于第二層次瀏覽條目時(shí)改變第一字段和第二字段 而獲得新的第二層次關(guān)鍵字,則返回層次號(hào)1。如果使用圖10中的find_key 操作發(fā)現(xiàn)"2005, 5",則當(dāng)執(zhí)行find—next—entry才喿作時(shí),將5712 (b)作為 RID返回。
fmd_prev—entry操作搜索最近發(fā)現(xiàn)的條目的上一條目并返回關(guān)鍵字和標(biāo)
識(shí)符(如RID)。如果改變搜索的層次的關(guān)^l字值,則在改變的字段中還返回 最高層次號(hào)。如果由于在基于第二層次瀏覽條目時(shí)改變第一字段和第二字段
而獲得新的第二層次關(guān)鍵字,則返回層次號(hào)l。如果使用圖10中的find—key 操作發(fā)現(xiàn)"2005, 5",則當(dāng)執(zhí)行fincU rev—entry操作時(shí),返回"2005, 4"(即, 新的關(guān)鍵字值)和5710 (c)(即,相應(yīng)的RID)。因?yàn)樵诨诘诙哟伟l(fā)現(xiàn)條 目時(shí)第二字段值從5改變到4,所以還返回層次號(hào)2。
find—first—key操作返回葉節(jié)點(diǎn)的第 一關(guān)鍵字和具有相應(yīng)的關(guān)鍵字的第一 標(biāo)識(shí)符(如RID)。此時(shí),與傳統(tǒng)技術(shù)不同,find—first—key操作可輸入將被返 回的關(guān)鍵字的層次i。隨后將被執(zhí)行的操作基于第i層次搜索關(guān)鍵字值。如果 關(guān)于圖10中的第二層次執(zhí)行find—first—key操作,則fmd—first—key操作搜索 "1993, 1"并返回0001 (d)。
find—last—key操作返回葉節(jié)點(diǎn)的最后關(guān)鍵字和具有相應(yīng)的關(guān)鍵字的最后 標(biāo)識(shí)符(如RID)。如果改變高層次字段值,則還返回最高層次號(hào)。如果在基 于第三層次瀏覽值時(shí)改變第一層次字段值和第二層次字段值,則返回最高層 次號(hào)l。此時(shí),與傳統(tǒng)技術(shù)不同,find—last—key操作可輸入將被返回的關(guān)鍵字 的層次i。隨后將被執(zhí)行的操作基于第i層次搜索關(guān)鍵字值。如果關(guān)于圖10 中的第二層次執(zhí)行fmd—last—key操作,則fmdjast—key操作搜索"2006, 12" 并返回6220 ( e )。
find—next—key操作搜索在葉節(jié)點(diǎn)中最近發(fā)現(xiàn)的關(guān)鍵字值的下一關(guān)鍵字 值,并返回下一關(guān)鍵字值和標(biāo)識(shí)符(如RID)。如果改變高層次字段值,則還 返回最高層次號(hào)。如果在基于第三層次搜索值時(shí)改變第一層次字段值和第二 層次字段值,則返回最高層次號(hào)1。此時(shí),與傳統(tǒng)技術(shù)不同,如果最近發(fā)現(xiàn) 的關(guān)鍵字層次是i,則fmd—next—key操作可返回相應(yīng)層次上的下一關(guān)鍵字。 如果fmd— key操作搜索到圖10中的"2005, 5, 5",則當(dāng)執(zhí)行fmd—next—key 操作時(shí),返回新的關(guān)4建字值"2005, 5, 6"和RID5720 (f)。
如果正被搜索的關(guān)鍵字的層次是i,則當(dāng)字段計(jì)數(shù)值等于或大于最大字段 計(jì)數(shù)+l-i或者不存在將被發(fā)現(xiàn)的節(jié)點(diǎn)時(shí),find—next—key操作完成搜索。通過 執(zhí)行read—key—header操作來獲得下一計(jì)數(shù)值。如果下一計(jì)數(shù)值小于i,則下 一關(guān)鍵字存在于當(dāng)前節(jié)點(diǎn)中,因此從當(dāng)前單元位置反向搜索當(dāng)前節(jié)點(diǎn)的單元。 如果下一計(jì)數(shù)值等于或大于i,則下一關(guān)鍵字存在于另一節(jié)點(diǎn)中。在這種情況 下,find—next—key操作在由下一指針指示的節(jié)點(diǎn)中從第一單元反向搜索單元。
fmd_prev—key操作在葉節(jié)點(diǎn)中搜索最近發(fā)現(xiàn)的關(guān)鍵字值的上一關(guān)鍵字 值,并返回上一關(guān)鍵字值和標(biāo)識(shí)符(如RID)。如果改變高層次字段值,則還 返回最高層次號(hào)。如果在基于第三層次搜索值時(shí)改變第一層次字段值和第二 層次字段值,則返回最高層次號(hào)1。此時(shí),與傳統(tǒng)技術(shù)不同,如果最近發(fā)現(xiàn) 的關(guān)鍵字層次是i,則find_prev—key操作可返回相應(yīng)層次上的上一關(guān)鍵字。 如果find—key操作搜索到圖10中的"2005, 5, 5",則當(dāng)執(zhí)行fmd_prev—key 操作時(shí),返回新的關(guān)鍵字值"2005, 4, 6"和RID5706 (g )。
如果正被搜索的關(guān)鍵字的層次是i,則當(dāng)字段計(jì)數(shù)值等于或大于最大字段 計(jì)數(shù)+l-i或者不存在將被發(fā)現(xiàn)的節(jié)點(diǎn)時(shí),find_prev—key操作完成搜索。通過 執(zhí)行read_key—header操作來獲得上一計(jì)數(shù)值。如果上一計(jì)數(shù)值小于i,則上 一關(guān)鍵字存在于當(dāng)前節(jié)點(diǎn)中,因此從當(dāng)前單元位置前向搜索當(dāng)前節(jié)點(diǎn)的單元。 如果上一計(jì)數(shù)值等于或大于i,則上一關(guān)鍵字存在于另一節(jié)點(diǎn)中。在這種情況 下,find_prev_key操作在由上一指針指示的節(jié)點(diǎn)中從最后單元到第一單元來 搜索單元。
如果正被搜索的關(guān)鍵字的層次是i,則find—upper—key操作將搜索層次改 變?yōu)閕-l。隨后將被執(zhí)行的所有操作基于第(i-1 )層次關(guān)鍵字被執(zhí)行。此外, 當(dāng)i是l(因?yàn)楫?dāng)i是l時(shí),當(dāng)前層次是最高層次)或者字段計(jì)數(shù)大于(最大 字段計(jì)數(shù)+l-i)(在這種情況下,最高層次關(guān)鍵字被包括在當(dāng)前單元中)時(shí), find—upper—key操作完成搜索。通過執(zhí)行read—key—header操作來獲得字段計(jì) 數(shù)值。通過移動(dòng)到上一單元在當(dāng)前節(jié)點(diǎn)中執(zhí)行搜索,直到滿足搜索結(jié)束條件。 如果在當(dāng)前節(jié)點(diǎn)的第一條目中也沒有發(fā)現(xiàn)關(guān)鍵字,則find—upper_key操作在 節(jié)點(diǎn)前綴中搜索高層次關(guān)鍵字。
如果正被搜索的關(guān)鍵字的層次是i,則find—down—key操作返回第(i+1) 層次關(guān)鍵字。隨后將被執(zhí)行的所有操作基于第(i+1)層次關(guān)鍵字被執(zhí)行。此 外,如果i等于最大字段計(jì)數(shù)(即,i是最低層次),則因?yàn)楫?dāng)前層次是最低 層次,所以fmd_down—key操作不具有將被返回的低層次關(guān)鍵字。如果i不等 于最大字段計(jì)數(shù),則find—down—key操作在當(dāng)前單元中搜索并返回低層次關(guān) 鍵字值。
read—key—header操作讀取包括正被瀏覽的層次的關(guān)鍵字值的單元的頭 值。如果執(zhí)行find一next一entry操作、fmd_prev—entry操作或find—upper—key操 作,則最近發(fā)現(xiàn)的單元可不包括正被瀏覽的層次的關(guān)鍵字。也就是說,當(dāng)正 被搜索的關(guān)鍵字的層次是i并且搜索光標(biāo)所位于的單元的字段計(jì)數(shù)是f時(shí),產(chǎn) 生f〈最大字段計(jì)數(shù)+l-i的情況。此時(shí),已經(jīng)通報(bào)正被搜索的關(guān)鍵字值。因此,
輸入關(guān)鍵字值和搜索層次i,從而可通過執(zhí)行fmd —key操作發(fā)現(xiàn)包括相應(yīng)關(guān) 鍵字的單元。此外,當(dāng)^最大字段計(jì)數(shù)+l-i時(shí),read—key—header操作讀取當(dāng) 前單元中的第i信息。如果f〈(最大字段計(jì)數(shù)+l-i),則read—key一header操作 通過執(zhí)行find—key操作讀取與第i關(guān)鍵字對(duì)應(yīng)的信息。
如上所述,根據(jù)本發(fā)明各方面的最優(yōu)化索引搜索設(shè)備和方法提供使用索 引的各種操作,從而容易地實(shí)現(xiàn)外部模塊并增加存儲(chǔ)空間的效率。此外,如 果將數(shù)據(jù)聚類到單個(gè)層次,則本發(fā)明的各方面^皮設(shè)計(jì)為與傳統(tǒng)B+樹索引相同 地操作,從而B+樹索引或多列B+樹索引可被應(yīng)用于從一個(gè)層次到N個(gè)層次 聚類的數(shù)據(jù)。
本發(fā)明的各方面也可實(shí)現(xiàn)為計(jì)算機(jī)可讀記錄介質(zhì)上的計(jì)算機(jī)可讀代碼。 此外,實(shí)現(xiàn)本發(fā)明的代碼和代碼段可由本發(fā)明所屬領(lǐng)域的編程技術(shù)人員容易 地解釋。計(jì)算機(jī)可讀記錄介質(zhì)為任何可存儲(chǔ)其后能由計(jì)算機(jī)系統(tǒng)或計(jì)算機(jī)代 碼處理設(shè)備讀取的數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)裝置。所述計(jì)算機(jī)可讀記錄介質(zhì)的例子包 括只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、 CD-ROM、磁帶、軟盤、 光學(xué)數(shù)據(jù)存儲(chǔ)裝置和以包括壓縮源代碼段和加密源代碼段的載波實(shí)現(xiàn)的計(jì)算 機(jī)數(shù)據(jù)信號(hào)(諸如通過互聯(lián)網(wǎng)的數(shù)據(jù)傳輸),所述壓縮源代碼段和加密源代碼 段都包括有所述代碼。所述計(jì)算機(jī)可讀記錄介質(zhì)也可分布于網(wǎng)絡(luò)連接的計(jì)算 機(jī)系統(tǒng)上,以便所述計(jì)算機(jī)可讀代碼以分布方式被存儲(chǔ)并被執(zhí)行。
雖然已經(jīng)表示和描述了本發(fā)明的一些實(shí)施例,但本領(lǐng)域技術(shù)人員應(yīng)該理 解,在不脫離本發(fā)明的原理和精神的情況下,可以對(duì)這些實(shí)施例進(jìn)行修改, 本發(fā)明的范圍由權(quán)利要求及其等同物限定。
權(quán)利要求
1、一種最優(yōu)化索引搜索方法,包括在索引中搜索與第一關(guān)鍵字值對(duì)應(yīng)的第一字段;當(dāng)輸入搜索請(qǐng)求時(shí),基于第一字段在索引中搜索與搜索請(qǐng)求對(duì)應(yīng)的第二字段;和提取與第二字段對(duì)應(yīng)的標(biāo)識(shí)符。
2、 如權(quán)利要求l所述的方法,其中,索引的單元包括 第一字段,存儲(chǔ)第一關(guān)鍵字值;和第二字段,存儲(chǔ)第二關(guān)鍵字值。
3、 如權(quán)利要求2所述的方法,其中,索引的第一字段和第二字段中的每 一個(gè)存儲(chǔ)上一指針和下一指針中的至少一個(gè),所述上一指針指向包含上一關(guān) 鍵字值的上一節(jié)點(diǎn),所述下一指針指向包含下一關(guān)鍵字值的下一節(jié)點(diǎn)。
4、 如權(quán)利要求3所述的方法,其中,如果上一關(guān)鍵字值和字段存在于同 一節(jié)點(diǎn)中,則該字段不存儲(chǔ)上一指針,如果下一關(guān)^t字值存在于所述同一節(jié) 點(diǎn)中,則該字段不存儲(chǔ)下一指針。
5、 如權(quán)利要求l所述的方法,其中,索引在當(dāng)前節(jié)點(diǎn)中單獨(dú)存儲(chǔ)高層次 關(guān)鍵字值,以允許在沒有參考其他節(jié)點(diǎn)的情況下瀏覽預(yù)定關(guān)鍵字值的高層次 關(guān)鍵字值。
6、 如權(quán)利要求1所述的方法,還包括 提供與提取的標(biāo)識(shí)符對(duì)應(yīng)的內(nèi)容的元數(shù)據(jù)或內(nèi)容。
7、 如權(quán)利要求2所述的方法,其中,所述單元還包括 字段計(jì)數(shù)字段,存儲(chǔ)所述單元的字段的數(shù)量。
8、 如權(quán)利要求2所述的方法,其中,所述單元還包括 第一上一指針,指向包含不同于所述第一關(guān)鍵字值的上一第一關(guān)鍵字值的上一節(jié)點(diǎn);和第二上一指針,指向包含不同于所述第二關(guān)鍵字值的上一第二關(guān)鍵字值 的上一節(jié)點(diǎn)。
9、 如權(quán)利要求8所述的方法,其中,如果上一節(jié)點(diǎn)與所述單元的節(jié)點(diǎn)是同 一節(jié)點(diǎn),則第一上一指針不指向上 ^點(diǎn);如果上一節(jié)點(diǎn)與所述單元的節(jié)點(diǎn)是同一節(jié)點(diǎn),則第二上一指針不指向上一節(jié)點(diǎn);和所述單元還包括存儲(chǔ)包括在所述單元中的上一指針的數(shù)量的上一計(jì)數(shù)字段。
10、 如權(quán)利要求2所述的方法,其中,所述單元還包括 第一下一指針,指向包含不同于所述第一關(guān)鍵字值的下一第一關(guān)鍵字值的下一節(jié)點(diǎn);第二下一指針,指向包含不同于所述第二關(guān)鍵字值的下一第二關(guān)鍵字值的下一節(jié)點(diǎn)。
11、 如權(quán)利要求IO所述的方法,其中,如果下一節(jié)點(diǎn)與所述單元的節(jié)點(diǎn)是同一節(jié)點(diǎn),則第一下一指針不指向下 一節(jié)點(diǎn);如果下一節(jié)點(diǎn)與所述單元的節(jié)點(diǎn)是同一節(jié)點(diǎn),則第二下一指針不指向下 一節(jié)點(diǎn);和所述單元還包括存儲(chǔ)包括在所述單元中的下一指針的數(shù)量的下一計(jì)數(shù)字段。
12、 一種用于最優(yōu)化搜索與用戶輸入的搜索請(qǐng)求層次對(duì)應(yīng)的字段的索引 的單元,所述單元包括第一字段,存儲(chǔ)第一層次的第一關(guān)鍵字值; 第二字段,存儲(chǔ)第二層次的第二關(guān)鍵字值;第一指針,指向包含不同于所述第一關(guān)鍵字值的第一層次的另一第一關(guān) 鍵字值的另一單元的另一節(jié)點(diǎn);第二指針,指向包含不同于所述第二關(guān)鍵字值的第二層次的另一第二關(guān)鍵字值的另 一單元的另 一節(jié)點(diǎn),其中,用于識(shí)別內(nèi)容的元數(shù)據(jù)或內(nèi)容的標(biāo)識(shí)符對(duì)應(yīng)于所述第一關(guān)鍵字值 和所述第二關(guān)鍵字值。
13、 如權(quán)利要求12所述的單元,其中,第一指針是指向包含不同于所述第一關(guān)鍵字值的下一第一關(guān)鍵字值的下 一節(jié)點(diǎn)的第一下一指針;和第二指針是指向包含不同于所述第二關(guān)鍵字值的下一第二關(guān)鍵字值的下 一節(jié)點(diǎn)的第二下一指針。
14、 如權(quán)利要求13所述的單元,還包括下一計(jì)數(shù)字段,存儲(chǔ)包括在所述單元中的下一指針的數(shù)量,其中, 如果下一節(jié)點(diǎn)與所述單元的節(jié)點(diǎn)是同一節(jié)點(diǎn),則第一下一指針不指向下 一節(jié)點(diǎn),和如果下一節(jié)點(diǎn)與所述單元的節(jié)點(diǎn)是同一節(jié)點(diǎn),則第二下一指針不指向下"節(jié)點(diǎn)。
15、 一種最優(yōu)化索引搜索方法,包括 在索引中搜索與第一關(guān)鍵字值對(duì)應(yīng)的第一字段; 接收對(duì)低于第 一字段的層次的指定層次的搜索操作;基于第一字段對(duì)與指定層次對(duì)應(yīng)的第二字段執(zhí)行搜索操作;和 提取與存儲(chǔ)在第二字段中的第二關(guān)鍵字值對(duì)應(yīng)的標(biāo)識(shí)符。
16、 如權(quán)利要求15所述的方法,其中,接收搜索操作的步驟包括接收用于發(fā)現(xiàn)特定關(guān)鍵字值的發(fā)現(xiàn)關(guān)鍵字搜索 操作,和執(zhí)行所述搜索4喿作的步驟包括基于第一字段在索引中搜索存儲(chǔ)特定關(guān)鍵字值的第二字段。
17、 如權(quán)利要求15所述的方法,其中,搜索操作是以下操作中的一種 發(fā)現(xiàn)下一條目操作,用于在指定層次中發(fā)現(xiàn)最近發(fā)現(xiàn)的關(guān)鍵字值的下一條目;發(fā)現(xiàn)上一條目操作,用于在指定層次中發(fā)現(xiàn)最近發(fā)現(xiàn)的關(guān)鍵字值的上一 條目;發(fā)現(xiàn)第一關(guān)鍵字操作,用于返回與最先存儲(chǔ)在葉節(jié)點(diǎn)中的第二關(guān)鍵字值 對(duì)應(yīng)的標(biāo)識(shí)符;發(fā)現(xiàn)最后關(guān)鍵字4喿作,用于返回與最后存儲(chǔ)在葉節(jié)點(diǎn)中的第二關(guān)鍵字值 乂十應(yīng)的標(biāo)識(shí)才+;發(fā)現(xiàn)下一關(guān)鍵字操作,用于搜索最近發(fā)現(xiàn)的第二關(guān)鍵字值的下一第二關(guān) 鍵字值;發(fā)現(xiàn)上一關(guān)鍵字操作,用于搜索最近發(fā)現(xiàn)的第二關(guān)鍵字值的上一第二關(guān) 鍵字值;發(fā)現(xiàn)高的關(guān)鍵字操作,用于將指定層次改變?yōu)橄乱桓邔哟危?發(fā)現(xiàn)低的關(guān)鍵字操作,用于將指定層次改變?yōu)橄乱桓蛯哟?;和讀取關(guān)鍵字頭操作,用于讀取包括第二關(guān)鍵字值的單元的頭值。
全文摘要
公開了一種最優(yōu)化索引搜索設(shè)備和方法,所述最優(yōu)化索引搜索方法包括在索引中搜索與第一關(guān)鍵字值對(duì)應(yīng)的第一字段;當(dāng)輸入搜索請(qǐng)求時(shí),基于第一字段搜索與搜索請(qǐng)求對(duì)應(yīng)的第二字段;和提取與發(fā)現(xiàn)的第二字段對(duì)應(yīng)的標(biāo)識(shí)符。
文檔編號(hào)G06F17/30GK101187941SQ200710192708
公開日2008年5月28日 申請(qǐng)日期2007年11月16日 優(yōu)先權(quán)日2006年11月23日
發(fā)明者姜仁鮮, 禹景久 申請(qǐng)人:三星電子株式會(huì)社