專利名稱:索引及其擴(kuò)展和查詢方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息檢索技術(shù),更具體來說,涉及建立和擴(kuò)展索引的方法。
背景技術(shù):
隨著因特網(wǎng)的普及以及網(wǎng)絡(luò)上信息量的迅速增加,人們對高效的全文檢索搜索引擎越來越依賴。全文搜索引擎的對象是文本,它能夠?qū)Υ罅课臋n建立由字(詞)到文檔的倒排索引,當(dāng)用戶使用關(guān)鍵詞來對文檔(例如網(wǎng)頁)進(jìn)行查詢時,搜索引擎向用戶返回含有該關(guān)鍵詞的文檔。為了降低硬件和軟件成本,目前的大多數(shù)搜索引擎都將倒排索引以文件形式(稱為倒排文件)存儲在非易失性存儲器(例如硬盤)上,通過文件讀/寫操作來訪問倒排文件,直接在磁盤索引上進(jìn)行搜索。中國專利申請03109847.9(公開號CN1536509A,
公開日2004.10.31)公開了一種倒排索引存儲方法、倒排索引機(jī)制以及在線更新的方法,特此引用作為參考。
全文搜索引擎有兩個主要的性能指標(biāo)索引建立速度和查詢響應(yīng)時間,這兩個指標(biāo)的提高,在很大程度上取決于搜索引擎所使用的索引結(jié)構(gòu)和相應(yīng)的搜索方法。好的索引結(jié)構(gòu)應(yīng)當(dāng)能提高索引建立速度,縮短查詢響應(yīng)時間。
一種傳統(tǒng)的索引方法是使用磁盤上的兩個索引文件,即主索引文件和二級索引文件。當(dāng)更新磁盤上的索引時,例如向主索引文件插入新文檔時,需要頻繁打開和關(guān)閉主索引文件,導(dǎo)致更新速度緩慢。
因此,一般來說,在索引過程中,并不是每次新的文檔加入進(jìn)去索引都重新進(jìn)行一次索引文件的寫入操作,而是先在內(nèi)存中進(jìn)行索引操作,并根據(jù)一定的批量,進(jìn)行文件的寫入。這個批次的間隔越大,文件的寫入次數(shù)越少,但占用內(nèi)存會很多。反之占用內(nèi)存少,但文件IO操作頻繁,索引速度會很慢。
現(xiàn)有技術(shù)中沒有一種有效的技術(shù)來對這種文件的寫入次數(shù)進(jìn)行有效的控制。
發(fā)明內(nèi)容
為此,本發(fā)明的一個目的是改進(jìn)索引文件的數(shù)據(jù)結(jié)構(gòu),以提高磁盤索引文件的建立和更新的速度。
一方面,本發(fā)明提供一種建立/擴(kuò)展索引的方法,該索引包含一個第一子索引文件和一個第二子索引文件,該方法包含以下步驟(a)在內(nèi)存中對新插入的數(shù)據(jù)源進(jìn)行生成倒排索引的索引操作;(b)如果索引操作所包含的源數(shù)據(jù)的個數(shù)達(dá)到一個預(yù)定的第一閥值k1,則將所生成的倒排索引,作為一個最小的索引組,順序地寫入第一子索引文件;(c)如果第一子索引文件中最小的索引組的個數(shù)達(dá)到一個預(yù)定的第二閥值k2,則把這k2個索引組合并成一個更大的索引組,順序地寫入第二子索引文件;否則返回步驟(a);(d)如果第二子索引文件中最小的索引組的個數(shù)達(dá)到第三閥值k3,則把這k3個索引組合并成一個更大的索引組,順序地寫入第一子索引文件,返回步驟(c);否則,返回步驟(a)。
按照本發(fā)明的一個實(shí)施例,將第二閥值K2選擇得等于第三閥值K3。
按照本發(fā)明的一個實(shí)施例,將第二閥值K2和第三閥值K3選擇得等于第一閥值K1。
按照本發(fā)明的一個實(shí)施例,源數(shù)據(jù)是文檔,包括但不限于Word文檔,PDF文檔,HTML文檔。
按照本發(fā)明的一個實(shí)施例,索引文件存儲在非易失性存儲器中,包括但不限于磁盤、光盤、光磁盤。
按照本發(fā)明的一個實(shí)施例,合并索引組的步驟包括合并各倒排索引組中對應(yīng)于相同的索引項(xiàng)的塊。
另一方面,本發(fā)明提供一種查詢索引文件中的索引信息的方法,其中,該索引文件包含按大小順序排列的若干個索引組,每個索引組含有對源數(shù)據(jù)的倒排索引,該方法包含訪問當(dāng)前索引文件中包含對應(yīng)該查詢詞的索引組;讀取對應(yīng)該查詢詞的第一個塊的索引信息;重復(fù)讀取其余索引組中其它的對應(yīng)該查詢詞的塊,直到其余索引組中沒有對應(yīng)該查詢詞的塊;返回所讀取的所有的塊的索引信息。
另一方面,本發(fā)明提供一種索引結(jié)構(gòu),包含結(jié)構(gòu)相同的兩個索引文件,每個索引文件包含按大小順序排列的若干個索引組,每個索引組含有對源數(shù)據(jù)的倒排索引,其中,最小的索引組包含的數(shù)據(jù)源的數(shù)量為k1,其余索引組包含的源數(shù)據(jù)的數(shù)量為k1*k2i(i>=1),并且包含相同數(shù)量的源數(shù)據(jù)的索引組的個數(shù)小于k2。
使用本發(fā)明的基于索引組的索引結(jié)構(gòu)的建立索引的方法,索引文件中索引組的個數(shù)隨著被索引的文檔的數(shù)量的迅速增長而緩慢地增長。由于小索引組總是位于大索引組的頂部,索引更新大都發(fā)生在小的索引組中,因而減少了大索引組的IO操作,由此減少總的IO操作的次數(shù),因此提高了索引建立速度。由于小的索引組的合并速度較快,而大的索引組保持相對穩(wěn)定,因此能夠減少查詢響應(yīng)時間。另外,通過對內(nèi)存索引操作包含的源數(shù)據(jù)的個數(shù)k1的選擇,可以調(diào)節(jié)對內(nèi)存索引操作對內(nèi)存的占用,通過對要被合并的索引組的個數(shù)k2(k3)的選擇,可以調(diào)節(jié)查詢響應(yīng)時間。
圖1A表示按照本發(fā)明的索引數(shù)據(jù)結(jié)構(gòu)。
圖1B表示一種倒排索引文件的邏輯結(jié)構(gòu)。
圖2表示按照本發(fā)明的擴(kuò)展索引的方法的流程圖。
圖3表示按照本發(fā)明一個實(shí)施例的一個查詢過程。
圖4A-4C是表示本發(fā)明的合并索引中的索引組的方法的示意圖。
具體實(shí)施例方式
參看圖1A,表示按照本發(fā)明的索引的數(shù)據(jù)結(jié)構(gòu)。
按照本發(fā)明的索引文件140由索引組150組成,而索引組150由塊160組成。
索引文件140由大小可能不同的索引組150組成。在本發(fā)明中,索引組的大小,指的是索引組所包含的數(shù)據(jù)源的個數(shù)。例如,圖中所示的索引文件140包含N個索引組150-1至150-N,按照本發(fā)明,這些索引組按照大小順序排列,最小的索引組出現(xiàn)在文件的尾部。下文將結(jié)合圖2和圖4,說明這些索引組在索引文件中是如何排列的。
索引組150由塊160。圖1A中表示的索引組150,包含k個塊160-1至160-K。
一個塊160包含一個給定索引項(xiàng)的倒排索引(inverted index),在物理上表現(xiàn)為含有特定索引項(xiàng)的索引信息的連續(xù)盤空間。
倒排索引是現(xiàn)有技術(shù)中為了提高查詢的速度和準(zhǔn)確性而采用的一種索引結(jié)構(gòu)。倒排索引,是一定數(shù)量的排序的索引項(xiàng)分別與一定數(shù)量的源數(shù)據(jù)之間的映射關(guān)系的集合,每個索引所對應(yīng)的源數(shù)據(jù)也按照一定的關(guān)系排序。例如,關(guān)鍵詞倒排索引,是排序的關(guān)鍵詞與源數(shù)據(jù)之間的映射關(guān)系的列表,對應(yīng)每個關(guān)鍵詞的源數(shù)據(jù)按照一定的順序(例如按照詞頻)排列。倒排索引中的索引塊,在物理上表現(xiàn)為含有特定索引項(xiàng)的索引信息的連續(xù)盤空間。
參看圖1B,圖中的列表例示關(guān)鍵詞倒排索引文件的邏輯結(jié)構(gòu)。該列表中包含按照字母順序排序的索引項(xiàng)”an”、”index”和”inverted”,每個索引項(xiàng)分別對應(yīng)一定數(shù)量的文檔。例如,索引項(xiàng)“index”對應(yīng)于3個文檔,按照“index”在這三個文檔中出現(xiàn)的頻率,它們在列表中的順序?yàn)槲臋n2、文檔1和文檔3。列表中所示的索引項(xiàng)“index”與3個排序的文檔2、文檔1和文檔3以及索引項(xiàng)在這些文檔中的出現(xiàn)頻率,構(gòu)成了一個索引塊。
要指出的是,圖1A中表示,在索引文件140中,將不同大小的索引組的個數(shù),記錄在索引文件的頭部。然而,所屬技術(shù)領(lǐng)域的熟練人員知道,不同大小的索引組的個數(shù)及其變化,并不一定要在索引文件中記錄,而是可以有其它選擇。例如,可以在一個單獨(dú)的表中,記錄不同大小的索引組的個數(shù);再例如,可以為不同大小的索引組設(shè)置不同的計數(shù)器。
另外,如圖1A中所示,每個索引組150中還可以保存其它信息,例如塊的個數(shù)、每個塊在索引組中的偏移地址、以及下一個索引組在索引文件140中的偏移地址。類似地,所屬技術(shù)領(lǐng)域的熟練人員應(yīng)當(dāng)知道,這些信息也可以在索引組以外的地方保存,因此無須贅述。
為了更好地理解本發(fā)明,圖1A中還表示了其它相關(guān)信息,如索引陣列130、索引項(xiàng)-索引項(xiàng)ID(標(biāo)識)映射表110、索引項(xiàng)ID(標(biāo)識)-索引映射表120。
圖1A所示的索引陣列130,有索引文件140-1至140-M。在實(shí)際應(yīng)用中,搜索引擎為響應(yīng)用戶的不同要求可能需要多個不同的索引文件。例如,索引文件140-1可以是一個關(guān)鍵詞索引文件、分類索引文件,等等。
一般來說,在建立索引時,除了創(chuàng)建索引文件,還要建立一系列與索引文件相關(guān)聯(lián)的映射表。例如,映射表110、映射表120、文檔ID-物理地址映射表(未予示出)。
所屬技術(shù)領(lǐng)域的技術(shù)人員知道,文檔ID-物理地址映射表,用于記錄每個文檔與存儲該文檔的物理地址之間的對應(yīng)關(guān)系。在通過索引文件查找到需要的文檔后,利用這個映射表就可以訪問該文檔。索引項(xiàng)-索引項(xiàng)ID映射表110,存儲每個索引項(xiàng)與一個標(biāo)識符的對應(yīng)關(guān)系。由于標(biāo)識符與索引項(xiàng)相比,格式比較統(tǒng)一(例如是數(shù)字),所以在索引文件中可以記錄索引項(xiàng)標(biāo)識符,以代替對應(yīng)的索引項(xiàng)。
映射表120記錄每個索引項(xiàng)的索引信息在索引文件中的位置。按照本發(fā)明的一個實(shí)施例,在表120中,對于每個索引項(xiàng)ID,可記錄該索引項(xiàng)所對應(yīng)的索引文件中的第一個塊的地址,例如,可記錄相應(yīng)的索引文件ID、索引組ID和塊偏移地址。
視具體實(shí)現(xiàn)的需要而定,還可以有其它的映射表,例如索引文件-索引文件ID映射表、索引組-索引組ID映射表等等。
上述映射表的創(chuàng)建和更新,都是所屬技術(shù)領(lǐng)域的技術(shù)人員熟知的,在現(xiàn)有技術(shù)中有各種各樣的實(shí)現(xiàn)方案,因此不再贅述。
針對這樣的索引文件結(jié)構(gòu),本發(fā)明提出了一種基于對索引組的合并而建立或擴(kuò)展索引文件的方法。
圖2表示按照本發(fā)明的由計算機(jī)執(zhí)行的擴(kuò)展索引的方法的流程圖。在這個方法中,將一個索引劃分為兩個子文件,即第一子索引文件和第二子索引文件。
一開始,計算機(jī)系統(tǒng)在內(nèi)存中對新插入的數(shù)據(jù)源進(jìn)行索引操作,以生成倒排索引(步驟210)。
所屬技術(shù)領(lǐng)域的技術(shù)人員知道,一般來說,在內(nèi)存中進(jìn)行索引操作,例如對文檔進(jìn)行關(guān)鍵詞索引操作,包括以下過程讀取一個文檔,分析文檔中的詞元,對于每個詞元,統(tǒng)計其在該文檔中的出現(xiàn)頻率,然后將結(jié)果(文檔、詞元、出現(xiàn)頻率)插入內(nèi)存中的倒排索引。上述過程,在以上引用的中國專利申請03109847.9中,也有相關(guān)的描述,因此不再贅述。
需要指出的是,輸入的數(shù)據(jù)源可以是計算機(jī)可讀的任何電子文檔,例如一但不限于一Word文檔、PDF文檔或HTML文檔,具體取決于解析轉(zhuǎn)換器的設(shè)計,然而,這并不屬于本發(fā)明的范疇,因此不再詳述。
在步驟220,判斷索引操作所包含的源數(shù)據(jù)的個數(shù)是否小于一個預(yù)定的第一閥值k1。就是說,判斷內(nèi)存中當(dāng)前的倒排索引中所包含的源數(shù)據(jù)的個數(shù)是否小于k1。
如果是,則對新插入的數(shù)據(jù)源的索引操作結(jié)束,過程將返回到步驟210,對下一個數(shù)據(jù)源進(jìn)行索引操作。
如果不是,即索引操作所包含的源數(shù)據(jù)的個數(shù)等于預(yù)定的閥值k1,則將所生成的倒排索引,作為一個最小的索引組,寫入一個第一子索引文件(步驟230)。
然后,在步驟240,判斷第一子索引文件中最小的索引組的個數(shù),是否已經(jīng)達(dá)到一個預(yù)定的第二閥值k2。
如果不是,則對新插入的數(shù)據(jù)源的索引操作結(jié)束,過程將返回到步驟210,對下一個數(shù)據(jù)源進(jìn)行索引操作。
如果是,則在步驟250,把這k2個索引組合并成一個更大的索引組,順序地寫入第二子索引文件;然后,在步驟260,判斷第二子索引文件中最小的索引組的個數(shù),是否已經(jīng)達(dá)到一個第三閥值k3;如果不是,則對新插入的數(shù)據(jù)源的索引操作結(jié)束,過程將返回到步驟210,對下一個數(shù)據(jù)源進(jìn)行索引操作。
如果是,則在步驟270,把這k3個索引組合并成一個更大的索引組,順序地寫入第一磁盤索引文件。然后,返回步驟240。
按照本發(fā)明的一個實(shí)施例,K2=K3。按照本發(fā)明的另一個實(shí)施例,選擇K2和/或K3等于K1。
可以看出,由于k1代表在內(nèi)存中進(jìn)行索引操作所包含的最大源數(shù)據(jù)(例如文檔)數(shù),因此,在給定條件下,k1越小,進(jìn)行索引操作對內(nèi)存的容量占用的越少。索引文件中最小的索引組的個數(shù)達(dá)到k2(k3)時,就被合并成一個更大的索引組,因此,k2(k3)越小,合并的操作越頻繁,索引更新的速度越快,使查詢響應(yīng)時間縮短。
按照本發(fā)明的實(shí)施例,第一子索引文件和第二子索引文件被存儲在非易失性存儲器上。非易失性存儲器包括但不限于磁盤、光盤等存儲介質(zhì)。
按照本發(fā)明,合并索引組的步驟可以進(jìn)一步包括合并各索引組中對應(yīng)于相同的索引項(xiàng)的塊。與此相關(guān)聯(lián),可以修改合并后所生成的索引組的塊的個數(shù)、每個塊的偏移地址、以及下一個索引組的偏移地址。
顯然,在上述方法過程中,判斷一定大小的索引組的個數(shù),可以有多種方式,例如可以讀取索引文件中一定大小的索引組的數(shù)目。這個數(shù)目在每次向索引文件中寫入一個索引組時被更新。另外,不同大小的索引組的個數(shù),也可以用不同的計數(shù)器來記錄。每當(dāng)向索引文件中寫入一個索引組,相應(yīng)的計數(shù)器就被遞增1。每當(dāng)一定大小的k2(或k3)個索引組被合并時,相應(yīng)的計數(shù)器就被清零。相應(yīng)地,在合并索引組時,可以以不同方式修改對第一子索引文件和第二子索引文件中不同大小的索引組的個數(shù)的記錄。
圖3表示按照本發(fā)明一個實(shí)施例由檢索系統(tǒng)進(jìn)行的一個查詢過程。
按照本發(fā)明的一個實(shí)施例,檢索系統(tǒng)可以在前文所述的本發(fā)明的磁盤索引文件上進(jìn)行查詢操作。一開始,假設(shè)用戶向檢索系統(tǒng)輸入一個查詢詞(例如關(guān)鍵詞)。檢索系統(tǒng)獲得對應(yīng)的查詢詞ID(或索引項(xiàng)ID)(步驟310)。例如,可以通過圖1A的映射表110,獲得對應(yīng)的查詢詞ID。
在步驟320,檢索系統(tǒng)訪問對應(yīng)該查詢詞的第一個塊。如前文結(jié)合圖1A所說明的那樣,檢索系統(tǒng)例如可以通過數(shù)據(jù)的各種映射關(guān)系,例如通過索引項(xiàng)與索引文件ID、索引組ID和塊偏移地址等的映射關(guān)系(例如映射表120),獲得每個索引項(xiàng)的索引信息在索引文件中的位置,即查詢詞在索引文件中對應(yīng)的索引塊。由于索引文件的結(jié)構(gòu),該第一個塊位于索引文件中靠前的較大索引組中。
在步驟330,讀取索引文件中對應(yīng)該查詢詞的第一個塊。然后,在步驟340,判斷下一個塊是否為空??梢酝ㄟ^搜索當(dāng)前索引文件中其余索引組中是否存在對應(yīng)該查詢詞的塊來進(jìn)行判斷。
如果在步驟340中判斷下一個塊不為空,即還有對應(yīng)于該查詢詞的塊,則在步驟350,讀取下一個塊。然后返回步驟340,重復(fù)讀取下一個塊的操作,直到下一個塊為空。
如果在步驟340中判斷下一個塊為空,則在步驟360,則返回所讀取的所有的塊。
這樣,就完成了針對用戶提交的查詢詞在一個索引文件中獲得所有索引信息的處理。使用本發(fā)明的索引結(jié)構(gòu)時,搜索系統(tǒng)可以在另一個索引文件中進(jìn)行同樣的操作,由此能進(jìn)一步處理索引信息,把查詢結(jié)果返回給用戶。
圖4A示意性地表示本發(fā)明的合并索引組的原理。圖中最頂部的示意圖中,水平條上的左右兩個柱子代表兩個索引文件index0(索引文件1)和index1(索引文件2)。圖中的箭頭表示索引組的合并次序。
一開始,索引文件1和索引文件2都是空的。當(dāng)一個索引組生成后,該索引組被寫到索引文件1,這個結(jié)果由插在左邊柱子上的1個圓盤表示。之后,第2個索引組生成,該第2個索引組被順序地寫到索引文件1,這個結(jié)果由插在柱子上的2個圓盤表示。之后,第3個索引組生成,該第3個索引組被順序地寫到索引文件1,這個結(jié)果由插在柱子上的3個圓盤表示。這時,將這三個索引組合并,寫到索引文件2中。這個結(jié)果由插在右邊柱子上的1個更大的圓盤表示,如圖中的右上部分所示。此時,左邊的柱子變空,表示索引文件1中沒有任何內(nèi)容。
然后,當(dāng)?shù)?、5、6個索引組生成時,它們以與上述的同樣的方式被寫入索引文件1,然后被合并成一個更大的索引組,順序地寫到索引文件2中。從右下部分可見,此時,插在右邊柱子上的是2個大圓盤,這兩個大圓盤代表兩個大索引組。同樣,此時左邊的柱子變空,表示索引文件1中沒有任何內(nèi)容。
從以上過程可知,每當(dāng)一個索引文件(例如索引文件1)中新生成的索引組數(shù)量達(dá)到一個數(shù)值k2時(本案例中k2=3),就將這k2個索引組就被合并成一個更大的索引組,并寫入另一個索引文件(索引文件2)。雖然沒有進(jìn)一步說明,但實(shí)際上,在索引文件2中,當(dāng)這樣合并成的大索引組本身達(dá)到一定的數(shù)量(例如k3=3)時,也將被合并成一個更大的索引組,并被寫入另一個索引文件(索引文件1)。
本例中,假設(shè)索引組1-索引組6都包含相同數(shù)量k1的源數(shù)據(jù)(例如文檔),但是對k1的具體值沒有規(guī)定。
圖4B表示本發(fā)明的合并索引組的一個具體過程的示意圖。圖中用虛線方框(421、422、423)表示一個索引,它由子索引文件1和子索引文件2代表,而不同的方框則表示在合并過程中不同時刻的索引的內(nèi)容。另外,為了簡明,在本例中假設(shè)k1=k2=k3=10。方框41表示,在某個時刻,子索引文件2是空的,而子索引文件1中已經(jīng)有m-1個索引組G110、G210、...、Gm-110,其中,上標(biāo)10表示索引組的大小。上文已經(jīng)指出,在本發(fā)明的語境中,索引組的大小,表示該索引組所包含的源數(shù)據(jù)(例如文檔)的個數(shù)。因此,例如G110表示索引組G1含有10個文檔。此時,又生成了一個同樣大小的索引組Gm10。
按照本發(fā)明,如果m<10,則將Gm10寫到子索引文件1中。如方框422所示,此時,子索引文件1中的索引組的個數(shù)變成m,而子索引文件2無變化。
然而,如果m=10,則將這m-1個索引組G110、G210、...、Gm-110與Gm10合并成一個含有100個文檔的索引組G1001,并將合并后的索引組G1001寫到子索引文件2中。同時,子索引文件1變空。這個過程如方框423所示。
圖4C是圖4B所示的合并索引組的過程的繼續(xù),圖中的方框431-435表示與圖4b中的相同的索引。如方框431所示,在某個時刻,子索引文件1中含有m-1個大小為10的索引組,子索引文件2中含有n個大小為100的索引組。此時,又生成了一個大小為10的索引組Gm10。
如果m<10,則將Gm10寫到子索引文件1中。如方框432所示,此時,子索引文件1中的索引組數(shù)變成m個,而子索引文件2無變化。
如果m=10且n<9,則將這m-1個索引組G110、G210、...、Gm-110與Gm10合并成一個含有100個文檔的索引組,并寫到子索引文件2中,變成索引組G100n+1同時,子索引文件1變空。這個過程如方框433所示。
如果m=10且n=9,則將這m-1個索引組G110、G210、...、Gm-110與Gm10合并成一個含有100個文檔的索引組,并寫到子索引文件2中。由于子索引文件2中已經(jīng)有了9個含有100個文檔的索引組,因此新合并的索引組變?yōu)榈?0個含有100個文檔的索引組G10010。按照本發(fā)明,將這個新合并的索引組與子索引文件2中的9個索引組進(jìn)一步合并為一個含有103=1000個文檔的索引組G11000,并寫到子索引文件1中。此時子索引文件2變空。這個過程如方框434和435所示。
由上的過程可以看出,索引組的合并的主要在較小的索引組中發(fā)生。索引組越大越穩(wěn)定。
下面進(jìn)一步考察本發(fā)明方法的技術(shù)效果,為了簡明,仍然假設(shè)k1=k2=k3=k。一般來說,當(dāng)一個磁盤索引文件被擴(kuò)展到一定階段時,磁盤索引文件的兩個子文件1、2中包含的大小不同的索引組,可表示如下(i>=3)子索引文件1G(ki),G(ki-2)...,...,G(k3),G(k3),G(k3)...G(k),G(k),G(k),G(k),G(k),G(k),G(k),G(k),G(k)子索引文件2G(ki+1)...G(ki-1)...,...,G(k2),G(k2)...
其中,k為最小索引組的大小,即最小索引組所包含的數(shù)據(jù)源的個數(shù),G(ki)表示一個含有ki個數(shù)據(jù)源的索引組。注意到這兩個子索引文件的一個存儲大小為k的奇數(shù)次冪的索引組,另一個存儲大小為k的偶數(shù)次冪的索引組。
如果大小為ki的索引組的個數(shù)達(dá)到k,則將所有這k個索引組合并成一個更大的索引組,其大小為ki+1。當(dāng)子索引文件1中的大小為k的索引組的個數(shù)達(dá)到k時,將所有這種索引組合并成子索引文件2中的大小為k*k的更大索引組,隨著這個遞增過程的進(jìn)行,有一個時刻,大小為k*k的索引組的個數(shù)達(dá)到k-1,大小為k的索引組的個數(shù)達(dá)到k-1。此時,如果子文件1再增加一個大小為k的索引組,則將大小為k的k個索引組,全部合并成子索引文件2中的一個新的大小為k*k的索引組。以上的合并過程遵循以下的規(guī)則較小的索引組總是被放在大索引組之上,或者說,每個子文件中最小的索引組總是出現(xiàn)在該子索引文件的尾部。
假設(shè)最小的索引組包含的文檔個數(shù)k=10,可以算出,索引文件中索引組的總數(shù)不大于文檔總數(shù)的各位上的數(shù)字值的總和。例如,如果要索引的文檔的個數(shù)為2789870,則索引組的總數(shù)為2+7+8+9+8+7=41,其在磁盤索引文件中的排列如下所示。
G(106),G(106),G(104),G(104),G(104),G(104),G(104),G(104),G(104),G(104),G(102),G(102),G(102),G(102),G(102),G(102),G(102),G(102)G(105),G(105),G(105),G(105),G(105),G(105),G(105),G(103),G(103),G(103),G(103),G(103),G(103),G(103),G(103),G(103),G(10),G(10),G(10),G(10),G(10),G(10),G(10)由此可見,使用本發(fā)明的基于索引組的索引結(jié)構(gòu),索引文件中索引組的個數(shù)隨著被索引的文檔的數(shù)量的迅速增長而緩慢地增長。最大的索引組總是位于索引文件的頭部,小索引組總是位于大索引組的尾部,從而索引更新大都發(fā)生在小的索引組中,減少了大索引組的IO操作,由此減少總的IO操作的次數(shù),因此提高了索引建立速度。由于小的索引組的合并速度較快,而大的索引組保持相對穩(wěn)定,因此能夠減少查詢響應(yīng)時間。如果因?yàn)樗饕母滤俣茸兟鴮?dǎo)致查詢響應(yīng)時間增加時,可以自動降低k2(k3),以加快索引的更新速度。并且,還可以根據(jù)內(nèi)存的容量,靈活地調(diào)節(jié)在內(nèi)存中進(jìn)行索引操作所包含的最大文檔數(shù)k1,例如,當(dāng)可用內(nèi)存變小時,自動降低k1。
要指出的是,本發(fā)明的上述方法可以以存儲在計算機(jī)可讀的存儲介質(zhì)中的計算機(jī)可執(zhí)行程序的方式實(shí)現(xiàn)。這些存儲介質(zhì)包括但不限于各種存儲器和存儲單元,半導(dǎo)體設(shè)備,磁盤單元例如光、磁和磁光盤。
以上結(jié)合附圖對本發(fā)明優(yōu)選實(shí)施例進(jìn)行了詳細(xì)地描述,這些實(shí)施例只是示例行的而不是限制性的,本領(lǐng)域技術(shù)人員可以在不背離本發(fā)明的精神實(shí)質(zhì)情況下作出各種修改和變型。
權(quán)利要求
1.一種擴(kuò)展索引的方法,該索引包含一個第一子索引文件和一個第二子索引文件,該方法包含以下步驟(a)在內(nèi)存中對新插入的數(shù)據(jù)源進(jìn)行生成倒排索引的索引操作;(b)如果索引操作所包含的源數(shù)據(jù)的個數(shù)達(dá)到一個預(yù)定的第一閥值k1,則將所生成的倒排索引,作為一個最小的索引組,順序地寫入第一子索引文件;(c)如果第一子索引文件中最小的索引組的個數(shù)達(dá)到一個預(yù)定的第二閥值k2,則把這k2個索引組合并成一個更大的索引組,順序地寫入第二子索引文件;否則返回步驟(a);(d)如果第二子索引文件中最小的索引組的個數(shù)達(dá)到第三閥值k3,則把這k2個索引組合并成一個更大的索引組,順序地寫入第一子索引文件,返回步驟(c);否則,返回步驟(a)。
2.按照權(quán)利要求1的方法,特征在于,K2等于K3。
3.按照權(quán)利要求1的方法,特征在于,K2和K3至少一個等于第一閥值K1。
4.按照權(quán)利要求1、2或3的方法,特征在于,第一子索引文件和第二子索引文件存儲在包括磁盤、光盤、光磁盤等的非易失性存儲器中。
5.按照權(quán)利要求1、2或3的方法,其中,源數(shù)據(jù)是包括Word文檔、PDF文檔、HTML文檔等的任何電子文檔。
6.按照權(quán)利要求5的方法,其中,倒排索引是關(guān)鍵詞索引。
7.按照權(quán)利要求1的方法,特征在于,合并索引組的步驟包括合并各倒排索引組中對應(yīng)于相同的索引項(xiàng)的塊。
8.按照權(quán)利要求1或7的方法,特征在于,合并索引組的步驟進(jìn)一步包括更新對相關(guān)子索引文件中不同大小的索引組的個數(shù)的記錄。
9.一種查詢索引文件中的索引信息的方法,其中,該索引文件包含按大小順序排列的若干個索引組,每個索引組含有對源數(shù)據(jù)的倒排索引,該方法包含訪問當(dāng)前當(dāng)前索引文件中包含對應(yīng)該查詢詞的索引組;讀取對應(yīng)該查詢詞的第一個塊的索引信息;重復(fù)讀取其余索引組中其它的對應(yīng)該查詢詞的塊,直到其余索引組中沒有對應(yīng)該查詢詞的塊;返回所讀取的所有的塊的索引信息。
10.一種索引結(jié)構(gòu),包含結(jié)構(gòu)相同的兩個索引文件,每個索引文件包含按大小順序排列的若干個索引組,每個索引組含有對源數(shù)據(jù)的倒排索引,其中,最小的索引組包含的數(shù)據(jù)源的數(shù)量為k1,其余索引組包含的源數(shù)據(jù)的數(shù)量為k1*k2i(i>=1),并且包含相同數(shù)量的源數(shù)據(jù)的索引組的個數(shù)小于k2。
11.按照權(quán)利要求10的索引結(jié)構(gòu),其中,k1=k2。
12.按照權(quán)利要求11或12的索引結(jié)構(gòu),其中,源數(shù)據(jù)是電子文檔,并且倒排索引是關(guān)鍵詞倒排索引。
全文摘要
一種索引結(jié)構(gòu)和擴(kuò)展索引的方法,包含(a)在內(nèi)存中對新插入的數(shù)據(jù)源進(jìn)行生成倒排索引的索引操作;(b)如果索引操作所包含的源數(shù)據(jù)的個數(shù)達(dá)到第一閥值k1,則將所生成的倒排索引順序地寫入第一子索引文件;(c)如果第一子索引文件中最小的索引組的個數(shù)達(dá)到第二閥值k2,則把這k2個索引組合并成更大的索引組,順序地寫入第二子索引文件;(d)如果第二子索引文件中最小的索引組達(dá)到第三閥值k3個,則把它們組合并成更大的索引組,順序地寫入第一子索引文件。由于索引更新大都發(fā)生在小索引組中,大索引組的IO操作次數(shù)減少,因此能提高索引建立/更新速度,另外,可以根據(jù)系統(tǒng)資源的使用情況自動調(diào)整閥值k1、k2、k3。
文檔編號G06F17/30GK1979469SQ20051012428
公開日2007年6月13日 申請日期2005年11月29日 優(yōu)先權(quán)日2005年11月29日
發(fā)明者陳偉柱, 蘇中, 張俐, 王睿 申請人:國際商業(yè)機(jī)器公司