專利名稱:用于建立計(jì)算機(jī)文字信息的索引和進(jìn)行檢索的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)信息處理中信息的索引生成及檢索,具體涉及建立計(jì)算機(jī)文字信息的索引和進(jìn)行檢索的方法和系統(tǒng)。
在目前的計(jì)算機(jī)文字信息的全文檢索中,有兩種建立索引的方法字表法和詞表法。字表法按文獻(xiàn)中出現(xiàn)的字作為一個(gè)索引單位生成索引。這種方法占用的空間大。而詞表法是將文獻(xiàn)中出現(xiàn)的關(guān)鍵詞作為一個(gè)索引單位來(lái)建立索引。這種方法雖然節(jié)省了空間,提高了查詢速度,但索引生成的速度慢,漏查率較高。
日本專利特許公開,特開平8-235212,特開平8-101848,特開平10-307841中公開了一種全文檢索系統(tǒng)采用字表法生成索引,利用文件系統(tǒng)存儲(chǔ)文獻(xiàn)索引信息。它為字符集中的每個(gè)字符分別建立一個(gè)相應(yīng)的文件,用來(lái)保存該字符在文獻(xiàn)中出現(xiàn)的位置。為了節(jié)省字符位置數(shù)據(jù)的存儲(chǔ)空間,在生成字符索引時(shí),它將每個(gè)字符第一次出現(xiàn)的位置保存在該字符的索引文件中,并以第一次出現(xiàn)的位置為基礎(chǔ),采用差分算法把該字符在文獻(xiàn)中第一次之后出現(xiàn)的位置與前一次出現(xiàn)的位置換算成差分序列(差分序列的定義請(qǐng)參見本文中的術(shù)語(yǔ)解釋),順序存放在第一次出現(xiàn)的位置后面。當(dāng)進(jìn)行全文檢索時(shí),用該字符保存在其索引文件中的第一次出現(xiàn)的位置以及它后面第一個(gè)的差分序列還原出第二次出現(xiàn)的位置,再由剛剛還原得到的該字符第二次出現(xiàn)的位置和它后面的一個(gè)差分序列還原得到第三次出現(xiàn)的位置,重復(fù)執(zhí)行還原,直至找到檢索詞中該字符的匹配位置。對(duì)于一個(gè)頻繁出現(xiàn)的字符,如“の”,當(dāng)匹配一個(gè)位于較后的字符位置,就必須從該字符在文獻(xiàn)中第一次出現(xiàn)的位置開始逐個(gè)還原該字符每次出現(xiàn)的位置直到要匹配的位置。比如一個(gè)字符在文獻(xiàn)中一共出現(xiàn)了1千次,要得到該字符第999次出現(xiàn)的位置,需要從它的第1個(gè)差分序列開始執(zhí)行998次還原才能獲得第999次出現(xiàn)的位置。因此,該系統(tǒng)在把字符的差分序列還原成文獻(xiàn)中的位置時(shí)花費(fèi)的時(shí)間比較長(zhǎng)。
隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)突飛猛進(jìn)的發(fā)展,現(xiàn)有全文檢索系統(tǒng)已不能滿足操作者對(duì)數(shù)據(jù)檢索不斷增長(zhǎng)的需求。
因此本發(fā)明的目的是提供一種新的建立計(jì)算機(jī)文字信息的索引和進(jìn)行檢索的方法和系統(tǒng),對(duì)字符信息進(jìn)行索引建立,支持海量數(shù)據(jù)的高速存貯及查詢,多用戶可共享數(shù)據(jù)。
本發(fā)明的目的是提供一種建立文獻(xiàn)索引方法。它能縮小索引文件占據(jù)的空間,同時(shí)又能保證以較高的速度進(jìn)行全文檢索。
本發(fā)明的第二目的是提供一種利用上述索引進(jìn)行全文檢索的方法。
本發(fā)明的第三目的是提供一種通過(guò)指定的字符位置快速獲得大量文獻(xiàn)中與該字符位置相對(duì)應(yīng)的文獻(xiàn)信息的方法。
為了達(dá)到上述目的,發(fā)明人開發(fā)出了一種新的文字信息全文登錄、檢索方法和系統(tǒng)。它采用Client/Server方式設(shè)計(jì)而成,利用SQL Server關(guān)系數(shù)據(jù)庫(kù)的特性,建立字符信息索引,能夠存儲(chǔ)海量數(shù)據(jù),提高了數(shù)據(jù)的共享性、一致性、安全性,使互聯(lián)網(wǎng)和內(nèi)部網(wǎng)上的Web服務(wù)器具有大容量、高速全文信息檢索功能,實(shí)現(xiàn)信息資源的全球共享。
本發(fā)明提供了一種建立文字信息的索引的方法,包括下述步驟,在作為檢索對(duì)象的一組文獻(xiàn)中,按照所有文獻(xiàn)中所有字符的順序確定每個(gè)字符在該組文獻(xiàn)中的位置;將同一字符的位置數(shù)據(jù)按先后順序存儲(chǔ)在對(duì)應(yīng)于該字符的一個(gè)或多個(gè)數(shù)據(jù)庫(kù)塊,并且獲得每個(gè)數(shù)據(jù)庫(kù)塊的中存儲(chǔ)的最大位置和最小位置;將每個(gè)數(shù)據(jù)庫(kù)塊分為多個(gè)小塊,每個(gè)小塊包括多個(gè)字節(jié)的存儲(chǔ)空間,并且獲得每個(gè)小塊中存儲(chǔ)的最小位置。
本發(fā)明還提供了一種基于根據(jù)上述方法建立文字信息的索引,對(duì)文字信息進(jìn)行檢索的方法,包括以下步驟,獲得檢索詞中每個(gè)字符的相對(duì)位置關(guān)系,用于檢索檢索詞中每個(gè)字符的索引;分別判斷該字符的每個(gè)數(shù)據(jù)庫(kù)塊中是否可能存在符合上述相對(duì)位置關(guān)系的位置;在可能存在符合上述相對(duì)位置關(guān)系的位置的數(shù)據(jù)庫(kù)塊中,分別判斷其中每個(gè)小塊是否可能存在符合上述相對(duì)位置關(guān)系的位置;在可能存在符合上述相對(duì)位置關(guān)系的位置的小塊中,判斷每個(gè)位置是否符合上述相對(duì)位置關(guān)系。
本發(fā)明還提供了一種建立文字信息索引和進(jìn)行檢索的方法,其特征在于建立文獻(xiàn)信息共享轉(zhuǎn)換器,該文獻(xiàn)信息共享轉(zhuǎn)換器開辟一塊共享內(nèi)存,把數(shù)據(jù)庫(kù)中存儲(chǔ)的作為檢索對(duì)象的一組文獻(xiàn)的文獻(xiàn)信息的一部分字段緩存在共享內(nèi)存中備份;在進(jìn)行全文檢索時(shí),直接從共享內(nèi)存中得到有關(guān)的文獻(xiàn)信息。
本發(fā)明還提供了一種建立文字信息索引和進(jìn)行檢索的系統(tǒng),包括索引生成裝置,該裝置按照作為檢索對(duì)象的一組文獻(xiàn)中所有字符的順序確定每個(gè)字符在該組文獻(xiàn)中的位置;將同一字符的位置數(shù)據(jù)按先后順序存儲(chǔ)在對(duì)應(yīng)于該字符的一個(gè)或多個(gè)數(shù)據(jù)庫(kù)塊,并且獲得每個(gè)數(shù)據(jù)庫(kù)塊的中存儲(chǔ)的最大位置和最小位置;將每個(gè)數(shù)據(jù)庫(kù)塊分為多個(gè)小塊,每個(gè)小塊包括多個(gè)字節(jié)的存儲(chǔ)空間,并且獲得每個(gè)小塊中存儲(chǔ)的最小位置;全文檢索裝置,該裝置獲得檢索詞中每個(gè)字符的相對(duì)位置關(guān)系,用于檢索檢索詞中每個(gè)字符的索引;分別判斷該字符的每個(gè)數(shù)據(jù)庫(kù)塊中是否可能存在符合上述相對(duì)位置關(guān)系的位置;在可能存在符合上述相對(duì)位置關(guān)系的位置的數(shù)據(jù)庫(kù)塊中,分別判斷其中每個(gè)小塊是否可能存在符合上述相對(duì)位置關(guān)系的位置;在可能存在符合上述相對(duì)位置關(guān)系的位置的小塊中,判斷每個(gè)位置是否符合上述相對(duì)位置關(guān)系;存儲(chǔ)裝置,用于存儲(chǔ)文獻(xiàn),以及文獻(xiàn)索引信息。
本發(fā)明還提供了一種建立文字信息索引和進(jìn)行檢索的系統(tǒng),其特征在于包括一個(gè)文獻(xiàn)信息共享轉(zhuǎn)換裝置,該文獻(xiàn)信息共享轉(zhuǎn)換裝置開辟一塊共享內(nèi)存,把數(shù)據(jù)庫(kù)中存儲(chǔ)的一組文獻(xiàn)的文獻(xiàn)信息在共享內(nèi)存中備份;在進(jìn)行全文檢索時(shí),直接從共享內(nèi)存中得到有關(guān)文獻(xiàn)的信息。
術(shù)語(yǔ)解釋
本說(shuō)明書在后面涉及數(shù)據(jù)庫(kù)結(jié)構(gòu)時(shí),發(fā)明人使用了一些數(shù)據(jù)庫(kù)的常用術(shù)語(yǔ),例如表、記錄和字段。表是數(shù)據(jù)庫(kù)的結(jié)構(gòu)組成部分,一個(gè)表包含多條記錄,一條記錄可以包含多個(gè)字段。本說(shuō)明書的后面將會(huì)提到以下幾個(gè)專用術(shù)語(yǔ),在此先加以解釋。
文檔類按照文獻(xiàn)的內(nèi)容不同、作者不同、發(fā)表的時(shí)間不同或登錄的操作者不同、登錄的主機(jī)不同等各種因素,可以將登錄的文獻(xiàn)劃分成多個(gè)文檔類。每個(gè)文檔類中可以包括多個(gè)文獻(xiàn)。
文獻(xiàn)文章、小說(shuō)、新聞報(bào)道、專利說(shuō)明書等文件。
字符本說(shuō)明書中所提到的字符是指文獻(xiàn)中的文字(包括單、雙字節(jié)文字,如西文字母,中、日文漢字,異體字、日文平假名,日文片假名)、標(biāo)點(diǎn)符號(hào)、數(shù)字、特殊字符和制表符等單個(gè)字符。
字符的內(nèi)部編碼由于不同操作系統(tǒng)使用的雙字節(jié)文字的代碼標(biāo)準(zhǔn)不同,如WINDOW平臺(tái)上的日文代碼標(biāo)準(zhǔn)是Shift_JIS(Macintosh和DOS-V上的8位日語(yǔ)編碼標(biāo)準(zhǔn)),UNIX平臺(tái)上的日文代碼標(biāo)準(zhǔn)是EUC(Extended Unix Code)。為了使來(lái)自各個(gè)不同平臺(tái)的文獻(xiàn)都能登錄到本系統(tǒng)中,發(fā)明人使用字符內(nèi)部編碼方法,將同一個(gè)字符的不同標(biāo)準(zhǔn)的代碼例如JIS(Japanese Industrial Standard)、Shift_JIS(Macintosh和DOS-V上的8位日語(yǔ)編碼標(biāo)準(zhǔn))或EUC(ExtendedUnix Code)轉(zhuǎn)換成與之對(duì)應(yīng)的唯一的內(nèi)部編碼。
字符位置登錄文獻(xiàn)時(shí),按其所屬文檔類中文獻(xiàn)登錄的先后順序和文獻(xiàn)里字符出現(xiàn)的先后順序,為一文檔類的文獻(xiàn)里出現(xiàn)的每個(gè)字符分配一個(gè)在該文檔類中的絕對(duì)位置。如,一文檔類中第一個(gè)字符的位置為1,以后每個(gè)字符的位置一次為2,3…。
差分序列
在同一文檔類中,對(duì)于一個(gè)字符本次出現(xiàn)的字符位置與該字符前一次出現(xiàn)的字符位置,利用差分算法,計(jì)算得到該字符的字符位置差分值。
差分算法在同一文檔類中,將一個(gè)字符本次出現(xiàn)的位置與該字符前一次在該文檔類中出現(xiàn)的位置的低進(jìn)制差值換算為高進(jìn)制差值,例如將十進(jìn)制的差值換算為127進(jìn)制值。此外為了區(qū)分各個(gè)差分序列,把該127進(jìn)制數(shù)中除了最后一位數(shù)(即個(gè)位數(shù))以外的其它各位數(shù)的字節(jié)中的最高位的值設(shè)置為1,獲得該字符位置的差分序列。比如將十進(jìn)制的2048383換算為127進(jìn)制的值。
(2048383)10=(0x01 0x00 0x00 0x00)127換算得到的127進(jìn)制數(shù)共有4位數(shù),每一位數(shù)表示為一個(gè)16進(jìn)制數(shù),將這個(gè)數(shù)中除最后一個(gè)0以外的其它各位數(shù)的字節(jié)中的最高位的值設(shè)置為1(即與0x80“或”運(yùn)算),得到差分序列是(81808000)16。
由于字符在文獻(xiàn)中出現(xiàn)的位置是變化的,所以每個(gè)差分序列的大小也是變化的,所占用的字節(jié)數(shù)是不定的。請(qǐng)注意這個(gè)字符的差分序列除最后一個(gè)字節(jié)中的高位(即字節(jié)的第8位)值是0之外,其前面字節(jié)的高位值均為1,由此可分辨出不同的差分序列。比如字符“日”在一文檔類中前后兩次相繼出現(xiàn)的位置是1390和1450,那么該字符的差分序列是((1450-1390)%127)10=(60)10=(3C)16(注對(duì)于較小的數(shù),本文中為易于表示而不換算成127進(jìn)制數(shù)),這個(gè)差分序列只占用1個(gè)字節(jié)的存放空間。又如字符“好” 在一文檔類中前后兩次相繼出現(xiàn)的位置是1308和9054,那么該字符的差分序列計(jì)算步驟是計(jì)算((9054-1308)/127)10,得到商是(60)10,余數(shù)為(126)10=(7E)16。
計(jì)算(60/127)10,得到商是(0)10,余數(shù)為(60)10=(3C)16。
由第1、2步計(jì)算出的127進(jìn)制數(shù),將低位數(shù)(7E)16的最高字節(jié)保留不變,高位數(shù)的最高字節(jié)置成1,即(3C)16→(BC)16。按由高向低的順序排列便得到漢字“好”的差分序列為(BC7E)16,這個(gè)差分序列需要2個(gè)字節(jié)的存放空間。
還原在執(zhí)行全文檢索時(shí),需要將字符的差分序列還原才能得到它在所屬文檔類中出現(xiàn)的字符位置。還原字符位置的差分序列的的算法就是差分算法的逆向算法。
小塊是發(fā)明人自定義的一個(gè)存放數(shù)據(jù)的結(jié)構(gòu),它由一個(gè)存放字符位置的數(shù)據(jù)項(xiàng)和一個(gè)存放多個(gè)字符位置差分序列的數(shù)組構(gòu)成。例如,它由一個(gè)長(zhǎng)整型的數(shù)據(jù)項(xiàng)和一個(gè)BYTE類型的數(shù)組構(gòu)成,用于存放同一字符的多個(gè)位置信息。其中長(zhǎng)整型的數(shù)據(jù)項(xiàng)用來(lái)存放字符的一個(gè)字符位置;BYTE類型的數(shù)組存放的是自該字符位置之后該字符出現(xiàn)的多個(gè)字符位置的差分序列。
數(shù)據(jù)庫(kù)塊是數(shù)據(jù)庫(kù)中用來(lái)存放數(shù)據(jù)的一塊物理區(qū)域,反映在表結(jié)構(gòu)中就是一個(gè)字段。一個(gè)數(shù)據(jù)庫(kù)塊可細(xì)分為許多的小塊,用它可以保存字符的多個(gè)位置值。在表的每條存放著字符位置信息的記錄中包含一個(gè)數(shù)據(jù)庫(kù)塊,并且包含兩個(gè)字段分別對(duì)應(yīng)于該條記錄中數(shù)據(jù)庫(kù)塊里保存的該字符的最小位置和最大位置,以便在查詢時(shí)能根據(jù)這兩個(gè)字段的值快速判斷出該條記錄中是否可能有與其它字符相匹配的字符位置。如果可能有,再針對(duì)該條記錄中的數(shù)據(jù)庫(kù)塊執(zhí)行該字符的還原處理。如果沒(méi)有,對(duì)該字符下一條記錄進(jìn)行判斷、還原。
檢索詞由二個(gè)及二個(gè)以上的字符組成的字符串。它是操作者指定的一個(gè)要查找的字符串。
檢索詞匹配位置因?yàn)槲墨I(xiàn)索引是以字符為單位存儲(chǔ)的,所以指定檢索詞中某個(gè)字符的出現(xiàn)位置作為整個(gè)檢索詞的位置——檢索詞匹配位置,對(duì)數(shù)據(jù)庫(kù)中存儲(chǔ)的字符位置信息進(jìn)行匹配處理。在后面的實(shí)施例中,檢索詞匹配位置設(shè)為檢索詞中出現(xiàn)第一個(gè)字符的位置。例如檢索詞“米國(guó)アメリカ”中假設(shè)這6個(gè)字符各自的在文檔類中的位置是“米”的位置是10001,“國(guó)”的位置是10002,“ア”的位置是10003,“メ”的位置是10004,“リ”的位置是10005,“カ”的位置是10006,那么如果以檢索詞中出現(xiàn)的第一個(gè)字符作為它的匹配位置時(shí),檢索詞“米國(guó)アメリカ”匹配位置就是“米”的位置10001。
位移量檢索詞中每個(gè)字符相對(duì)于檢索詞匹配位置的偏移量。例如檢索詞“米國(guó)アメリカ”中假設(shè)以第1個(gè)出現(xiàn)的字符為起始點(diǎn),這6個(gè)字符各自的位移量是“米”的位移量0,“國(guó)”的位移量-1,“ア”的位移量-2,“メ”的位移量-3,“リ”的位移量-4,“カ”的位移是-5。也可以最后一個(gè)字符作起始點(diǎn)分別為這6個(gè)字符分配了各自的位移量?!哎钡奈灰屏渴?,“リ”的位移量是1,“メ”的位移量是2,“ア”的位移量是3,“國(guó)”的位移量是4,“米”的位移量是5。
本發(fā)明如上所述將所有文獻(xiàn)分成多個(gè)文檔類進(jìn)行登錄及存放,每個(gè)文檔類中可以包含多個(gè)文獻(xiàn),每個(gè)文獻(xiàn)按登錄到數(shù)據(jù)庫(kù)的先后順序存放其中出現(xiàn)的字符。
我們從登錄的文獻(xiàn)中提取出文檔類信息、文獻(xiàn)信息、字符信息、字符位置信息存入數(shù)據(jù)庫(kù)。下面將這四類信息一一詳細(xì)解釋。
文檔類信息由每一個(gè)文獻(xiàn)的內(nèi)容可以人為地將其歸納為不同的文檔類,如政治、經(jīng)濟(jì)、體育、旅游……等;也可以根據(jù)不同的文獻(xiàn)登錄的操作者或其他各種原因建立不同的文檔類。本發(fā)明為每個(gè)文檔類指定了能夠唯一標(biāo)識(shí)該文檔類的文檔類編號(hào)。每個(gè)文檔類中還包括了文檔類名稱和該文檔類中字符最后位置等數(shù)據(jù)。其中字符最后位置是指一文檔類中當(dāng)前最后登錄的一個(gè)文獻(xiàn)中最后一個(gè)字符在該文檔類中的字符位置。即文檔類信息包括文檔類編號(hào)、文檔類名稱、和字符最后位置。
文獻(xiàn)信息在每個(gè)文檔類中可以有多個(gè)文獻(xiàn),因此對(duì)每個(gè)登錄的文獻(xiàn)都應(yīng)指定一個(gè)文獻(xiàn)編號(hào)。這個(gè)文獻(xiàn)編號(hào)在每個(gè)文檔類中是唯一的。它是長(zhǎng)整數(shù)類型的數(shù)據(jù)值。它可以是從1開始的升序編號(hào),也可以是不連續(xù)的整數(shù)值。
數(shù)據(jù)庫(kù)中存儲(chǔ)的文獻(xiàn)信息除了每一個(gè)文獻(xiàn)的唯一文獻(xiàn)編號(hào)外,還有文獻(xiàn)所屬的文檔類號(hào)、文獻(xiàn)中出現(xiàn)的第一個(gè)字符和最后一個(gè)字符在所屬文檔類中的字符位置,在本說(shuō)明書的后面我們稱之為文獻(xiàn)的起始位置和終止位置。
字符位置信息每個(gè)文檔類可以包含多個(gè)文獻(xiàn),每一個(gè)文獻(xiàn)可以由多個(gè)字符組成。所有不重復(fù)的字符組成一個(gè)字符集,該字符集中的每一個(gè)字符都有其對(duì)應(yīng)的字符內(nèi)部編碼。由于每一個(gè)字符在該文檔類的文獻(xiàn)中會(huì)出現(xiàn)多次,因此在數(shù)據(jù)庫(kù)中,保存了每個(gè)文檔類中全部字符每次出現(xiàn)的位置信息。字符位置信息包括字符所屬文檔類編號(hào)、相對(duì)應(yīng)的內(nèi)部編碼、存放字符位置數(shù)據(jù)(包括字符位置和差分序列)的數(shù)據(jù)庫(kù)塊、在數(shù)據(jù)庫(kù)塊中存放的該字符的第一個(gè)字符位置和最后一個(gè)字符位置等信息(在本說(shuō)明書的后面我們稱之為數(shù)據(jù)庫(kù)塊的最小位置和最大位置)。
字符信息為了提高全文檢索的執(zhí)行速度,在數(shù)據(jù)庫(kù)中,發(fā)明人保存了每一文檔類中每個(gè)字符的字符信息。字符信息包括字符所屬文檔類編號(hào)、相對(duì)應(yīng)的字符內(nèi)部編碼、該字符在所屬的文檔類里出現(xiàn)的最大位置、該字符在其最后一個(gè)字符位置數(shù)據(jù)庫(kù)塊中的最小位置和其最后一個(gè)數(shù)據(jù)庫(kù)塊中已存放字符位置數(shù)據(jù)的長(zhǎng)度等。
本發(fā)明將文檔類中的所有字符以字符為單位建立字符的位置索引,也就是說(shuō)將字符集內(nèi)的每個(gè)字符每次出現(xiàn)在該文檔類每個(gè)文獻(xiàn)中的位置信息都存入數(shù)據(jù)庫(kù)中。
由于有些常用字符如中文中“的”、日文中“の”出現(xiàn)的次數(shù)非常多,為了使存放該字符位置信息所占的空間較小,本發(fā)明的存放字符位置的方法是以該字符在所屬文檔類中第一次出現(xiàn)的位置及以后每次出現(xiàn)的位置表示每個(gè)字符每次出現(xiàn)在該文檔類每個(gè)文獻(xiàn)中的位置信息,并且用該字符在該文檔類當(dāng)前出現(xiàn)的位置與前一次出現(xiàn)的位置的差分序列來(lái)表示上述的以后每次出現(xiàn)的位置。也就是說(shuō)在物理結(jié)構(gòu)上在數(shù)據(jù)庫(kù)塊中存放的是該字符第一次出現(xiàn)的字符位置及以后每次出現(xiàn)的位置的差分序列。由于位置的差分序列相對(duì)于實(shí)際位置值所占的字節(jié)數(shù)較小,因此可以較大地減少字符位置索引所占的空間。
用差分序列表示每個(gè)字符以后每次出現(xiàn)的位置,雖然所占的空間較小,但是會(huì)影響檢索速度。因?yàn)楫?dāng)存放一個(gè)出現(xiàn)頻率非常高的常用字的每次出現(xiàn)位置信息時(shí),與該字符對(duì)應(yīng)的差分序列就很多。例如某一文檔類中的一個(gè)字符出現(xiàn)了十萬(wàn)次,則利用該字符第一次出現(xiàn)的位置及以后每次出現(xiàn)的位置與前一次出現(xiàn)位置的差分序列還原出例如第九萬(wàn)次出現(xiàn)的具體位置時(shí)就會(huì)浪費(fèi)許多系統(tǒng)時(shí)間。
為了解決這一問(wèn)題,本發(fā)明對(duì)全文檢索系統(tǒng)JetSearch中使用一個(gè)系統(tǒng)文件來(lái)保存一個(gè)字符的位置信息的方法作了改進(jìn)。本發(fā)明將字符位置數(shù)據(jù)的存儲(chǔ)化整為零。在數(shù)據(jù)庫(kù)104中,每一條記錄里有一個(gè)數(shù)據(jù)庫(kù)塊字段存放字符在所屬文檔類中的位置數(shù)據(jù)。同一個(gè)文檔類中的一種字符可以有多個(gè)數(shù)據(jù)庫(kù)塊存放它的位置數(shù)據(jù)。
當(dāng)存放一個(gè)出現(xiàn)頻率非常高的常用字的位置數(shù)據(jù)時(shí),與該字符對(duì)應(yīng)的位置數(shù)據(jù)就會(huì)很多很多。在檢索時(shí)為了能夠迅速找到某個(gè)出現(xiàn)次數(shù)相當(dāng)多的字符的符合匹配條件的位置信息(例如在體育新聞中要查找出現(xiàn)NBA的文章,通過(guò)檢索已知N第一次出現(xiàn)在文章的第一萬(wàn)字處,那么在第一萬(wàn)字之前出現(xiàn)的B和A是不符合匹配條件的),那么就要求系統(tǒng)能夠迅速準(zhǔn)確地判斷并找到相應(yīng)的位置。如果用數(shù)據(jù)庫(kù)塊連續(xù)地存儲(chǔ)字符的差分序列,那么在執(zhí)行查詢匹配時(shí)候,需要從數(shù)據(jù)庫(kù)塊中第1個(gè)差分序列開始逐個(gè)還原出字符本來(lái)的位置,直至符合檢索字符串搭配條件的位置,這會(huì)浪費(fèi)許多系統(tǒng)時(shí)間,這不是一種好方法。
為此,本發(fā)明人將字符位置數(shù)據(jù)庫(kù)塊劃分成許多的小塊,每個(gè)小塊含有一定的字節(jié)數(shù),用于存放多個(gè)差分序列。其中每小塊的前幾個(gè)字節(jié)存放字符在該文檔類里出現(xiàn)的位置。注意此位置是字符在該文檔類里按所有字符出現(xiàn)順序確定的位置(以下稱為小塊的最小位置),而不是經(jīng)過(guò)差分算法計(jì)算出的差分序列,也不同于數(shù)據(jù)庫(kù)塊的最大位置和最小位置。從每小塊的這幾個(gè)字節(jié)以后的字節(jié)存放的是利用差分算法計(jì)算出本次出現(xiàn)的該字符位置與前一次字符出現(xiàn)位置的差分序列。由于字符在文獻(xiàn)中出現(xiàn)的位置是變化的,所以每個(gè)差分序列的大小也是變化的,所占用的字節(jié)數(shù)是不定的。當(dāng)含有一定字節(jié)數(shù)的一個(gè)小塊中所剩余的字節(jié)數(shù)放不下一個(gè)新的差分序列時(shí),系統(tǒng)便用0x00作為該小塊的填充項(xiàng)將剩余的字節(jié)填滿,然后再使用一個(gè)新的小塊,把沒(méi)有存入上一小塊的字符在所屬文檔類中出現(xiàn)的位置作為新小塊的最小位置保存在該小塊的前幾個(gè)字節(jié)里,接著再用差分序列來(lái)表示以后出現(xiàn)的位置。換一個(gè)角度說(shuō)就是,一個(gè)字符以差分序列表示其出現(xiàn)位置一定次數(shù)(例如100-200次)之后,換一個(gè)小塊存放,并為這個(gè)小塊重新確定一個(gè)最小位置,接著再用差分序列表示以后出現(xiàn)的位置。當(dāng)一個(gè)數(shù)據(jù)庫(kù)塊被多個(gè)小塊數(shù)據(jù)填滿時(shí),需要為該字符再創(chuàng)建一條新的記錄,在一個(gè)新的數(shù)據(jù)庫(kù)塊中進(jìn)行存放。
如果小塊的字節(jié)長(zhǎng)度的值設(shè)定過(guò)長(zhǎng),則還原需要的時(shí)間就較長(zhǎng);而小塊的字節(jié)長(zhǎng)度值設(shè)定過(guò)短則占用的空間就較大,因此,以幾百字節(jié)較為合適,也就是以該字符每出現(xiàn)100-200次換一個(gè)小塊存放較為合適。
但是一個(gè)常用字在一文檔類中也許會(huì)出現(xiàn)達(dá)到百萬(wàn)次以上,為此,本發(fā)明設(shè)定該字符出現(xiàn)例如40-80萬(wàn)次(例如填滿4000個(gè)小塊)之后重新另起一條記錄,接著存放該字符的位置數(shù)據(jù)。為此在每條記錄中還應(yīng)有這條記錄中的數(shù)據(jù)庫(kù)塊的最小位置及最大位置。
由上面的說(shuō)明可以看出,在設(shè)計(jì)數(shù)據(jù)庫(kù)的字符位置信息的結(jié)構(gòu)時(shí),發(fā)明人從盡量減少字符檢索時(shí)間方面考慮,在一條存放字符位置數(shù)據(jù)的記錄中增加了兩個(gè)冗余字段——數(shù)據(jù)庫(kù)塊最小位置和數(shù)據(jù)庫(kù)塊最大位置,它們分別存放的是在一個(gè)數(shù)據(jù)庫(kù)塊中存儲(chǔ)的該字符在所屬文檔類中出現(xiàn)位置的最小值和最大值。在全文檢索進(jìn)行檢索詞匹配過(guò)程中,要從數(shù)據(jù)庫(kù)中將存放著檢索詞中所有字符位置信息的記錄全部查找出來(lái),這無(wú)疑是一大批記錄。每條記錄里有一個(gè)存放字符位置數(shù)據(jù)的數(shù)據(jù)庫(kù)塊,每個(gè)數(shù)據(jù)庫(kù)塊里又有數(shù)千個(gè)小塊,每個(gè)小塊里有幾百個(gè)字節(jié)存放著該字符的位置數(shù)據(jù)(包括小塊最小位置和差分序列)。如果一條字符位置記錄中,沒(méi)有數(shù)據(jù)庫(kù)塊的最小位置和最大位置,就需要從一大批記錄的數(shù)據(jù)庫(kù)塊中,逐個(gè)比較每個(gè)小塊中保存的小塊最小位置,直到找出檢索詞中每個(gè)字符都匹配的位置,這樣的操作仍然會(huì)耗費(fèi)系統(tǒng)時(shí)間。而在一條記錄中,如果增加了這兩個(gè)存放數(shù)據(jù)庫(kù)塊的最小位置和最大位置的字段后,當(dāng)已經(jīng)知道了檢索詞中一個(gè)字符在指定文檔類中的位置,就可以用這個(gè)已知字符的位置與檢索詞中其它字符的位置數(shù)據(jù)庫(kù)塊的最小位置和最大位置的值進(jìn)行比較,判斷出某數(shù)據(jù)庫(kù)塊里是否可能存在所要找的字符位置。在確定要找的數(shù)據(jù)庫(kù)塊后,再由數(shù)據(jù)庫(kù)塊中每個(gè)小塊的小塊最小位置,便會(huì)很快判定在第幾個(gè)小塊里可能有要找的字符位置,從而相對(duì)于逐個(gè)還原每個(gè)字符的字符位置的節(jié)省了時(shí)間。
綜上所述,本發(fā)明對(duì)字符的索引分為三個(gè)層次首先每一個(gè)字符可以有多條記錄,每條記錄中包括存放字符位置數(shù)據(jù)的數(shù)據(jù)庫(kù)塊,以及該數(shù)據(jù)庫(kù)塊中存放的該字符的最小位置及最大位置。
其次,每一個(gè)存放字符位置的數(shù)據(jù)庫(kù)塊又包含多達(dá)數(shù)千個(gè)存放字符位置的小塊,每一個(gè)小塊由兩部分組成,第一部分存放在該小塊的范圍內(nèi)該字符在該文檔類中第一次出現(xiàn)的位置,即小塊最小位置;第二部分存放在該小塊的范圍內(nèi)該字符在該文檔類中以后每次出現(xiàn)的位置,即差分序列。
第三,字符在該文檔類中以后每次出現(xiàn)的位置用該字符以后每次出現(xiàn)的位置與前一次出現(xiàn)位置的差分序列來(lái)表示。
下面結(jié)合附圖來(lái)說(shuō)明本發(fā)明的具體實(shí)施方案。但應(yīng)當(dāng)注意的是,本發(fā)明的范圍并不局限于以下具體實(shí)施方案。本發(fā)明的下述的實(shí)施例中,實(shí)現(xiàn)本發(fā)明方法的硬件平臺(tái)是以客戶機(jī)/服務(wù)器網(wǎng)絡(luò)結(jié)構(gòu)為例進(jìn)行說(shuō)明的,即以客戶機(jī)作為終端操作裝置的示例,以服務(wù)器作為信息存儲(chǔ)處理裝置的示例。另外,以下實(shí)施例中所述的網(wǎng)絡(luò)也應(yīng)當(dāng)被理解為連接裝置的一個(gè)示例。從本發(fā)明以下的教導(dǎo),可以理解對(duì)于本技術(shù)領(lǐng)域內(nèi)的人員將本發(fā)明的方法在單機(jī)或?yàn)g覽器/瀏覽服務(wù)器等其他計(jì)算機(jī)系統(tǒng)上實(shí)現(xiàn)是顯而易見的。
圖1A是索引建立與全文檢索系統(tǒng)的結(jié)構(gòu)的一個(gè)示例;圖1B是圖1A中的服務(wù)器的硬件框圖;圖2是存放字符位置數(shù)據(jù)的數(shù)據(jù)庫(kù)塊和小塊的結(jié)構(gòu)圖;圖3是文獻(xiàn)索引生成器的處理流程圖;圖4A和4B是全文檢索引擎的處理流程圖;圖5是文獻(xiàn)信息共享轉(zhuǎn)換器的處理過(guò)程示意圖。
下面參照?qǐng)D1A說(shuō)明本發(fā)明的系統(tǒng)結(jié)構(gòu)。
客戶機(jī)(終端操作裝置)101——使用者的操作平臺(tái),由此向Server端發(fā)送文獻(xiàn)登錄、更新或檢索的請(qǐng)求。
網(wǎng)絡(luò)(連接裝置)102——傳送Client/Server的信息。
服務(wù)器(信息存儲(chǔ)與處理裝置)103——通過(guò)網(wǎng)絡(luò)接收客戶機(jī)101傳送的文獻(xiàn)登錄、更新或檢索的請(qǐng)求。經(jīng)文獻(xiàn)索引生成器105處理,將文獻(xiàn)中所有字符位置信息存儲(chǔ)到數(shù)據(jù)庫(kù)104中;或經(jīng)全文檢索引擎106查找出滿足使用者指定的檢索要求的文獻(xiàn)信息。
圖1B表示服務(wù)器103的硬件框圖。其中CPU1執(zhí)行ROM2中存儲(chǔ)的程序,對(duì)服務(wù)器實(shí)施各種控制;ROM2存儲(chǔ)CPU的執(zhí)行程序,用于實(shí)現(xiàn)其他流程圖中所示的操作;RAM3為CPU1提供程序運(yùn)行空間,并且為本發(fā)明提供共享內(nèi)存空間;CRT4在CPU1的控制下執(zhí)行各種顯示;鍵盤5用于輸入各種信息;外部存儲(chǔ)裝置6為硬盤或軟盤,保存作為檢索對(duì)象的文檔,以及由這些文檔生成的字符索引信息;總線7連接上述各個(gè)部分,以實(shí)現(xiàn)相互間的數(shù)據(jù)傳輸。
數(shù)據(jù)庫(kù)104——設(shè)置于外部存儲(chǔ)裝置6中,用于存儲(chǔ)各文檔類的全文索引數(shù)據(jù)及各種文獻(xiàn)信息數(shù)據(jù)。
文獻(xiàn)索引生成器105——由CPU1運(yùn)行,按字表法將文獻(xiàn)登錄在數(shù)據(jù)庫(kù)104中。
全文檢索引擎106——由CPU1運(yùn)行,提供全文檢索。
文獻(xiàn)信息共享轉(zhuǎn)換器107——由CPU1運(yùn)行,在服務(wù)器內(nèi)存RAM3中開辟一塊共享內(nèi)存,存放已登錄文獻(xiàn)的信息。在生成文獻(xiàn)索引時(shí),由文獻(xiàn)索引生成器105即時(shí)更新共享內(nèi)存中的文獻(xiàn)信息。當(dāng)進(jìn)行全文檢索時(shí),全文檢索引擎106直接從共享內(nèi)存中獲悉有關(guān)文獻(xiàn)的信息。
在客戶機(jī)/服務(wù)器(Client/Server)網(wǎng)絡(luò)結(jié)構(gòu)中,本系統(tǒng)運(yùn)行于服務(wù)器(Server)上,它主要由文獻(xiàn)索引生成器105、全文檢索引擎106和文獻(xiàn)信息共享轉(zhuǎn)換器107以及數(shù)據(jù)庫(kù)104構(gòu)成。
數(shù)據(jù)庫(kù)104用來(lái)存儲(chǔ)多個(gè)文檔類。對(duì)指定的某一文檔類,利用文獻(xiàn)索引生成器105,可以將一個(gè)或多個(gè)文獻(xiàn)進(jìn)行登錄到該文檔類中,創(chuàng)建或更新該文檔類的全文索引。進(jìn)行文獻(xiàn)登錄時(shí),文獻(xiàn)索引生成器105把文獻(xiàn)中出現(xiàn)的每個(gè)字符轉(zhuǎn)變成相應(yīng)的內(nèi)部編碼,并存放該字符在所屬文檔類中的位置信息。
在執(zhí)行全文檢索時(shí),全文檢索引擎106根據(jù)使用者輸入(由鍵盤5等)的檢索條件和模糊度(0是精確查詢;大于0為模糊查詢,模糊度越大,表示匹配精度越低,所得到的查詢結(jié)果越多),檢索數(shù)據(jù)庫(kù)104中相關(guān)的記錄,比較檢索字符串中每一個(gè)字符的位置,匹配出滿足查詢條件的檢索字符串,并返回含有檢索字符串的全部文獻(xiàn)的 和該檢索字符串在每個(gè)文獻(xiàn)中的位置。
由于數(shù)據(jù)庫(kù)104中存儲(chǔ)著的海量文字信息,進(jìn)行全文檢索需要較長(zhǎng)的數(shù)據(jù)庫(kù)處理時(shí)間,為了減少數(shù)據(jù)庫(kù)104的輸入/輸出,縮短檢索時(shí)間,提高系統(tǒng)的運(yùn)行性能,發(fā)明人設(shè)計(jì)了文獻(xiàn)信息共享轉(zhuǎn)換器107。文獻(xiàn)信息共享轉(zhuǎn)換器107的作用是,在內(nèi)存RAM3中開辟了一塊共享內(nèi)存區(qū),檢索數(shù)據(jù)庫(kù)104的文獻(xiàn)信息表,并把指定文檔類的文獻(xiàn)信息中反映文獻(xiàn)編號(hào)和文獻(xiàn)位置范圍的數(shù)據(jù)項(xiàng)(即文獻(xiàn)編號(hào)、文獻(xiàn)起始位置、終止位置和刪除標(biāo)志四項(xiàng)數(shù)據(jù)),按登錄的先后順序讀到共享內(nèi)存中,并常駐內(nèi)存中。在進(jìn)行全文檢索時(shí),它利用二分查找算法,根據(jù)檢索詞的匹配位置確認(rèn)所在文獻(xiàn)的位置,快速地轉(zhuǎn)換為相應(yīng)的文獻(xiàn)編號(hào)。當(dāng)執(zhí)行登錄新文獻(xiàn)時(shí),將新文獻(xiàn)的有關(guān)信息添加進(jìn)去。當(dāng)文獻(xiàn)被刪除時(shí),將其中該文獻(xiàn)的刪除標(biāo)志置成1(表示已刪除)。
本發(fā)明的重點(diǎn)在于以下三方面。
其一,在于數(shù)據(jù)庫(kù)104中的字符位置信息的索引結(jié)構(gòu)。由于同一個(gè)字符可能會(huì)在所屬文檔類中出現(xiàn)多次,因此需要存放該字符在文檔類中所有出現(xiàn)過(guò)的位置。如果字符的每個(gè)位置使用數(shù)據(jù)庫(kù)的整數(shù)型或長(zhǎng)整數(shù)型字段存儲(chǔ)(每個(gè)位置需占4個(gè)字節(jié)),將占用大量空間。為了盡量減少存儲(chǔ)空間的浪費(fèi),同時(shí)又保證全文檢索的速度,本發(fā)明人使用了差分算法,計(jì)算出在同一文檔類中該字符本次出現(xiàn)位置與前一次出現(xiàn)位置的差分序列,用差分序列來(lái)表示該字符在該文檔類中以后每次出現(xiàn)的位置信息,并采用數(shù)據(jù)庫(kù)中的二進(jìn)制數(shù)據(jù)類型(image類型)字段存儲(chǔ)字符的位置。
發(fā)明人把存儲(chǔ)字符在所屬文檔類中出現(xiàn)的多個(gè)位置的字段稱為數(shù)據(jù)庫(kù)塊,將數(shù)據(jù)庫(kù)塊劃分為4000個(gè)小塊。每個(gè)小塊含有260個(gè)字節(jié),用于存放多個(gè)字符位置值。參見圖2。其中每小塊的前4個(gè)字節(jié)存放字符在該文檔類里出現(xiàn)的字符位置。從每小塊的第5個(gè)字節(jié)起至該塊以后的字節(jié)(含第5字節(jié))存放的是調(diào)用差分算法計(jì)算出本次出現(xiàn)的該字符位置與前一次字符出現(xiàn)位置的差分序列。當(dāng)一個(gè)小塊中所剩余的字節(jié)數(shù)放不下一個(gè)新的差分序列時(shí),系統(tǒng)便用0x00作為該小塊的填充項(xiàng)將剩余的字節(jié)填滿,然后再使用一個(gè)新的小塊,把該字符當(dāng)前在所屬文檔類中出現(xiàn)的位置作為新小塊的最小位置保存在該小塊的前4個(gè)字節(jié)里,接著再用差分序列來(lái)表示以后出現(xiàn)的位置。換一個(gè)角度說(shuō)就是,一個(gè)字符以差分序列表示其出現(xiàn)位置一定次數(shù)(例如100-200次)之后,換一個(gè)小塊存放,并為這個(gè)小塊重新確定一個(gè)最小位置,接著再用差分序列表示以后出現(xiàn)的位置,并存放在該新小塊中。當(dāng)一個(gè)數(shù)據(jù)庫(kù)塊的4000個(gè)小塊全部被該字符的位置數(shù)據(jù)填滿時(shí),需要為該字符再創(chuàng)建一條新的記錄。
其二,針對(duì)數(shù)據(jù)庫(kù)104的字符索引結(jié)構(gòu)中保存的字符位置信息,如何能夠更快、更準(zhǔn)確地獲得全文檢索的結(jié)果呢?為此,發(fā)明人設(shè)計(jì)了一種查詢、匹配字符位置信息的算法。它通過(guò)數(shù)據(jù)庫(kù)的查詢語(yǔ)言,結(jié)合本發(fā)明的字符索引結(jié)構(gòu)的特點(diǎn),快速查找得到檢索詞的位置,再利用文獻(xiàn)信息共享轉(zhuǎn)換器,得出該檢索結(jié)果所屬文獻(xiàn)的文獻(xiàn)編號(hào)。
其三,海量數(shù)據(jù)的存儲(chǔ),在執(zhí)行數(shù)據(jù)庫(kù)的查詢操作時(shí),會(huì)增大數(shù)據(jù)庫(kù)的I/O頻率,降低數(shù)據(jù)庫(kù)的運(yùn)行性能,增加訪問(wèn)數(shù)據(jù)庫(kù)的時(shí)間,影響全文檢索的速度。為了盡量減少數(shù)據(jù)庫(kù)的運(yùn)行壓力,縮短數(shù)據(jù)庫(kù)的查詢時(shí)間,提高全文檢索的速度,發(fā)明人設(shè)計(jì)了一種把字符位置信息快速轉(zhuǎn)換為文獻(xiàn)信息的方法。利用高速緩沖存儲(chǔ)器所具有的高速存取數(shù)據(jù)的特性,將數(shù)據(jù)庫(kù)104的文獻(xiàn)信息中反映文獻(xiàn)編號(hào)和文獻(xiàn)位置的數(shù)據(jù)項(xiàng),即文獻(xiàn)編號(hào)、文獻(xiàn)起始位置、文獻(xiàn)終止位置、刪除標(biāo)志四項(xiàng)數(shù)據(jù),按指定的文檔類一次讀入內(nèi)存RAM3。對(duì)于指定的字符位置,根據(jù)每個(gè)文獻(xiàn)的位置范圍,利用二分查找算法,從內(nèi)存RAM3中迅速找到匹配的文獻(xiàn)數(shù)據(jù),得到該文獻(xiàn)編號(hào)。在執(zhí)行文獻(xiàn)登錄或刪除處理時(shí),本轉(zhuǎn)換器還提供了相應(yīng)的接口實(shí)時(shí)更新有關(guān)文獻(xiàn)的信息。
實(shí)施例首先,示例性地描述本發(fā)明的系統(tǒng)在網(wǎng)絡(luò)102上的運(yùn)行過(guò)程。
在安裝在服務(wù)器103上的全文檢索系統(tǒng)處理用戶在客戶機(jī)101提出的文字檢索請(qǐng)求的過(guò)程中1.用戶利用客戶機(jī)101的鍵盤輸入所要檢索的文字或詞,如果欲檢索二個(gè)及二個(gè)以上的文字或詞,應(yīng)指定這些文字或詞之間的邏輯關(guān)系。比如與(OR)、或(AND)、非(NOT)關(guān)系。
2.經(jīng)網(wǎng)絡(luò)102將用戶指定的檢索詞及其邏輯關(guān)系傳送給服務(wù)器103上運(yùn)行的全文檢索系統(tǒng)。
3.在服務(wù)器103上,全文檢索系統(tǒng)中的全文檢索引擎106對(duì)接收到的檢索請(qǐng)求進(jìn)行處理。它從數(shù)據(jù)庫(kù)104中按指定的檢索詞查找文獻(xiàn)索引得到所有相關(guān)的匹配位置。
4.由文獻(xiàn)信息共享轉(zhuǎn)換器107把上一步驟中檢索得到的所有匹配位置與存放在共享內(nèi)存的文獻(xiàn)信息(文獻(xiàn)編號(hào)、文獻(xiàn)起始位置和終止位置、刪除標(biāo)志)中的文獻(xiàn)起始位置和終止位置逐個(gè)進(jìn)行比較,獲得匹配位置所在文獻(xiàn)的文獻(xiàn)編號(hào)及其刪除標(biāo)志,根據(jù)每個(gè)文獻(xiàn)刪除標(biāo)志,進(jìn)一步確認(rèn)得到有效的文獻(xiàn)編號(hào),并將其生成一個(gè)結(jié)果集作為全文檢索系統(tǒng)的輸出。
5.全文檢索系統(tǒng)將檢索結(jié)果集通過(guò)網(wǎng)絡(luò)102傳送給客戶機(jī)101,再由客戶機(jī)101將其顯示在屏幕上。
一.文獻(xiàn)索引的生成處理本發(fā)明提供了一種建立文獻(xiàn)索引的方法,將每一文檔類中同一字符在該文檔類中前后二次出現(xiàn)的位置,利用差分算法計(jì)算得到差分序列,存儲(chǔ)在數(shù)據(jù)庫(kù)104的一種image類型數(shù)據(jù)庫(kù)塊中。這種數(shù)據(jù)庫(kù)塊是由例如4000個(gè)小塊組成的,每一個(gè)小塊又是由一個(gè)長(zhǎng)整型數(shù)(long型,占4字節(jié))和256個(gè)字節(jié)(byte)構(gòu)成的。該數(shù)據(jù)庫(kù)塊的詳細(xì)構(gòu)造請(qǐng)參見圖2。由此,可得出數(shù)據(jù)庫(kù)104中,一個(gè)存放字符位置數(shù)據(jù)的數(shù)據(jù)庫(kù)塊最多可擁有1040000個(gè)字節(jié)((256+4)*4000=1040000)。
在定義該數(shù)據(jù)庫(kù)塊時(shí),該數(shù)據(jù)庫(kù)塊中所包含小塊的個(gè)數(shù)是可以改變的,每一個(gè)小塊的大小也是可以改變的。
下面參照?qǐng)D3的流程圖,說(shuō)明利用文獻(xiàn)索引生成器105為登錄文獻(xiàn)建立文獻(xiàn)索引的處理。這種處理是在最初建立數(shù)據(jù)庫(kù)104時(shí),或者向數(shù)據(jù)庫(kù)104追加文獻(xiàn)或從數(shù)據(jù)庫(kù)104中刪除文獻(xiàn)時(shí),利用圖1中文獻(xiàn)索引生成器105進(jìn)行的處理。
首先,根據(jù)每一個(gè)文獻(xiàn)的內(nèi)容、文獻(xiàn)登錄的操作者或其它因素,操作者事先將需要登錄的文獻(xiàn)進(jìn)行分類,分入相應(yīng)的文檔類,并給每一文檔類命名。在步驟402,顯示,例如,具有輸入框的對(duì)話框,對(duì)操作者提示要進(jìn)行輸入處理,操作者輸入(例如,由鍵盤5)登錄文獻(xiàn)所屬文檔類的名稱。
在步驟404,根據(jù)操作者在步驟402指定的文檔類的名稱,查找數(shù)據(jù)庫(kù)104中文檔類信息。若數(shù)據(jù)庫(kù)104中不存在指定的文檔類名稱,系統(tǒng)便為該文檔類分配一個(gè)文檔類號(hào),為該文檔類中所有字符的最后位置設(shè)置一個(gè)初始值。(比如文檔類號(hào)為1,字符的最后位置的初始值是0),將該文檔類的有關(guān)信息插入到數(shù)據(jù)庫(kù)104中,并返回該文檔類的類號(hào)和所有字符的最后位置;如果數(shù)據(jù)庫(kù)中存在指定的文檔類名稱,從數(shù)據(jù)庫(kù)104中得到該文檔類號(hào)和所有字符的最后位置。由查找得到的文檔類號(hào)檢索數(shù)據(jù)庫(kù)104中的字符信息,查出該文檔類中每個(gè)字符在數(shù)據(jù)庫(kù)104中的字符信息。如在該文檔類里某字符出現(xiàn)的最大位置、該字符在其最后一個(gè)數(shù)據(jù)庫(kù)塊中的最小位置和最后一個(gè)數(shù)據(jù)庫(kù)塊中已存放位置數(shù)據(jù)的長(zhǎng)度等數(shù)據(jù)。
在步驟406中,利用高速緩沖存儲(chǔ)器所具有的高速存取數(shù)據(jù)的特性,啟動(dòng)文獻(xiàn)信息共享轉(zhuǎn)換器107。判斷共享內(nèi)存中是否已保存了指定文檔類的文獻(xiàn)信息。若共享內(nèi)存里沒(méi)有所指定文檔類的文獻(xiàn)信息,在內(nèi)存RAM3中申請(qǐng)一塊共享內(nèi)存,將指定文檔類中每個(gè)文獻(xiàn)的文獻(xiàn)編號(hào)和文獻(xiàn)位置數(shù)據(jù)項(xiàng)(即文獻(xiàn)編號(hào)、文獻(xiàn)在該文檔類中的起始位置、終止位置和刪除標(biāo)志等)從數(shù)據(jù)庫(kù)104中讀取到共享內(nèi)存中,以備多用戶同時(shí)查詢?cè)撝付ㄎ臋n類。
在步驟408,向操作系統(tǒng)申請(qǐng)內(nèi)存RAM3預(yù)留空間,并對(duì)預(yù)留空間初始化。
在步驟410,判斷是否有要登錄的文獻(xiàn)。如果有要登錄的文獻(xiàn),繼續(xù)執(zhí)行步驟412;如果沒(méi)有要登錄的文獻(xiàn),執(zhí)行步驟420、430和432,更新數(shù)據(jù)庫(kù)104中的有關(guān)信息。
在步驟412,讀入登錄文獻(xiàn)的信息,用該文獻(xiàn)的編號(hào)查詢數(shù)據(jù)庫(kù)104的文獻(xiàn)信息。若沒(méi)有找到該文獻(xiàn)編號(hào),則將這個(gè)文獻(xiàn)的信息存入數(shù)據(jù)庫(kù)104的文獻(xiàn)信息中。這些文獻(xiàn)信息有文獻(xiàn)所屬的文檔類號(hào)、文獻(xiàn)號(hào)、該文獻(xiàn)的第一個(gè)字符和最后一個(gè)字符在所屬文檔類中的位置(文獻(xiàn)起始位置和文獻(xiàn)終止位置)等。如果在數(shù)據(jù)庫(kù)104的文獻(xiàn)信息中查找出該文獻(xiàn)編號(hào)的記錄,就說(shuō)明數(shù)據(jù)庫(kù)104的文獻(xiàn)信息中已保存了該文獻(xiàn)編號(hào)的文獻(xiàn),則返回錯(cuò)誤編碼。
在步驟414,檢查登錄的文獻(xiàn)中是否還有未處理的字符。如果文獻(xiàn)中還有未處理的字符,進(jìn)行下一步驟416為一個(gè)字符生成索引的處理;如果已處理了最后一個(gè)字符,那么執(zhí)行步驟426,用這個(gè)最后字符的位置更新數(shù)據(jù)庫(kù)104的文獻(xiàn)信息中這個(gè)文獻(xiàn)的終止位置。
在步驟416,按順序讀入文獻(xiàn)中一個(gè)字符,將它轉(zhuǎn)換為對(duì)應(yīng)的內(nèi)部編碼,(如把在WINDOW系統(tǒng)上使用的Shift_JIS碼轉(zhuǎn)換為系統(tǒng)內(nèi)部編碼,例如將アメリカ轉(zhuǎn)換成系統(tǒng)內(nèi)部碼,ア的內(nèi)部碼為283,メ的內(nèi)部碼為341,リ的內(nèi)部碼為347,カ的內(nèi)部碼為288),并由所屬文檔類的字符最后位置得到該字符在所屬文檔類中的位置,利用差分算法計(jì)算出該字符這次出現(xiàn)的位置與前一次出現(xiàn)位置的差分序列。
在步驟418的處理中,檢查內(nèi)存RAM3的預(yù)留空間里的剩余空間是否能夠存放該字符的差分序列。若內(nèi)存RAM3預(yù)留空間已滿,執(zhí)行步驟420、422和424,把內(nèi)存RAM3預(yù)留空間里所有字符的數(shù)據(jù)全部寫入數(shù)據(jù)庫(kù)104的字符位置信息中;否則,繼續(xù)進(jìn)行下一步驟424。
步驟420,把內(nèi)存RAM3預(yù)留空間中所有字符的位置信息保存到數(shù)據(jù)庫(kù)104的字符位置信息中。如字符所屬文檔類編號(hào)、相對(duì)應(yīng)的內(nèi)部編碼、存放多個(gè)差分序列的數(shù)據(jù)庫(kù)塊、該字符相應(yīng)數(shù)據(jù)庫(kù)塊中存儲(chǔ)的最小位置(第一個(gè)位置)和最大位置(最后一個(gè)位置)等信息。
步驟422,在成功地把內(nèi)存RAM3預(yù)留空間中所有字符的位置信息保存到數(shù)據(jù)庫(kù)104的字符位置信息中之后,對(duì)內(nèi)存RAM3預(yù)留空間重新進(jìn)行初始化處理,以便繼續(xù)保存登錄文獻(xiàn)中字符的位置信息。
步驟424,把經(jīng)步驟416獲得的字符位置存放在該字符的內(nèi)存RAM3預(yù)留空間里。隨后,返回步驟414從登錄文獻(xiàn)中取出下個(gè)字符。
步驟426,當(dāng)處理完一個(gè)登錄文獻(xiàn)中的所有字符后,將這個(gè)文獻(xiàn)中最后出現(xiàn)的字符在所屬文檔類中的字符位置保存到數(shù)據(jù)庫(kù)104的文獻(xiàn)信息中。即,用這個(gè)最后字符的位置更新數(shù)據(jù)庫(kù)104的文獻(xiàn)信息中這個(gè)文獻(xiàn)的終止位置。
步驟428,調(diào)用文獻(xiàn)信息共享轉(zhuǎn)換器107,將所登錄的文獻(xiàn)的信息存儲(chǔ)在共享內(nèi)存中。
步驟430,用這次登錄文獻(xiàn)后每個(gè)字符的最新的字符信息更新數(shù)據(jù)庫(kù)104的字符信息。包括字符所屬文檔類編號(hào)、相對(duì)應(yīng)的內(nèi)部編碼、在所屬文檔類里該字符出現(xiàn)的最大位置、該字符存放位置數(shù)據(jù)的最后一個(gè)數(shù)據(jù)庫(kù)塊中的最小位置和這個(gè)數(shù)據(jù)庫(kù)塊中已存放的字符位置數(shù)據(jù)的字節(jié)數(shù)等數(shù)據(jù)。
步驟432,用本次登錄的最后一個(gè)文獻(xiàn)中最后一個(gè)字符的位置,更新所屬文檔類在數(shù)據(jù)庫(kù)104的文檔類信息中字符的最后位置。
實(shí)施例1在windows平臺(tái)上,利用文獻(xiàn)索引生成器105將一個(gè)文獻(xiàn)(文本文件)America1.txt登錄到數(shù)據(jù)庫(kù)104,并為其中的每個(gè)字符建立索引。這個(gè)文獻(xiàn)的內(nèi)容如下米國(guó)アメリカ アメリカ合衆(zhòng)國(guó)這個(gè)文獻(xiàn)中共有14個(gè)字符,其中有5個(gè)漢字(由于有重復(fù)實(shí)際是4個(gè)漢字)及8個(gè)日文片假名(由于有重復(fù)實(shí)際是4個(gè)日文片假名)和1個(gè)空格。其中“米”、“合”、“衆(zhòng)”三個(gè)漢字和空格在文獻(xiàn)中只出現(xiàn)過(guò)一次,“國(guó)”、“ア”、“メ”、“リ”、 “カ”五個(gè)字符(一個(gè)漢字和四個(gè)片假名)在文獻(xiàn)中分別各出現(xiàn)過(guò)兩次。
現(xiàn)假設(shè)這個(gè)文獻(xiàn)所屬文檔類名稱為新聞?lì)悾臋n類編號(hào)是1,且該文檔類是一個(gè)新建的類,還沒(méi)有輸入文獻(xiàn)。在該文檔類中上述文獻(xiàn)的編號(hào)為1,文獻(xiàn)名稱是America1、發(fā)表時(shí)間是1999.8.10。將它作為新聞文檔類的第一個(gè)文獻(xiàn)提交給文獻(xiàn)索引生成器105進(jìn)行登錄處理。
1.將登錄文獻(xiàn)的內(nèi)容全部讀入內(nèi)存RAM3中,共讀入14個(gè)字符,它們是“米國(guó)アメリカ アメリカ合衆(zhòng)國(guó)”。文獻(xiàn)索引生成器105將這個(gè)文獻(xiàn)的所屬文檔類號(hào)1、文獻(xiàn)編號(hào)1、文獻(xiàn)名稱America1、發(fā)表時(shí)間1999.8.10和該文獻(xiàn)在“新聞?lì)悺敝械淖址鹗嘉恢玫刃畔⒋嫒霐?shù)據(jù)庫(kù)104“新聞?lì)悺钡奈墨I(xiàn)信息中。
2.逐字將文獻(xiàn)America1.txt中的8個(gè)不重復(fù)字符分別由Shift_JIS代碼轉(zhuǎn)換為相應(yīng)的系統(tǒng)內(nèi)部編碼。對(duì)于文獻(xiàn)中出現(xiàn)的空格,文獻(xiàn)索引生成器105可根據(jù)預(yù)先設(shè)置的參數(shù)來(lái)確定是否對(duì)其進(jìn)行處理。參數(shù)的缺省值是不為空格建立索引。文獻(xiàn)America1.txt中,第7個(gè)字符就是空格。在實(shí)施例1中,假設(shè)系統(tǒng)使用參數(shù)的缺省值,不為空格建立索引,因此,文獻(xiàn)索引生成器105沒(méi)有處理空格,將文獻(xiàn)中第8個(gè)字符及其后面的字符順序都分別提前了一個(gè)位置。請(qǐng)參見表1中第一、二欄。表1文獻(xiàn)America1.txt中的字符與內(nèi)部編碼及其字符位置的對(duì)應(yīng)關(guān)系
3.每一新文檔類的起始位置都是從1開始,以1作為步長(zhǎng)增量。字符位置是按字符在這一文檔類中出現(xiàn)的總順序來(lái)確定的。本例中,文獻(xiàn)中所有字符在新聞?lì)愔械奈恢?,?qǐng)參見表1中第一、三欄。經(jīng)過(guò)文獻(xiàn)索引生成器105處理,字符與小塊中前4字節(jié)的對(duì)應(yīng)關(guān)系如表2所示。
表2字符與小塊中前4字節(jié)的對(duì)應(yīng)關(guān)系
4.如果一個(gè)字符在新聞文檔類中第二次出現(xiàn),利用差分算法,計(jì)算出該字符這次出現(xiàn)位置與上一次出現(xiàn)位置的差分序列,并將這個(gè)差分序列順序地存入該字符的小塊的第5個(gè)及其以后若干個(gè)字節(jié)。如文獻(xiàn)America1.txt中,第八、九、十和十一字符“アメリカ”就是重復(fù)出現(xiàn)的。下面,我們以文獻(xiàn)America1.txt中字符“ア”為例作詳細(xì)的說(shuō)明。字符“ア”在文獻(xiàn)中共出現(xiàn)了兩次,其在新聞文檔類中的位置分別是3、7。從表3第五欄可看到存儲(chǔ)該字符的位置值是0x0000000304。
小塊字節(jié)序號(hào) 1 2 3 4 5位置值0x00 00000304其中小塊中前4個(gè)字節(jié)的值0x00000003是用十六進(jìn)制值來(lái)表示的該字符在新聞文檔類中第一次出現(xiàn)的位置,即(03)10=(03)16。小塊中的第5個(gè)字節(jié)值是0x04,這是文獻(xiàn)中字符“ア”第2次出現(xiàn)位置與該字符第一次出現(xiàn)位置的差分序列,即(07-03)10=(4)16。其它三個(gè)字符“メリカ”的差分序列計(jì)算與字符“ア”類似,它們分別與各自上一次出現(xiàn)的字符位置的差值也都是4。而漢字“國(guó)”在文獻(xiàn)中第一次出現(xiàn)位置是2,第二次出現(xiàn)位置是13,經(jīng)差分算法計(jì)算得出它的差分序列是(13-2)10=(11)10=(0B)16。四個(gè)片假名“アメリカ”和一個(gè)漢字“國(guó)”第二次出現(xiàn)的差分序列,請(qǐng)?jiān)斠姳?中第五欄的第5、6字節(jié)數(shù)據(jù)。請(qǐng)注意用黑體字標(biāo)識(shí)了表3和表2不同之處。
如果同一字符在一次登錄處理過(guò)程中頻繁出現(xiàn),其位置數(shù)據(jù)量超出了一個(gè)小塊的大小,則需要多個(gè)小塊來(lái)存放它的位置數(shù)據(jù)。由于本實(shí)施利所列舉的文獻(xiàn)中的字符個(gè)數(shù)較少,文獻(xiàn)索引生成器105只為“米”、“國(guó)”、“ア”、“メ”、“リ”、“カ”、“合”、“衆(zhòng)”等八個(gè)字符各指定了一個(gè)小塊,用來(lái)存放它們各自的位置數(shù)據(jù)(小塊最小位置和差分序列)。
表3字符與小塊的對(duì)應(yīng)關(guān)系
5.上述字符處理完后,逐字將所有字符的有關(guān)信息寫入數(shù)據(jù)庫(kù)104字符信息和字符位置信息中。數(shù)據(jù)庫(kù)104的數(shù)據(jù)庫(kù)塊中保存著每個(gè)字符在新聞文檔類中出現(xiàn)的位置。數(shù)據(jù)庫(kù)塊中存放數(shù)據(jù)的順序是按小塊的先后順序向逐個(gè)小塊填寫數(shù)據(jù)。當(dāng)一個(gè)小塊裝滿數(shù)據(jù)之后,再寫下一個(gè)小塊,直至整個(gè)數(shù)據(jù)庫(kù)塊中的4000個(gè)小塊全部填寫滿。
以字符“ア”為例,該字符所屬文檔類編號(hào)1、內(nèi)部編碼283、小塊中存儲(chǔ)的位置值是0x0000000304、數(shù)據(jù)庫(kù)塊中存放的位置數(shù)據(jù)的最小位置3和最大位置7等數(shù)據(jù)存入數(shù)據(jù)庫(kù)104的字符位置信息中。而該字符所屬文檔類編號(hào)1、內(nèi)部編碼283、在新聞?lì)愔谐霈F(xiàn)的最后位置7、在數(shù)據(jù)庫(kù)塊中所保存的字符最小位置3和最大位置7以及在小塊中所保存的位置數(shù)據(jù)所占用的字節(jié)數(shù)5等項(xiàng)數(shù)據(jù)值存入到數(shù)據(jù)庫(kù)104的字符信息中。
6.更新數(shù)據(jù)庫(kù)104文檔類信息中的字符的最后位置值和文獻(xiàn)信息中該登錄文獻(xiàn)的終止位置。在實(shí)施例1中,數(shù)據(jù)庫(kù)104文檔類信息中的字符的最后位置值被更新為13,文獻(xiàn)信息中文獻(xiàn)America1.txt的終止位置是13。
7.在數(shù)據(jù)庫(kù)104的文檔類信息中保存了“新聞?lì)悺钡挠嘘P(guān)信息,在文獻(xiàn)信息中保存了文獻(xiàn)America1.txt的信息,在字符位置信息中就保存了表3第二、三、四、五欄的數(shù)據(jù),在字符信息中保存了表3第二、三、四欄的數(shù)據(jù)以及第5欄字符數(shù)據(jù)庫(kù)塊中實(shí)際存放位置數(shù)據(jù)的長(zhǎng)度(以字節(jié)為單位)。
實(shí)施例2假設(shè)本實(shí)施例是在執(zhí)行完實(shí)施例1及其繼續(xù)登錄了若干個(gè)文獻(xiàn)之后進(jìn)行的文獻(xiàn)登錄工作。
本實(shí)施例在windows平臺(tái)上利用文獻(xiàn)索引生成器105將一個(gè)文獻(xiàn)(文本文件)America2.txt登錄到數(shù)據(jù)庫(kù)104中,并為其中的每個(gè)字符建立索引。這個(gè)文獻(xiàn)的內(nèi)容如下アメリカ合衆(zhòng)國(guó) 米國(guó)アメリカ這個(gè)文獻(xiàn)中共有14個(gè)字符,其中有5個(gè)漢字(由于有重復(fù)實(shí)際是4個(gè)漢字)及8個(gè)日文片假名(由于有重復(fù)實(shí)際是4個(gè)日文片假名)和1個(gè)空格。其中“米”、“合”、“衆(zhòng)”三個(gè)漢字和空格在文獻(xiàn)中只出現(xiàn)過(guò)一次,“國(guó)”、“ア”、“メ”、“リ”、“カ”五個(gè)字符(一個(gè)漢字和四個(gè)片假名)在文獻(xiàn)中分別各出現(xiàn)過(guò)兩次。
現(xiàn)假設(shè)該文獻(xiàn)所屬文檔類名為新聞?lì)?,文檔類編號(hào)是1,該文檔類中已登錄了多個(gè)文獻(xiàn),現(xiàn)在該文檔類中字符的最后位置是30491,這個(gè)的文獻(xiàn)編號(hào)為130011,文獻(xiàn)名稱是America2、發(fā)表時(shí)間是1999.8.11。在數(shù)據(jù)庫(kù)104中,片假名“リ”在新聞?lì)愔械淖畲笪恢檬?237,存放這個(gè)片假名的位置數(shù)據(jù)的最后一個(gè)數(shù)據(jù)庫(kù)塊里已保存了258個(gè)字節(jié)的位置數(shù)據(jù);漢字“衆(zhòng)”在新聞?lì)愔械淖畲笪恢檬?320,保存這個(gè)漢字的位置數(shù)據(jù)的最后一個(gè)數(shù)據(jù)庫(kù)塊里已保存了25個(gè)字節(jié)的位置數(shù)據(jù)。現(xiàn)將這個(gè)文獻(xiàn)提交給文獻(xiàn)索引生成器105進(jìn)行登錄處理。
1.文獻(xiàn)索引生成器105在數(shù)據(jù)庫(kù)104的文檔類信息中進(jìn)行信息查詢處理,以便得到當(dāng)前文檔類中字符的最后位置和每個(gè)字符的最大位置。在實(shí)施例2中,查詢數(shù)據(jù)庫(kù)104獲得“新聞?lì)悺崩镒址淖詈笪恢檬?0491,其中片假名“リ”在該類中的最大位置是8237,最后一條字符位置記錄里數(shù)據(jù)庫(kù)塊已存放了258個(gè)字節(jié)的位置數(shù)據(jù),漢字“衆(zhòng)”在該類中的最大位置是1320,其最后一條記錄中數(shù)據(jù)庫(kù)塊里已保存了25個(gè)字節(jié)的位置數(shù)據(jù)。
2.將登錄文獻(xiàn)的內(nèi)容全部讀入內(nèi)存RAM3中,文獻(xiàn)索引生成器105將這個(gè)文獻(xiàn)的編號(hào)、名稱、作者、發(fā)表時(shí)間等信息存入數(shù)據(jù)庫(kù)104的文獻(xiàn)信息中。在這個(gè)實(shí)施例中,系統(tǒng)共讀入14個(gè)字符,它們是アメリカ合衆(zhòng)國(guó) 米國(guó)アメリカ。文獻(xiàn)索引生成器105將這個(gè)文獻(xiàn)的編號(hào)130011、文獻(xiàn)名稱America2、發(fā)表時(shí)間1999.8.11和該文獻(xiàn)在“新聞?lì)悺敝械钠鹗嘉恢?0492等信息存入數(shù)據(jù)庫(kù)104的文獻(xiàn)信息中。
3.逐字將文獻(xiàn)America2.txt中的13個(gè)字符分別由Shift_JIS代碼轉(zhuǎn)換為相應(yīng)的系統(tǒng)內(nèi)部編碼。對(duì)于文獻(xiàn)中出現(xiàn)的空格,文獻(xiàn)索引生成器105根據(jù)預(yù)先設(shè)置的參數(shù)來(lái)確定是否對(duì)其進(jìn)行處理。參數(shù)的缺省值是不為空格建立索引。文獻(xiàn)America2.txt中,第8個(gè)字符就是空格。文獻(xiàn)索引生成器105不處理空格,將文獻(xiàn)中第9個(gè)字符及其后面的字符的順序都分別提前了一個(gè)位置。請(qǐng)參見表4中第一、二欄。
表4文獻(xiàn)America2.txt中字符與內(nèi)部編碼及其字符位置的對(duì)應(yīng)關(guān)系
4.將該文檔類字符的最后位置值加1作為新登錄文獻(xiàn)的起始位置,并以1作為步長(zhǎng)增量,按字符在這一文檔類中出現(xiàn)的總順序確定每個(gè)字符的位置。本例中,文獻(xiàn)America2.txt的起始位置為30492。文獻(xiàn)中所有字符在新聞?lì)愔械奈恢?,?qǐng)參見表4中第一、三欄。
5.用第1步查找得到某字符在登錄新文獻(xiàn)之前,在新聞?lì)愔械淖畲笪恢煤彤?dāng)前該字符在該文檔類中的位置,利用差分算法計(jì)算出該字符的差分序列。若一個(gè)字符當(dāng)前的位置差分序列需要多個(gè)字節(jié)表示,而當(dāng)前小塊中的260個(gè)字節(jié)(4+256)剩余字節(jié)存放不下一個(gè)新的差分序列時(shí),系統(tǒng)便用0x00作為該小塊的填充項(xiàng)將剩余字節(jié)填滿,然后用另一新的小塊,并且把該字符在所屬文檔類中本次出現(xiàn)的位置作為新的小塊的最小位置保存在新小塊的前4字節(jié)里。當(dāng)以后出現(xiàn)該字符時(shí),依次將其在所屬文檔類中出現(xiàn)的位置與前一次出現(xiàn)的位置的差分序列保存在新小塊的第5個(gè)及其后面的字節(jié)里,并將本次出現(xiàn)的位置作為它在所屬文檔類中的最大位置保存下來(lái)。當(dāng)一個(gè)小塊裝滿數(shù)據(jù)后,再取出一個(gè)新的小塊,把該字符出現(xiàn)的新位置作為這個(gè)小塊的最小位置保存在其中。依此類推,直至將數(shù)據(jù)庫(kù)塊中的所有小塊全部裝滿數(shù)據(jù)為止。在實(shí)施例2中,發(fā)明人以文獻(xiàn)America2.txt中出現(xiàn)的片假名“リ”和漢字“衆(zhòng)”為例。前面已假設(shè)在數(shù)據(jù)庫(kù)104中,片假名“リ”在新聞?lì)愔械淖畲笪恢檬?237,存放這個(gè)片假名字符的最后一個(gè)數(shù)據(jù)庫(kù)塊里已保存了258個(gè)字節(jié)的位置數(shù)據(jù)。由表4可以看到登錄文獻(xiàn)America2.txt時(shí),文獻(xiàn)America2.txt中出現(xiàn)的第一個(gè)片假名“リ”在該文檔類中的位置是30494,在數(shù)據(jù)庫(kù)104的字符位置信息中保存的該片假名在新聞?lì)愔谐霈F(xiàn)的最大位置是8237,利用差分算法計(jì)算30494與8237的差分序列是0x81B020,存放這個(gè)值需要3個(gè)字節(jié)的空間。為了保證數(shù)據(jù)庫(kù)塊中每一小塊的完整性,因此在第1個(gè)小塊的第259和260字節(jié)分別放置填充項(xiàng)0x00,而將這次登錄的文獻(xiàn)中該片假名出現(xiàn)的位置值放在第2個(gè)小塊中。該片假名在新聞?lì)愔械奈恢?0494(即0x771E)存放到第2小塊的第1~4字節(jié)里作為第二小塊中的最小位置。片假名“リ”在文獻(xiàn)中第2次出現(xiàn)的位置是30503,差分序列是0x09,將該差分序列存放在第2小塊的第5字節(jié)里。詳情請(qǐng)參見表5中片假名“リ”一行黑體字處。前面假設(shè)了漢字“衆(zhòng)” 在新聞?lì)愔械淖畲笪恢檬?320,存放這個(gè)漢字的數(shù)據(jù)庫(kù)塊的第一小塊里已保存了25個(gè)字節(jié)的位置數(shù)據(jù)。漢字“衆(zhòng)”在該文獻(xiàn)中只出現(xiàn)了1次,在新聞?lì)愔械奈恢檬?0497。由該字符本次出現(xiàn)的位置30497和在第1步中從數(shù)據(jù)庫(kù)104的字符位置信息中查找到的該漢字在新聞?lì)惓霈F(xiàn)的最大位置1320,可以計(jì)算得到差分序列是0x81E65E,也需要3個(gè)字節(jié)。將該差分序列存放在漢字“衆(zhòng)”的小塊中第26、27和28字節(jié)。請(qǐng)參見表5中漢字“衆(zhòng)”一行。其它字符的差分序列計(jì)算及存放方法與字符“リ”和漢字“衆(zhòng)”類似。在實(shí)施例2中8個(gè)字符的位置信息都各有變化,請(qǐng)參見表5。
表5字符與小塊的對(duì)應(yīng)關(guān)系
6.上述字符處理完后,在數(shù)據(jù)庫(kù)104中按字符內(nèi)部編碼順序分別查找這幾個(gè)字符的記錄。如果能夠找到指定字符的記錄,就用本次登錄的字符的信息更新數(shù)據(jù)庫(kù)104字符信息和字符位置信息中的數(shù)據(jù);否則將本次登錄的該字符的信息存入數(shù)據(jù)庫(kù)104字符信息和字符位置信息中。在實(shí)施例2中,仍以文獻(xiàn)America2.txt中出現(xiàn)的片假名“リ”和漢字“衆(zhòng)”為例。在數(shù)據(jù)庫(kù)104中分別查找到片假名“リ”和漢字“衆(zhòng)”的字符信息,并更新數(shù)據(jù)庫(kù)的字符信息和字符位置信息。在更新數(shù)據(jù)庫(kù)104字符位置信息時(shí),文獻(xiàn)索引生成器105將片假名“リ”在數(shù)據(jù)庫(kù)104中的第1小塊的最后2個(gè)字節(jié)和第2小塊的第1~5字節(jié)更新,再將數(shù)據(jù)庫(kù)104的字符信息中在新聞?lì)愔性撟址霈F(xiàn)的最大位置更新為30503。在將漢字“衆(zhòng)”位置信息寫入數(shù)據(jù)庫(kù)104時(shí),文獻(xiàn)索引生成器105更新在數(shù)據(jù)庫(kù)的字符位置信息中存放字符位置的字段的第26、27和28字節(jié)共3個(gè)字節(jié)的數(shù)據(jù);并且將它在數(shù)據(jù)庫(kù)104的字符信息中在新聞?lì)愔谐霈F(xiàn)的最大位置更新為30497。其余6個(gè)字符的數(shù)據(jù)更新操作與片假名“リ”和漢字“衆(zhòng)”相似。
表6字符與數(shù)據(jù)庫(kù)塊的對(duì)應(yīng)關(guān)系
7.更新數(shù)據(jù)庫(kù)104文檔類信息中的字符的最后位置值和文獻(xiàn)信息中該登錄文獻(xiàn)的終止位置。在實(shí)施例2中,數(shù)據(jù)庫(kù)104文檔類信息中新聞?lì)惖乃凶址淖詈笪恢弥当桓聻?0504,文獻(xiàn)信息中文獻(xiàn)America2.txt的終止位置是30504。
實(shí)施例3假設(shè)本實(shí)施例是在執(zhí)行完實(shí)施例2及其繼續(xù)登錄了若干個(gè)文獻(xiàn)之后進(jìn)行的文獻(xiàn)登錄工作。
本實(shí)施例在windows平臺(tái)上利用文獻(xiàn)索引生成器105將一個(gè)文獻(xiàn)America3.txt登錄到數(shù)據(jù)庫(kù)104中,并為其中的每個(gè)字符建立索引。這個(gè)文獻(xiàn)中共有7個(gè)字符,包括4個(gè)日文片假名和3個(gè)漢字,其內(nèi)容如下アメリカ合衆(zhòng)國(guó)現(xiàn)假設(shè)這個(gè)文獻(xiàn)所屬文檔類名為新聞?lì)悾臋n類編號(hào)是1,該文檔類中已登錄了多個(gè)文獻(xiàn),現(xiàn)在該文檔類的字符最后位置是303842975,這個(gè)的文獻(xiàn)編號(hào)為290370,文獻(xiàn)名稱是America3、發(fā)表時(shí)間是2000.5.1。現(xiàn)將它提交給文獻(xiàn)索引生成器105進(jìn)行登錄處理,步驟如下。在這個(gè)實(shí)施例中我們以片假名“リ”為例,假設(shè)它在新聞?lì)愔械淖畲笪恢檬?016947,其位置數(shù)據(jù)存放在若干個(gè)數(shù)據(jù)庫(kù)塊中,在存放這個(gè)片假名的位置數(shù)據(jù)的最后一個(gè)數(shù)據(jù)庫(kù)塊里已保存了1039997字節(jié)的位置數(shù)據(jù)。
1.文獻(xiàn)索引生成器105在數(shù)據(jù)庫(kù)104的文檔類信息中查找文檔類名稱是“新聞?lì)悺钡挠涗?,從中找到“新聞?lì)悺钡挠涗?,獲得該文檔類中字符的最后位置、每個(gè)字符的最大位置以及每個(gè)字符的相應(yīng)最后一個(gè)數(shù)據(jù)庫(kù)塊中存放的位置數(shù)據(jù)的長(zhǎng)度。在實(shí)施例3中,字符的最后位置是303842975,其中片假名“リ”在該類中的最大位置是1016947。
2.將登錄文獻(xiàn)的內(nèi)容全部讀入內(nèi)存RAM3中。文獻(xiàn)索引生成器105將這個(gè)文獻(xiàn)的編號(hào)、名稱、作者、發(fā)表時(shí)間等信息存入數(shù)據(jù)庫(kù)104的文獻(xiàn)信息中。在這個(gè)實(shí)施例中,系統(tǒng)共讀入7個(gè)字符,它們是アメリカ合衆(zhòng)國(guó)。文獻(xiàn)索引生成器105將這個(gè)文獻(xiàn)的編號(hào)290370、文獻(xiàn)名稱America3、發(fā)表時(shí)間2000.5.1及文獻(xiàn)起始位置303842976等信息存入數(shù)據(jù)庫(kù)104有關(guān)文獻(xiàn)的信息中。
3.逐字將將文獻(xiàn)America3.txt中的7個(gè)字符分別由Shift_JIS代碼轉(zhuǎn)換為相應(yīng)的系統(tǒng)內(nèi)部編碼。請(qǐng)參見表7中第一、二欄。表7文獻(xiàn)America3.txt中字符與內(nèi)部編碼及其位置的對(duì)應(yīng)關(guān)系
4.將新聞文檔類里字符的最后位置值加1作為新登錄文獻(xiàn)的起始位置,并以1作為步長(zhǎng)增量,按字符在這一文檔類中出現(xiàn)的總順序確定字符的位置。本例中,文獻(xiàn)America3.txt的起始位置為303842976。文獻(xiàn)中每個(gè)字符在新聞?lì)愔械奈恢?,?qǐng)參見表7中第一、三欄。
5.根據(jù)第1步查找得到每個(gè)字符在登錄America3.txt之前在新聞?lì)愔械淖畲笪恢煤偷?步該字符在該文檔類中的當(dāng)前位置,利用差分算法計(jì)算出每個(gè)字符的差分序列。若一個(gè)字符當(dāng)前位置的差分序列需要多個(gè)字節(jié)表示,而這個(gè)數(shù)據(jù)庫(kù)塊中某小塊的260個(gè)字節(jié)(4+256)的剩余字節(jié)存放不下一個(gè)新的差分序列時(shí),系統(tǒng)便用0x00作為該小塊的填充項(xiàng)將剩余字節(jié)填滿,然后用另一塊新的小塊,將該字符在所屬文檔類中出現(xiàn)的位置作為新的小塊的最小位置保存在該小塊的前4字節(jié)里。當(dāng)以后出現(xiàn)該字符時(shí),系統(tǒng)依次將前一次在所屬文檔類中的位置與本次位置的差分序列保存在新小塊的第5個(gè)及其后面的字節(jié)里。當(dāng)一小塊裝滿數(shù)據(jù)后,系統(tǒng)再用一個(gè)新的小塊,保存該字符的新位置。依此類推,直至將數(shù)據(jù)庫(kù)塊中全部小塊裝滿為止。在實(shí)施例3中,發(fā)明人以文獻(xiàn)America3.txt中出現(xiàn)的片假名“リ”為例。前面已假設(shè)在數(shù)據(jù)庫(kù)104中,片假名“リ”在新聞?lì)愔械淖畲笪恢檬?016947,存放這個(gè)片假名的位置數(shù)據(jù)的最后一個(gè)數(shù)據(jù)庫(kù)塊里已保存了1039997個(gè)字節(jié)的位置數(shù)據(jù)。由1039997/260得出該片假名在該數(shù)據(jù)庫(kù)塊中已裝滿的小塊個(gè)數(shù)為3999,由1039997%260得到該片假名在該數(shù)據(jù)庫(kù)塊的第4000塊中已存放了257個(gè)字節(jié)數(shù)據(jù),即數(shù)據(jù)庫(kù)塊的第4000小塊中還只剩余3個(gè)字節(jié)。文獻(xiàn)America3.txt中片假名“リ”在新聞文檔類中的位置是303842978,在數(shù)據(jù)庫(kù)104的字符位置信息中保存的該片假名在登錄America3.txt前在新聞?lì)愔谐霈F(xiàn)的最大位置是1016947,利用差分算法計(jì)算303842978與1016947的差分序列是0x8194EA9F77,存放這個(gè)值需要5個(gè)字節(jié)的空間。為了保證數(shù)據(jù)庫(kù)塊每一小塊的完整性,因此在數(shù)據(jù)庫(kù)塊中第4000個(gè)小塊的第258~260字節(jié)分別放置填充項(xiàng)0x00。然后再用一個(gè)新的數(shù)據(jù)庫(kù)塊,將該片假名出現(xiàn)的位置值0x121C46A2放在新的數(shù)據(jù)庫(kù)塊的第1個(gè)小塊中。
6.全部處理完文獻(xiàn)中的字符后,在數(shù)據(jù)庫(kù)104中按字符內(nèi)部編碼順序分別查找相應(yīng)的記錄。如果能夠找到指定字符的記錄,就用本次登錄的字符的信息更新數(shù)據(jù)庫(kù)104字符信息和字符位置信息中的數(shù)據(jù);否則將本次登錄的該字符的信息存入數(shù)據(jù)庫(kù)104字符信息和字符位置信息中。在實(shí)施例3中,仍以文獻(xiàn)America3.txt中出現(xiàn)的片假名“リ”為例。在數(shù)據(jù)庫(kù)104中查找到片假名“リ”的字符信息,并更新數(shù)據(jù)庫(kù)的字符信息和字符位置信息。在登錄文獻(xiàn)America3.txt之前,片假名“リ”在數(shù)據(jù)庫(kù)104的最后一條字符位置記錄中的數(shù)據(jù)庫(kù)塊已有1039997字節(jié)存放了該字符的差分序列。當(dāng)更新數(shù)據(jù)庫(kù)104字符位置信息時(shí),文獻(xiàn)索引生成器105更新該字符最后一條字符位置記錄中的數(shù)據(jù)庫(kù)塊。再將上一步中新增的數(shù)據(jù)庫(kù)塊作為該字符在數(shù)據(jù)庫(kù)104的字符位置信息中的一條新記錄存入數(shù)據(jù)庫(kù)104中,這條新記錄成為該字符在數(shù)據(jù)庫(kù)104的字符位置信息中的最后一條字符位置記錄。
表8字符與數(shù)據(jù)庫(kù)塊的對(duì)應(yīng)關(guān)系
7.更新數(shù)據(jù)庫(kù)104文檔類信息中的字符的最后位置值和文獻(xiàn)信息中該登錄文獻(xiàn)的終止位置。在實(shí)施例3中,數(shù)據(jù)庫(kù)104文檔類信息中新聞?lì)惖淖址詈笪恢弥当桓聻?03842982,文獻(xiàn)信息中文獻(xiàn)America3.txt的終止位置是303842982。
二、全文檢索引擎的處理本發(fā)明,還提供了一種全文檢索的方法。該方法利用本發(fā)明建立的文獻(xiàn)索引中的字符位置信息,對(duì)操作者指定的檢索詞進(jìn)行全文檢索。
下面參照?qǐng)D4的流程圖,說(shuō)明利用已生成的文獻(xiàn)索引進(jìn)行全文檢索的處理過(guò)程。
步驟502,輸入文檔類名。例如,顯示具有輸入框的對(duì)話框,提示操作者輸入(例如,由鍵盤5)文檔類名。
步驟504,全文檢索引擎106根據(jù)輸入的文檔類名對(duì)數(shù)據(jù)庫(kù)104中的文檔類信息進(jìn)行查詢,查找出操作者指定的文檔類名的文檔類信息,從中得到該文檔類相應(yīng)的文檔類編號(hào)。
步驟506,輸入檢索詞。例如,顯示具有輸入框的對(duì)話框,提示操作者輸入(例如,由鍵盤5)檢索詞。
步驟508,進(jìn)行全文檢索之前的數(shù)據(jù)初始化處理。包括以下幾項(xiàng)處理定義檢索詞匹配位置。比如設(shè)置它的初始值是1,即假設(shè)操作者要查詢的檢索詞中的第一個(gè)字符在指定文檔類中第一次出現(xiàn)的位置是1;獲得輸入的檢索詞中所含字符的個(gè)數(shù);把輸入的檢索詞中的每個(gè)字符逐字轉(zhuǎn)換為內(nèi)部編碼;根據(jù)每個(gè)字符在檢索詞中出現(xiàn)的順序,為每個(gè)字符分配一個(gè)位移量。比如檢索詞“米國(guó)アメリカ”中以第1個(gè)出現(xiàn)的字符為起始點(diǎn),分別為這6個(gè)字符分配了各自的位移量?!懊住钡奈灰屏渴?,“國(guó)”的位移量是-1,“ア”的位移量是-2,“メ”的位移量是-3,“リ”的位移量是-4,“カ”的位移量是-5;拼寫出數(shù)據(jù)庫(kù)的查詢語(yǔ)句;初始化結(jié)果集。
步驟510,將在步驟506拼寫出的數(shù)據(jù)庫(kù)查詢語(yǔ)句提交給數(shù)據(jù)庫(kù)104進(jìn)行數(shù)據(jù)庫(kù)查詢,獲得檢索詞中每個(gè)字符的位置信息的全部記錄。形成一個(gè)記錄集。這個(gè)記錄集包含了檢索詞中每個(gè)字符的在數(shù)據(jù)庫(kù)104中存儲(chǔ)的位置信息記錄,其中每條記錄中又含有一個(gè)存放字符位置數(shù)據(jù)的數(shù)據(jù)庫(kù)塊字段。
步驟512,判斷記錄集中是否有檢索詞中每個(gè)字符的的記錄。如果記錄集中沒(méi)有某個(gè)字符的記錄,則結(jié)束檢索。否則,進(jìn)行步驟514。
步驟514,將查詢到的檢索詞中每個(gè)字符的記錄按照數(shù)據(jù)庫(kù)塊的最小位置分別進(jìn)行排序。并將每個(gè)字符的第一條記錄中的數(shù)據(jù)庫(kù)塊、該數(shù)據(jù)庫(kù)塊中第一小塊和該小塊中第一個(gè)字符位置分別設(shè)置為該字符的當(dāng)前數(shù)據(jù)庫(kù)塊、當(dāng)前小塊和當(dāng)前字符位置。
步驟516,設(shè)定一個(gè)計(jì)數(shù)器(I)用來(lái)表示正在進(jìn)行檢索詞中的第I個(gè)字符的還原匹配。在步驟518中,它作為一個(gè)循環(huán)控制變量,控制著對(duì)檢索詞中的第I個(gè)字符進(jìn)行字符位置還原、匹配處理。它的初始值設(shè)為1,表示從檢索詞的第一個(gè)字符開始還原匹配。
步驟518,如果I小于等于檢索詞中的字符個(gè)數(shù),則前進(jìn)到步驟520,進(jìn)行第I個(gè)字符的還原匹配處理。否則,表示獲得了檢索結(jié)果,應(yīng)保存該結(jié)果,然后前進(jìn)到步驟544。
步驟520,將檢索詞匹配位置與檢索詞中第I個(gè)字符的當(dāng)前記錄中的數(shù)據(jù)庫(kù)塊的最大位置與第I個(gè)字符的位移量之和進(jìn)行比較。1、如果大于,說(shuō)明該數(shù)據(jù)庫(kù)塊中不存在與檢索詞匹配位置相匹配的字符位置,進(jìn)行步驟538,判斷記錄集中是否還有第I個(gè)字符的記錄,如果有,進(jìn)行步驟540,取第I個(gè)字符的下一條記錄,并將該記錄中的數(shù)據(jù)庫(kù)塊設(shè)定為該字符的當(dāng)前數(shù)據(jù)庫(kù)塊,其中的第一為當(dāng)前小塊,小塊中的最小位置為當(dāng)前位置;如果沒(méi)有,結(jié)束當(dāng)前檢索詞的檢索。2、如果小于,說(shuō)明當(dāng)前記錄的數(shù)據(jù)庫(kù)塊中的某個(gè)小塊可能存放有匹配的字符位置,進(jìn)行步驟522對(duì)當(dāng)前數(shù)據(jù)庫(kù)塊的當(dāng)前小塊進(jìn)行進(jìn)一步判斷。3、如果等于,說(shuō)明當(dāng)前數(shù)據(jù)庫(kù)塊的最大位置就是一個(gè)匹配的字符位置,然后進(jìn)行步驟542,將I加1,進(jìn)一步判斷下一個(gè)字符是否與當(dāng)前匹配位置匹配。
針對(duì)步驟522,首先進(jìn)行一些說(shuō)明。在本發(fā)明的字符位置數(shù)據(jù)庫(kù)塊中可以包含有多個(gè)小塊,而一個(gè)小塊中又是由一個(gè)最小位置和多個(gè)差分序列構(gòu)成的,并且這些位置是按從小到大的順序存放的,那么可以把兩個(gè)連續(xù)的小塊中后面的小塊的最小位置看作前面小塊里存放的最大位置。如假設(shè)字符“日”在某一個(gè)數(shù)據(jù)庫(kù)塊的第5小塊的最小位置是1000,第6小塊的最小位置是1500,那么就可以確認(rèn)在這個(gè)數(shù)據(jù)庫(kù)塊的第4小塊中存放的最大位置應(yīng)該小于1000,第5小塊存放的最大位置應(yīng)該小于1500。對(duì)于數(shù)據(jù)庫(kù)塊中的最后一個(gè)小塊里的字符最大位置可用它所在的數(shù)據(jù)庫(kù)塊的最大位置來(lái)確定。
步驟522,將檢索詞匹配位置與檢索詞中第I個(gè)字符的當(dāng)前小塊的最大位置與第I個(gè)字符的位移量之和進(jìn)行比較。1、如果大于,說(shuō)明當(dāng)前小塊中不存在與檢索詞匹配位置相匹配的字符位置,進(jìn)行到步驟534,判斷當(dāng)前記錄的數(shù)據(jù)庫(kù)塊中是否還有下一個(gè)小塊,如果有,進(jìn)行步驟536,取下一個(gè)小塊,并設(shè)定該小塊為該字符的當(dāng)前小塊,該小塊的最小位置為該字符的當(dāng)前位置;如果沒(méi)有,進(jìn)行到步驟538。2、如果小于,說(shuō)明當(dāng)前小塊中可能存放有匹配的字符位置,進(jìn)行步驟524對(duì)當(dāng)前小塊中的位置數(shù)據(jù)進(jìn)行進(jìn)一步判斷。3、如果等于,說(shuō)明當(dāng)前小塊的最大位置就是一個(gè)匹配的字符位置,然后進(jìn)行步驟542,將I加1,進(jìn)一步判斷下一個(gè)字符是否與當(dāng)前檢索詞匹配位置匹配。
步驟524,將檢索詞匹配位置與檢索詞中第I個(gè)字符的當(dāng)前還原的位置與第I個(gè)字符的位移量之和進(jìn)行比較。1、如果大于,進(jìn)行到步驟530,判斷當(dāng)前小塊中是否還有下一個(gè)差分序列,如果有,進(jìn)行步驟532,取下一個(gè)差分序列,用這個(gè)差分序列和該字符的當(dāng)前位置,通過(guò)還原算法得到該字符在所屬文檔類中的當(dāng)前還原位置;如果沒(méi)有,進(jìn)行到步驟534。2、如果小于,進(jìn)行步驟526,用檢索詞中第I個(gè)字符的當(dāng)前還原位置與第I個(gè)字符的位移量之和重置檢索詞匹配位置,然后在步驟528將I設(shè)置為1,返回步驟518,從檢索詞的第一個(gè)字符開始查找與新的檢索詞匹配位置匹配的字符位置。3、如果等于,說(shuō)明當(dāng)前還原的字符位置就是一個(gè)匹配的字符位置,然后進(jìn)行步驟542,將I加1,進(jìn)一步判斷下一個(gè)字符是否與當(dāng)前檢索詞位置相匹配。
步驟544,如果步驟518判斷I大于檢索詞中的字符個(gè)數(shù),說(shuō)明查找到檢索詞中每個(gè)字符當(dāng)前還原位置都與當(dāng)前檢索詞匹配位置相匹配,即在當(dāng)前文檔類中查找到一個(gè)檢索詞的匹配。然后通過(guò)文獻(xiàn)信息共享轉(zhuǎn)換器107,根據(jù)當(dāng)前檢索詞匹配位置確定所在文獻(xiàn),由該文獻(xiàn)的刪除標(biāo)志知道它是否已被刪除的。如果該文獻(xiàn)已被刪除,那么在該文獻(xiàn)中出現(xiàn)的檢索詞不能作為檢索結(jié)果;如果該文獻(xiàn)未刪除,得到該文獻(xiàn)的文獻(xiàn)號(hào)。
步驟546,將獲得的文獻(xiàn)號(hào)保存在檢索結(jié)果集中。
步驟548,更新檢索詞匹配位置。將當(dāng)前檢索詞匹配位置加1,作為新的檢索詞匹配位置。然后返回步驟516,將I設(shè)置為1,再到步驟518,從檢索詞的第一個(gè)字符開始查找與新的檢索詞匹配位置匹配的字符位置。
實(shí)施例4通過(guò)全文檢索引擎106對(duì)存儲(chǔ)在數(shù)據(jù)庫(kù)104中的文獻(xiàn)進(jìn)行全文檢索。假設(shè)準(zhǔn)備查詢“新聞?lì)悺蔽臋nI類中的一個(gè)詞“米國(guó)アメリカ”。
步驟502,輸入文檔類名。例如,顯示具有輸入框的對(duì)話框,提示操作者輸入文檔類名“新聞?lì)悺薄?br>
步驟504,全文檢索引擎106根據(jù)輸入的文檔類名對(duì)數(shù)據(jù)庫(kù)104中的文檔類信息進(jìn)行查詢,查找出“新聞?lì)悺蔽臋n類名的文檔類信息,并從中得到“新聞?lì)悺钡奈臋n類編號(hào)為1。
步驟506,輸入檢索詞。例如,顯示具有輸入框的對(duì)話框,操作者輸入(例如,由鍵盤5)檢索詞“米國(guó)アメリカ”。
步驟508,進(jìn)行全文檢索之前的數(shù)據(jù)初始化處理。包括以下幾項(xiàng)處理定義檢索詞匹配位置的初始值是1,即假設(shè)操作者要查詢的檢索詞的第一個(gè)字符在“新聞”文檔類中第一次出現(xiàn)的位置是1;統(tǒng)計(jì)獲得檢索詞“米國(guó)アメリカ”中所含字符的個(gè)數(shù)是6;逐字將該檢索詞中的字符轉(zhuǎn)換成內(nèi)部代碼,如把6個(gè)字符分別由Shift_JIS代碼轉(zhuǎn)換為相應(yīng)的系統(tǒng)內(nèi)部編碼,請(qǐng)參見表9第1,2欄數(shù)據(jù);
根據(jù)每個(gè)字符在檢索詞中出現(xiàn)的順序,為每個(gè)字符分配一個(gè)位移量。檢索詞“米國(guó)アメリカ”中以第1個(gè)出現(xiàn)的字符為起始點(diǎn),分別為這6個(gè)字符分配了各自的位移量?!懊住钡奈灰屏渴?,“國(guó)”的位移量是-1,“ア”的位移量是-2,“メ”的位移量是-3,“リ”的位移量是-4,“カ”的位移量是-5,請(qǐng)參見表9第1,3欄數(shù)據(jù);把操作者輸入的文檔類名“新聞?lì)悺焙蜋z索詞中6個(gè)字符的內(nèi)部編碼拼寫在數(shù)據(jù)庫(kù)的SQL查詢語(yǔ)句中;清空結(jié)果集。
步驟510,將在步驟506拼寫出的數(shù)據(jù)庫(kù)查詢語(yǔ)句提交給數(shù)據(jù)庫(kù)104進(jìn)行數(shù)據(jù)庫(kù)查詢,獲得檢索詞中每個(gè)字符的全部位置信息,形成多條記錄。每條記錄包括多個(gè)字段,一條記錄中包含一個(gè)字符位置數(shù)據(jù)庫(kù)塊作為一個(gè)字段,即一條記錄對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)塊。獲得一個(gè)記錄集。這個(gè)記錄集包含檢索詞中每個(gè)字符的在數(shù)據(jù)庫(kù)104中存儲(chǔ)的位置信息。在表9中,列出了“新聞?lì)悺蔽臋n類中檢索詞中出現(xiàn)的6個(gè)字符“米國(guó)アメリカ”在數(shù)據(jù)庫(kù)104的字符位置信息中的部分記錄。
表9“新聞?lì)悺蔽臋n類中檢索詞是“米國(guó)アメリカ”的記錄中的信息
步驟512,判斷記錄集中是否有檢索詞中每個(gè)字符的的記錄。如果某個(gè)字符沒(méi)有記錄,則結(jié)束檢索。否則,進(jìn)行步驟514。
步驟514,將查詢到的檢索詞中每個(gè)字符的記錄按照數(shù)據(jù)庫(kù)塊的最小位置分別進(jìn)行排序。例如リ的三條字符位置記錄中數(shù)據(jù)庫(kù)塊的最小位置分別是5、30494和303842978。
步驟516,設(shè)定計(jì)數(shù)器(I)的初始值為1,表示從檢索詞的第一個(gè)字符“米”開始還原匹配。
在步驟518,I=1<6,則進(jìn)行到步驟520。用已賦值為1的檢索詞匹配位置與“米”在數(shù)據(jù)庫(kù)塊中最大位置30499與“米”的位移量0之和(請(qǐng)參見表10第1,4,5欄)作比較,1<30499+0,說(shuō)明該數(shù)據(jù)庫(kù)塊中可能存在與當(dāng)前檢索詞匹配位置1匹配的“米”的字符位置,即該字符位置與位移量0之和等于當(dāng)前檢索詞匹配位置1。假設(shè)該數(shù)據(jù)庫(kù)塊中第2小塊的最小位置是X。將檢索詞匹配位置1與該數(shù)據(jù)庫(kù)塊第1小塊的最大位置X(就是第2小塊的最小位置)與“米”的位移量0之和進(jìn)行比較,判定第1個(gè)小塊中可能存在與當(dāng)前檢索詞匹配位置1相等的“米”的字符位置,然后比較檢索詞匹配位置1與第1小塊的最小位置1與“米”的位移量0之和,發(fā)現(xiàn)二者相等。計(jì)數(shù)器執(zhí)行加1運(yùn)算,即I=2,返回步驟518,查找字符“國(guó)”的數(shù)據(jù)庫(kù)塊中是否存在這樣的字符位置,即其與“國(guó)”的位移量之和等于當(dāng)前檢索詞匹配位置1。
此時(shí)I=2,字符“國(guó)”的位移量是-1,其第一條記錄中的數(shù)據(jù)庫(kù)塊中的最大位置是303842982(參見表10第1,4,5欄),第1小塊的最小位置是2,最大位置假設(shè)是Y。先算出這條記錄中數(shù)據(jù)庫(kù)塊的最大位置與字符“國(guó)”位移量的和303842981(303842982-1=303842981),用這個(gè)和303842981與當(dāng)前檢索詞匹配位置1比較大小,判定在該數(shù)據(jù)庫(kù)塊中可能存在與當(dāng)前檢索詞匹配位置匹配的字符位置。將檢索詞匹配位置1與該數(shù)據(jù)庫(kù)塊第1小塊的最大位置(即第2小塊的最小位置)與位移量之和Y-1進(jìn)行比較,判定該數(shù)據(jù)庫(kù)塊的第1小塊里可能存在與當(dāng)前檢索詞匹配位置匹配的字符位置。比較檢索詞匹配位置1與第1小塊的最小位置2與位移量-1之和1(2-1=1),二者相等。即找到了與當(dāng)前檢索詞匹配位置1匹配的檢索詞的第2個(gè)字符“國(guó)”。然后將計(jì)數(shù)器加1。
檢索詞中第3個(gè)字符及其之后3個(gè)字符“アメリカ”的匹配過(guò)程與上述對(duì)字符“米國(guó)”的匹配過(guò)程類似,只是“アメリカ”中每個(gè)字符的位移量各自不同。當(dāng)匹配完字符“カ”,計(jì)數(shù)器的值為7,計(jì)數(shù)器的值大于檢索詞中字符的個(gè)數(shù)6,得到了這個(gè)檢索詞第一個(gè)檢索結(jié)果,它的匹配位置是1。然后進(jìn)行到步驟544。
在步驟544-548,利用文獻(xiàn)信息共享轉(zhuǎn)換器107,用上面獲得的匹配位置1查找到相應(yīng)的文獻(xiàn)號(hào)為1。將檢索結(jié)果存入結(jié)果集里。將檢索詞的匹配位置1加1,得到一個(gè)新的檢索詞匹配位置2作為當(dāng)前檢索詞匹配位置。將計(jì)數(shù)器的值重置為1。從每個(gè)字符的當(dāng)前數(shù)據(jù)庫(kù)塊中當(dāng)前小塊中當(dāng)前位置開始查找與新檢索詞匹配位置匹配的結(jié)果。
在開始查找下一個(gè)檢索結(jié)果時(shí),首先,從字符“米”當(dāng)前數(shù)據(jù)庫(kù)塊第1小塊的第5、6字節(jié)取到一個(gè)差分序列是0x816E,將該差分序列除最后一位數(shù)(即個(gè)位數(shù))外其它各位數(shù)的字節(jié)的最高位還原成0,變成了(016E)16=(366)10,用字符“米”前次出現(xiàn)的位置1與該值求和,還原得到字符位置值是367(1+366=367),再加上位移量0。這個(gè)值大于當(dāng)前檢索詞匹配位置2,因此該還原的字符位置與檢索詞匹配位置2不匹配。用該字符的當(dāng)前位置367與位移量0之和367重新設(shè)置檢索詞匹配位置,計(jì)數(shù)器也被重置為1。從每個(gè)字符的當(dāng)前數(shù)據(jù)庫(kù)塊中當(dāng)前小塊中當(dāng)前位置開始查找與新檢索詞匹配位置367匹配的結(jié)果,直至該檢索詞中某個(gè)字符不再有字符位置信息為止,便結(jié)束這次對(duì)“米國(guó)アメリカ”的檢索處理。
實(shí)施例5通過(guò)全文檢索引擎106對(duì)存儲(chǔ)在數(shù)據(jù)庫(kù)104中的文獻(xiàn)進(jìn)行全文檢索。假設(shè)準(zhǔn)備查詢“新聞?lì)悺蔽臋n中的一個(gè)詞“アメリカ”。
步驟502,輸入文檔類名。例如,顯示具有輸入框的對(duì)話框,提示操作者輸入(例如,由鍵盤5)文檔類名“新聞?lì)悺薄?br>
步驟504,全文檢索引擎106根據(jù)輸入的文檔類名對(duì)數(shù)據(jù)庫(kù)104中的文檔類信息進(jìn)行查詢,查找出“新聞?lì)悺蔽臋n類名的文檔類信息,并從中得到“新聞?lì)悺钡奈臋n類編號(hào)為1。
步驟506,輸入檢索詞。例如,顯示具有輸入框的對(duì)話框,操作者輸入檢索詞“アメリカ”。
步驟508,進(jìn)行全文檢索之前的數(shù)據(jù)初始化處理。包括以下幾項(xiàng)處理定義檢索詞匹配位置的初始值是1,即假設(shè)操作者要查詢的檢索詞的第一個(gè)字符在“新聞”文檔類中第一次出現(xiàn)的位置是1;統(tǒng)計(jì)獲得檢索詞“アメリカ”中所含字符的個(gè)數(shù)是4;逐字將該檢索詞中的字符轉(zhuǎn)換成內(nèi)部代碼,如把4個(gè)字符分別由Shift_JIS代碼轉(zhuǎn)換為相應(yīng)的系統(tǒng)內(nèi)部編碼,請(qǐng)參見表11第1,2欄數(shù)據(jù);根據(jù)每個(gè)字符在檢索詞中出現(xiàn)的順序,為每個(gè)字符分配一個(gè)位移量。檢索詞“アメリカ”中以第1個(gè)出現(xiàn)的字符為起始點(diǎn),分別為這4個(gè)字符分配了各自的位移量。“ア”的位移量是0,“メ”的位移量是-1,“リ”的位移量是-2,“カ”的位移量是-3,請(qǐng)參見表11第1,3欄數(shù)據(jù);把操作者輸入的文檔類名“新聞?lì)悺焙蜋z索詞中4個(gè)字符的內(nèi)部編碼拼寫在數(shù)據(jù)庫(kù)的SQL查詢語(yǔ)句中;清空結(jié)果集。
步驟510,將在步驟506拼寫出的數(shù)據(jù)庫(kù)查詢語(yǔ)句提交給數(shù)據(jù)庫(kù)104進(jìn)行數(shù)據(jù)庫(kù)查詢,獲得檢索詞中每個(gè)字符的全部位置信息,形成多條記錄。每條記錄包括多個(gè)字段,一條記錄中包含一個(gè)字符位置數(shù)據(jù)庫(kù)塊作為一個(gè)字段,即一條記錄對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)塊。獲得一個(gè)記錄集。這個(gè)記錄集包含檢索詞中每個(gè)字符的在數(shù)據(jù)庫(kù)104中存儲(chǔ)的位置信息。在表10中,列出了“新聞?lì)悺蔽臋n類中檢索詞中出現(xiàn)的4個(gè)字符“アメリカ”在數(shù)據(jù)庫(kù)104的字符位置信息中的部分記錄。
表10“新聞?lì)悺蔽臋n類中檢索詞是“アメリカ”的查詢結(jié)果
步驟512,判斷記錄集中是否有檢索詞中每個(gè)字符的的記錄。如果某個(gè)字符沒(méi)有記錄,則結(jié)束檢索。否則,進(jìn)行步驟514。
步驟514,將查詢到的檢索詞中每個(gè)字符的記錄按照數(shù)據(jù)庫(kù)塊的最小位置分別進(jìn)行排序。例如リ的三個(gè)數(shù)據(jù)庫(kù)塊的最小位置分別是1005、30494和303842978。
步驟516,設(shè)定計(jì)數(shù)器(I)的初始值為1,表示從檢索詞的第一個(gè)字符“ア”開始還原匹配。
在步驟518,I=1<4,則進(jìn)行到步驟520。用已賦值為1的檢索詞匹配位置與“ア”在數(shù)據(jù)庫(kù)塊中最大位置303842976與“ア”的位移量0之和(請(qǐng)參見表11第1,4,5欄)作比較,1<303842976+0,說(shuō)明該數(shù)據(jù)庫(kù)塊中可能存在與當(dāng)前檢索詞匹配位置1匹配的“ア”的字符位置,即該字符位置與位移量0之和等于當(dāng)前檢索詞匹配位置1。假設(shè)該數(shù)據(jù)庫(kù)塊中第2小塊的最小位置是X1。將檢索詞匹配位置1與該數(shù)據(jù)庫(kù)塊第1小塊的最大位置X1(就是第2小塊的最小位置)與“ア”的位移量0之和進(jìn)行比較,判定第1個(gè)小塊中可能存在與當(dāng)前檢索詞匹配位置1相等的“ア”的字符位置,然后比較檢索詞匹配位置1與第1小塊的最小位置1003與“ア”的位移量0之和,結(jié)果該數(shù)據(jù)庫(kù)塊第1小塊的最小位置1003與位移量之和大于當(dāng)前檢索詞匹配位置1。此時(shí),字符“ア”當(dāng)前位置是1003。在步驟526,將檢索詞匹配位置設(shè)置成字符“ア”當(dāng)前位置1003與位移量0之和,計(jì)數(shù)器的值設(shè)為1。返回步驟518,用新的檢索詞匹配位置1003對(duì)第一個(gè)字符“ア”當(dāng)前位置再一次進(jìn)行匹配處理,確認(rèn)檢索詞匹配位置1003與該字符的當(dāng)前位置1003與位移量之和相等后,將I加1。
此時(shí)I=2,第2個(gè)字符“メ”的位移量是-1,其第一條記錄中的數(shù)據(jù)庫(kù)塊中的最大位置是303842977(參見表11第1,4,5欄),第1小塊的最小位置是1004,最大位置假設(shè)是Y2。先算出這條記錄中數(shù)據(jù)庫(kù)塊的最大位置與字符“メ”位移量-1的和303842976(303842977-1=303842976),用這個(gè)和303842976與當(dāng)前檢索詞匹配位置1003比較,判定在該數(shù)據(jù)庫(kù)塊中可能存在與當(dāng)前檢索詞匹配位置匹配的字符位置。將檢索詞匹配位置1003與該數(shù)據(jù)庫(kù)塊第1小塊的最大位置(即第2小塊的最小位置)與位移量之和Y2-1進(jìn)行比較,判定該數(shù)據(jù)庫(kù)塊的第1小塊里可能存在與當(dāng)前檢索詞匹配位置1003匹配的字符位置。求第1小塊的最小位置1004與位移量-1的和1003,將該和與檢索詞匹配位置1003進(jìn)行比較,二者相等。即找到了與當(dāng)前檢索詞匹配位置1003匹配的檢索詞的第2個(gè)字符“メ”。然后將計(jì)數(shù)器加1。
此時(shí)I=3,查找第3個(gè)字符“リ”與檢索詞匹配位置1003匹配的字符位置。字符“リ”的位移量是-2,在數(shù)據(jù)庫(kù)塊中最大位置是1320(請(qǐng)參見表11第1,4,5欄),第1小塊的最小位置是1005,最大位置假設(shè)是X3。先算出這條記錄中數(shù)據(jù)庫(kù)塊的最大位置與這個(gè)字符位移量的和1318(1320-2=1318),用這個(gè)和1318與檢索詞匹配位置1003比較,判定在該數(shù)據(jù)庫(kù)塊中可能存在與當(dāng)前檢索詞匹配位置1003匹配的字符位置。將檢索詞匹配位置1003與該數(shù)據(jù)庫(kù)塊第1小塊的最大位置(即第2小塊的最小位置)與位移量-2之和X3-2進(jìn)行比較,判定該數(shù)據(jù)庫(kù)塊的第1小塊里可能存在與當(dāng)前檢索詞匹配位置匹配的字符位置。求出第1小塊的最小位置1005與位移量-2的和是1003,將該和與檢索詞匹配位置1003進(jìn)行比較,二者相等。即找到了與當(dāng)前檢索詞匹配位置1003匹配的檢索詞的第3個(gè)字符“リ”。然后將計(jì)數(shù)器加1。
此時(shí),I=4。查找第4個(gè)字符“カ”與檢索詞匹配位置1003匹配的字符位置。字符“カ”的位移量是-3,在數(shù)據(jù)庫(kù)塊中最大位置是303842979(請(qǐng)參見表11第1,4,5欄),第1小塊的最小位置是1006,最大位置假設(shè)是X4。先算出這條記錄中數(shù)據(jù)庫(kù)塊的最大位置與這個(gè)字符位移量的和303842976(303842979-3=303842976),用這個(gè)和303842976與檢索詞匹配位置1003比較,判定在該數(shù)據(jù)庫(kù)塊中可能存在與當(dāng)前檢索詞匹配位置1003匹配的字符位置。將檢索詞匹配位置1003與該數(shù)據(jù)庫(kù)塊第1小塊的最大位置(即第2小塊的最小位置)與位移量-3之和X4-3進(jìn)行比較,判定該數(shù)據(jù)庫(kù)塊的第1小塊里可能存在與當(dāng)前檢索詞匹配位置匹配的字符位置。求出第1小塊的最小位置1006與位移量-3的和是1003,將該和與檢索詞匹配位置1003進(jìn)行比較,二者相等。即找到了與當(dāng)前檢索詞匹配位置1003匹配的檢索詞的第4個(gè)字符“カ”。然后將I加1。
此時(shí),I=5。在步驟518計(jì)數(shù)器的值I大于檢索詞所含的字符個(gè)數(shù)4,所以可以判斷找到了一個(gè)檢索結(jié)果,匹配位置是1003。在步驟544-548,利用文獻(xiàn)信息共享轉(zhuǎn)換器107,用上面獲得的匹配位置1003查找到相應(yīng)的文獻(xiàn)號(hào)。把檢索結(jié)果存入結(jié)果集里。將檢索詞的匹配位置1003加1,得到一個(gè)新的檢索詞匹配位置1004。將計(jì)數(shù)器的值重置為1。此時(shí),檢索詞4個(gè)字符的當(dāng)前位置是字符“ア”是1003,字符“メ”是1004,字符“リ”是1005,字符“カ”是1006。由每個(gè)字符的當(dāng)前數(shù)據(jù)庫(kù)塊的當(dāng)前小塊的當(dāng)前位置開始查找一個(gè)新的檢索結(jié)果。
在開始查找下一個(gè)檢索結(jié)果時(shí),首先,從字符“ア”當(dāng)前數(shù)據(jù)庫(kù)塊第1小塊的第5字節(jié)取到一個(gè)差分序列是04。因?yàn)檫@個(gè)差分序列只有1位數(shù),所以直接將該差分序列值與前一次出現(xiàn)的位置1003相加得到位置值是1007(1003+4=1007)。經(jīng)比較,檢索詞匹配位置1004小于字符“ア”的當(dāng)前位置1007與位移量0之和。因此沒(méi)有與檢索詞匹配位置1004匹配的結(jié)果。用該字符的當(dāng)前位置1007與位移量0之和1007重新設(shè)置檢索詞匹配位置,計(jì)數(shù)器也被重置為1。重新開始查找字符“ア”的匹配位置。結(jié)果檢索詞匹配位置1007與字符“ア”當(dāng)前位置相等,I由1變?yōu)?。
而后,分別查找其余3個(gè)字符“メリカ”與當(dāng)前檢索詞匹配位置1007匹配的字符位置。如果全部匹配,在步驟544-548利用文獻(xiàn)信息共享轉(zhuǎn)換器107,用上面獲得的匹配位置查找到相應(yīng)的文獻(xiàn)號(hào),將又一個(gè)檢索結(jié)果存入了結(jié)果集。然后從步驟516重復(fù)上述過(guò)程,直到檢索詞中某個(gè)字符不再有字符位置信息為止,便結(jié)束這次對(duì)“アメリカ”檢索工作。
三、文獻(xiàn)信息共享轉(zhuǎn)換器本發(fā)明,還提供了一種由指定的字符位置快速獲得相對(duì)應(yīng)的文獻(xiàn)信息的方法。這種方法利用高速緩沖存儲(chǔ)器所具有的高速存取數(shù)據(jù)的特性,把數(shù)據(jù)庫(kù)104的文獻(xiàn)信息的部分信息在共享內(nèi)存中保存一個(gè)備份。在執(zhí)行全文檢索的過(guò)程中,它可以從全文檢索處理得到的一個(gè)或多個(gè)匹配位置,通過(guò)二分查找算法,快速、準(zhǔn)確地得到相對(duì)應(yīng)的文獻(xiàn)編號(hào)。每當(dāng)執(zhí)行登錄或刪除文獻(xiàn)處理時(shí),啟動(dòng)文獻(xiàn)信息共享轉(zhuǎn)換器107,可以實(shí)時(shí)更新這個(gè)備份的文獻(xiàn)信息。
下面參照?qǐng)D5,說(shuō)明文獻(xiàn)信息共享轉(zhuǎn)換器的處理過(guò)程。
1.輸入602文檔類號(hào),文獻(xiàn)信息共享轉(zhuǎn)換器107先檢查共享內(nèi)存604中是否已保存了指定文檔類的文獻(xiàn)信息。若共享內(nèi)存604里沒(méi)有所指定文檔類的文獻(xiàn)信息,向系統(tǒng)申請(qǐng)一塊共享內(nèi)存604。檢索數(shù)據(jù)庫(kù)104的文獻(xiàn)信息,把指定文檔類的所有文獻(xiàn)信息中有關(guān)反映文獻(xiàn)編號(hào)和文獻(xiàn)位置的數(shù)據(jù)項(xiàng),如文獻(xiàn)編號(hào)和文獻(xiàn)起始位置、終止位置、刪除標(biāo)志等四項(xiàng)數(shù)據(jù),按文獻(xiàn)登錄的先后順序讀到共享內(nèi)存604中并常駐內(nèi)存,以備多用戶同時(shí)查詢?cè)撝付ㄎ臋n類。數(shù)據(jù)庫(kù)104的文獻(xiàn)信息中其他數(shù)據(jù)項(xiàng),比如作者、文獻(xiàn)標(biāo)題等,則只作為存檔數(shù)據(jù)保存在數(shù)據(jù)庫(kù)104。若共享內(nèi)存604里已保存了所指定文檔類文獻(xiàn)的信息,那么可以從共享內(nèi)存604中直接讀取文獻(xiàn)信息,而不必訪問(wèn)數(shù)據(jù)庫(kù)104。這樣做,可減少數(shù)據(jù)庫(kù)104的I/O頻率,節(jié)省訪問(wèn)數(shù)據(jù)庫(kù)的時(shí)間,提高數(shù)據(jù)查詢的速度。
2.在進(jìn)行全文檢索時(shí),將位置信息606,一個(gè)用來(lái)存放一個(gè)或多個(gè)匹配位置的一維數(shù)組,作為輸入?yún)?shù)提交給文獻(xiàn)信息共享轉(zhuǎn)換器107。文獻(xiàn)信息共享轉(zhuǎn)換器107采用二分查找算法,將每個(gè)匹配位置與共享內(nèi)存604中文獻(xiàn)的范圍(文獻(xiàn)的起始位置和終止位置)進(jìn)行比較,確定匹配位置所在的文獻(xiàn),并檢查所確定文獻(xiàn)的刪除標(biāo)志。如果這個(gè)文獻(xiàn)已被刪除,即刪除標(biāo)志為1,則這個(gè)文獻(xiàn)對(duì)應(yīng)的返回值是-1。否則,文獻(xiàn)信息共享轉(zhuǎn)換器107輸出查獲的相應(yīng)的文獻(xiàn)編號(hào)。最后將所有由匹配位置轉(zhuǎn)換得到的文獻(xiàn)號(hào)存放在文獻(xiàn)信息608——一個(gè)存放一個(gè)或多個(gè)文獻(xiàn)號(hào)的一維數(shù)組。文獻(xiàn)信息608中文獻(xiàn)號(hào)的存放順序與位置信息606中檢索詞匹配位置的存放順序是一一對(duì)應(yīng)的。
3.當(dāng)?shù)卿浶挛墨I(xiàn)、生成字符索引時(shí),文獻(xiàn)索引生成器105提供接口,可以實(shí)時(shí)地將新文獻(xiàn)的有關(guān)信息添加進(jìn)共享內(nèi)存604中。
4.當(dāng)文獻(xiàn)被刪除時(shí),文獻(xiàn)索引生成器105提供接口,可以實(shí)時(shí)地將共享內(nèi)存604里這個(gè)被刪除文獻(xiàn)的刪除標(biāo)志置成1(表示已刪除)。
實(shí)施例7本實(shí)施例是對(duì)一個(gè)存放了多個(gè)匹配位置的一維數(shù)組中的數(shù)據(jù)進(jìn)行文獻(xiàn)信息的轉(zhuǎn)換,以便得到這些位置所對(duì)應(yīng)的文獻(xiàn)編號(hào)。
1.輸入文檔類號(hào)為1,參見圖5中602。文獻(xiàn)信息共享轉(zhuǎn)換器107檢查共享內(nèi)存604中是否已保存了文檔類號(hào)為1的文獻(xiàn)信息。若共享內(nèi)存604里沒(méi)有所指定文檔類的文獻(xiàn)信息,向系統(tǒng)申請(qǐng)一塊共享內(nèi)存604。在數(shù)據(jù)庫(kù)104的文獻(xiàn)信息中查找出文檔類號(hào)是1的所有文獻(xiàn)信息,獲取每個(gè)文獻(xiàn)的文獻(xiàn)編號(hào)和文獻(xiàn)起始位置、終止位置、刪除標(biāo)志等四項(xiàng)數(shù)據(jù),按文獻(xiàn)登錄的先后順序讀到共享內(nèi)存604中并常駐內(nèi)存中,以備多用戶同時(shí)查詢?cè)撝付ㄎ臋n類。請(qǐng)?jiān)斠妶D5得604。
2.把存放一組(多個(gè))匹配位置的數(shù)組,位置信息606,送入文獻(xiàn)信息共享轉(zhuǎn)換器107。
3.文獻(xiàn)信息共享轉(zhuǎn)換器107采用二分查找算法,自該數(shù)組的第一個(gè)數(shù)據(jù)開始逐個(gè)將每個(gè)匹配位置與共享內(nèi)存604中文獻(xiàn)的范圍(文獻(xiàn)的起始位置和終止位置)進(jìn)行比較,確定匹配位置所在的文獻(xiàn),并檢查所確定文獻(xiàn)的刪除標(biāo)志。如果這個(gè)文獻(xiàn)已被刪除,即刪除標(biāo)志為1,則這個(gè)文獻(xiàn)對(duì)應(yīng)的返回值是-1。否則,文獻(xiàn)信息共享轉(zhuǎn)換器107輸出查獲的相應(yīng)的文獻(xiàn)編號(hào)。實(shí)施例7中,對(duì)于位置信息606中的第1個(gè)匹配位置為1001,文獻(xiàn)信息共享轉(zhuǎn)換器107用二分查找法,在共享內(nèi)存604中很快便找到一個(gè)相應(yīng)的文獻(xiàn),該文獻(xiàn)的起始位置是998,終止位置是1100,文獻(xiàn)號(hào)是21,刪除標(biāo)志為0表示未刪除。文獻(xiàn)信息共享轉(zhuǎn)換器107將匹配位置1001所對(duì)應(yīng)文獻(xiàn)的文獻(xiàn)號(hào)21存放在文獻(xiàn)信息608中第1個(gè),完成了一個(gè)將匹配位置轉(zhuǎn)換成相應(yīng)的文獻(xiàn)號(hào)的過(guò)程。在處理位置信息606中匹配位置值3001時(shí),文獻(xiàn)信息共享轉(zhuǎn)換器107經(jīng)查找、比較,確定匹配位置值3001在一個(gè)起始位置是2890,終止位置是3005,文獻(xiàn)號(hào)是41的文獻(xiàn)中。再檢查這個(gè)文獻(xiàn)的刪除標(biāo)志是1,表示這個(gè)文獻(xiàn)已被刪除,文獻(xiàn)信息共享轉(zhuǎn)換器107返回-1,表示匹配位置3001沒(méi)有對(duì)應(yīng)的文獻(xiàn)。文獻(xiàn)信息共享轉(zhuǎn)換器107對(duì)位置信息606中保存的其它匹配位置的轉(zhuǎn)換處理與上述的處理步驟完全相同。
4.文獻(xiàn)信息共享轉(zhuǎn)換器107將位置信息606中所有由檢索詞位置轉(zhuǎn)換得到的文獻(xiàn)號(hào)存放在文獻(xiàn)信息608中。文獻(xiàn)信息608中文獻(xiàn)號(hào)的存放順序與位置信息606中檢索詞匹配位置的存放順序是一一對(duì)應(yīng)的。
權(quán)利要求
1.一種建立文字信息的索引的方法,其特征在于包括下述步驟在作為檢索對(duì)象的一組文獻(xiàn)中,按照所有文獻(xiàn)中所有字符的順序確定每個(gè)字符在該組文獻(xiàn)中的位置;將同一字符的位置數(shù)據(jù)按先后順序存儲(chǔ)在對(duì)應(yīng)于該字符的一個(gè)或多個(gè)數(shù)據(jù)庫(kù)塊,并且獲得每個(gè)數(shù)據(jù)庫(kù)塊的中存儲(chǔ)的最大位置和最小位置;將每個(gè)數(shù)據(jù)庫(kù)塊分為多個(gè)小塊,每個(gè)小塊包括多個(gè)字節(jié)的存儲(chǔ)空間,并且獲得每個(gè)小塊中存儲(chǔ)的最小位置。
2.根據(jù)權(quán)利要求1的方法,其特征在于對(duì)于同一字符的所有位置獲得每?jī)蓚€(gè)前后位置之間的差分序列,作為位置數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)塊中。
3.根據(jù)權(quán)利要求2的方法,其特征在于所述差分序列是利用一種差分算法計(jì)算,其中所述差分算法是按照以下步驟進(jìn)行將一個(gè)字符本次的在該組文獻(xiàn)中的位置與其前一次在該組文獻(xiàn)中的位置的差值換算為127進(jìn)制數(shù),該127進(jìn)制數(shù)的每一位數(shù)以一個(gè)8位二進(jìn)制字節(jié)存儲(chǔ),從而每一位數(shù)的字節(jié)的最高位都是0,將該127進(jìn)制數(shù)中除個(gè)位數(shù)的每一位數(shù)的字節(jié)的最高位設(shè)置為1,以區(qū)分該字符的各個(gè)差分序列,從而得到對(duì)應(yīng)于該字符所述本次位置的差分序列。
4.根據(jù)權(quán)利要求1的方法,其特征在于在為該組文獻(xiàn)中的一個(gè)字符建立索引時(shí),如果該字符的當(dāng)前小塊中的剩余字節(jié)放不下一個(gè)新的差分序列時(shí),使用0x00填充每個(gè)所述剩余字節(jié),然后使用一個(gè)新小塊,把該字符的當(dāng)前在該組文獻(xiàn)中的位置作為該新小塊的最小位置存儲(chǔ)在該新小塊的開始的幾個(gè)字節(jié)中。
5.一種存儲(chǔ)媒體,存儲(chǔ)有執(zhí)行以下步驟的程序在作為檢索對(duì)象的一組文獻(xiàn)中,按照所有文獻(xiàn)中所有字符的順序確定每個(gè)字符在該組文獻(xiàn)中的位置;將同一字符的位置數(shù)據(jù)按先后順序存儲(chǔ)在對(duì)應(yīng)于該字符的一個(gè)或多個(gè)數(shù)據(jù)庫(kù)塊,并且獲得每個(gè)數(shù)據(jù)庫(kù)塊的中存儲(chǔ)的最大位置和最小位置;將每個(gè)數(shù)據(jù)庫(kù)塊分為多個(gè)小塊,每個(gè)小塊包括多個(gè)字節(jié)的存儲(chǔ)空間,并且獲得每個(gè)小塊中存儲(chǔ)的最小位置。
6.一種計(jì)算機(jī)程序,由計(jì)算機(jī)執(zhí)行以實(shí)現(xiàn)以下步驟在作為檢索對(duì)象的一組文獻(xiàn)中,按照所有文獻(xiàn)中所有字符的順序確定每個(gè)字符在該組文獻(xiàn)中的位置;將同一字符的位置數(shù)據(jù)按先后順序存儲(chǔ)在對(duì)應(yīng)于該字符的一個(gè)或多個(gè)數(shù)據(jù)庫(kù)塊,并且獲得每個(gè)數(shù)據(jù)庫(kù)塊的中存儲(chǔ)的最大位置和最小位置;將每個(gè)數(shù)據(jù)庫(kù)塊分為多個(gè)小塊,每個(gè)小塊包括多個(gè)字節(jié)的存儲(chǔ)空間,并且獲得每個(gè)小塊中存儲(chǔ)的最小位置。
7.一種基于根據(jù)權(quán)利要求1的方法建立的文字信息索引,對(duì)文字信息進(jìn)行檢索的方法,其特征在于包括以下步驟獲得檢索詞中每個(gè)字符的相對(duì)位置關(guān)系,用于檢索檢索詞中每個(gè)字符的索引;分別判斷該字符的每個(gè)數(shù)據(jù)庫(kù)塊中是否可能存在符合上述相對(duì)位置關(guān)系的位置;在可能存在符合上述相對(duì)位置關(guān)系的位置的數(shù)據(jù)庫(kù)塊中,分別判斷其中每個(gè)小塊是否可能存在符合上述相對(duì)位置關(guān)系的位置;在可能存在符合上述相對(duì)位置關(guān)系的位置的小塊中,判斷每個(gè)位置是否符合上述相對(duì)位置關(guān)系。
8.根據(jù)權(quán)利要求7的方法,其特征在于根據(jù)數(shù)據(jù)庫(kù)塊的最大位置和最小位置判斷數(shù)據(jù)庫(kù)塊中是否可能存在符合上述相對(duì)位置關(guān)系的位置。
9.根據(jù)權(quán)利要求7的方法,其特征在于把兩個(gè)連續(xù)的小塊中后面的小塊的最小位置看作前面小塊的最大位置,對(duì)于數(shù)據(jù)庫(kù)塊中的最后一個(gè)小塊里的字符最大位置可用它所在的數(shù)據(jù)庫(kù)塊的最大位置來(lái)確定,根據(jù)小塊的最大位置和最小位置判斷小塊中是否可能存在符合上述相對(duì)位置關(guān)系的位置。
10.根據(jù)權(quán)利要求7的方法,其特征在于所述檢索詞中字符相對(duì)位置關(guān)系表示為如下方式以檢索詞中的第一個(gè)字符為起始點(diǎn),分配各個(gè)字符的位移量依次為0,-1,-2,-3…-(N-1),其中N為檢索詞中的字符數(shù)。
11.一種存儲(chǔ)媒體,存儲(chǔ)有執(zhí)行以下步驟的程序獲得檢索詞中每個(gè)字符的相對(duì)位置關(guān)系,用于檢索檢索詞中每個(gè)字符的索引;分別判斷該字符的每個(gè)數(shù)據(jù)庫(kù)塊中是否可能存在符合上述相對(duì)位置關(guān)系的位置;在可能存在符合上述相對(duì)位置關(guān)系的位置的數(shù)據(jù)庫(kù)塊中,分別判斷其中每個(gè)小塊是否可能存在符合上述相對(duì)位置關(guān)系的位置;在可能存在符合上述相對(duì)位置關(guān)系的位置的小塊中,判斷每個(gè)位置是否符合上述相對(duì)位置關(guān)系。
12.一種計(jì)算機(jī)程序,由計(jì)算機(jī)執(zhí)行以實(shí)現(xiàn)以下步驟獲得檢索詞中每個(gè)字符的相對(duì)位置關(guān)系,用于檢索檢索詞中每個(gè)字符的索引;分別判斷該字符的每個(gè)數(shù)據(jù)庫(kù)塊中是否可能存在符合上述相對(duì)位置關(guān)系的位置;在可能存在符合上述相對(duì)位置關(guān)系的位置的數(shù)據(jù)庫(kù)塊中,分別判斷其中每個(gè)小塊是否可能存在符合上述相對(duì)位置關(guān)系的位置;在可能存在符合上述相對(duì)位置關(guān)系的位置的小塊中,判斷每個(gè)位置是否符合上述相對(duì)位置關(guān)系。
13.一種建立文字信息索引和進(jìn)行檢索的方法,其特征在于建立文獻(xiàn)信息共享轉(zhuǎn)換器,該文獻(xiàn)信息共享轉(zhuǎn)換器開辟一塊共享內(nèi)存,把數(shù)據(jù)庫(kù)中存儲(chǔ)的作為檢索對(duì)象的一組文獻(xiàn)的文獻(xiàn)信息的一部分字段緩存在共享內(nèi)存中備份;在進(jìn)行全文檢索時(shí),直接從共享內(nèi)存中得到有關(guān)的文獻(xiàn)信息。
14.根據(jù)權(quán)利要求13的方法,其特征在于所述緩存的文獻(xiàn)信息包括至少一個(gè)表示文獻(xiàn)編號(hào)的字段和一個(gè)表示文獻(xiàn)范圍的字段。
15.根據(jù)權(quán)利要求13的方法,其特征在于在進(jìn)行全文檢索時(shí),對(duì)于檢索得到的檢索詞的一個(gè)或多個(gè)位置,通過(guò)二分查找算法,根據(jù)每個(gè)文獻(xiàn)的位置范圍,從共享內(nèi)存中得到檢索詞所在的文獻(xiàn)。
16.根據(jù)權(quán)利要求13的方法,其特征在于在生成文獻(xiàn)索引時(shí),即時(shí)更新共享內(nèi)存中的文獻(xiàn)信息。
17.根據(jù)權(quán)利要求13的方法,其特征在于在執(zhí)行文獻(xiàn)登錄或刪除處理時(shí),文獻(xiàn)信息共享轉(zhuǎn)換器提供相應(yīng)的接口用于實(shí)時(shí)更新共享內(nèi)存中有關(guān)的文獻(xiàn)信息。
18.一種存儲(chǔ)媒體,存儲(chǔ)有執(zhí)行以下步驟的程序開辟一塊共享內(nèi)存,把數(shù)據(jù)庫(kù)中存儲(chǔ)的作為檢索對(duì)象的一組文獻(xiàn)的文獻(xiàn)信息在共享內(nèi)存中備份;在進(jìn)行全文檢索時(shí),直接從共享內(nèi)存中得到有關(guān)文獻(xiàn)的信息。
19.一種計(jì)算機(jī)程序,由計(jì)算機(jī)執(zhí)行以實(shí)現(xiàn)以下步驟開辟一塊共享內(nèi)存,把數(shù)據(jù)庫(kù)中存儲(chǔ)的作為檢索對(duì)象的一組文獻(xiàn)的文獻(xiàn)信息在共享內(nèi)存中備份;在進(jìn)行全文檢索時(shí),直接從共享內(nèi)存中得到有關(guān)文獻(xiàn)的信息。
20.一種建立文字信息索引和進(jìn)行檢索的系統(tǒng),其特征在于包括索引生成裝置,該裝置按照作為檢索對(duì)象的一組文獻(xiàn)中所有字符的順序確定每個(gè)字符在該組文獻(xiàn)中的位置;將同一字符的位置數(shù)據(jù)按先后順序存儲(chǔ)在對(duì)應(yīng)于該字符的一個(gè)或多個(gè)數(shù)據(jù)庫(kù)塊,并且獲得每個(gè)數(shù)據(jù)庫(kù)塊的中存儲(chǔ)的最大位置和最小位置;將每個(gè)數(shù)據(jù)庫(kù)塊分為多個(gè)小塊,每個(gè)小塊包括多個(gè)字節(jié)的存儲(chǔ)空間,并且獲得每個(gè)小塊中存儲(chǔ)的最小位置;全文檢索裝置,該裝置獲得檢索詞中每個(gè)字符的相對(duì)位置關(guān)系,用于檢索檢索詞中每個(gè)字符的索引;分別判斷該字符的每個(gè)數(shù)據(jù)庫(kù)塊中是否可能存在符合上述相對(duì)位置關(guān)系的位置;在可能存在符合上述相對(duì)位置關(guān)系的位置的數(shù)據(jù)庫(kù)塊中,分別判斷其中每個(gè)小塊是否可能存在符合上述相對(duì)位置關(guān)系的位置;在可能存在符合上述相對(duì)位置關(guān)系的位置的小塊中,判斷每個(gè)位置是否符合上述相對(duì)位置關(guān)系;存儲(chǔ)裝置,用于存儲(chǔ)文獻(xiàn),以及文獻(xiàn)索引信息。
21.一種建立文字信息索引和進(jìn)行檢索的系統(tǒng),其特征在于包括一個(gè)文獻(xiàn)信息共享轉(zhuǎn)換裝置,該文獻(xiàn)信息共享轉(zhuǎn)換裝置開辟一塊共享內(nèi)存,把數(shù)據(jù)庫(kù)中存儲(chǔ)的一組文獻(xiàn)的文獻(xiàn)信息在共享內(nèi)存中備份;在進(jìn)行全文檢索時(shí),直接從共享內(nèi)存中得到有關(guān)文獻(xiàn)的信息。
全文摘要
一種建立文字信息索引和進(jìn)行檢索的方法和系統(tǒng),其中按照作為檢索對(duì)象的一組文獻(xiàn)中所有字符的順序確定每個(gè)字符在該組文獻(xiàn)中的位置;將同一字符的位置數(shù)據(jù)按先后順序存儲(chǔ)在對(duì)應(yīng)于該字符的一個(gè)或多個(gè)數(shù)據(jù)庫(kù)塊;將每個(gè)數(shù)據(jù)庫(kù)塊分為多個(gè)小塊,每個(gè)小塊包括多個(gè)字節(jié)的存儲(chǔ)空間。基于這種索引結(jié)構(gòu)進(jìn)行檢索。對(duì)于檢索到的檢索詞位置,采用文獻(xiàn)信息共享轉(zhuǎn)換器確定檢索詞所在的文獻(xiàn)。
文檔編號(hào)G06F17/30GK1378157SQ01111999
公開日2002年11月6日 申請(qǐng)日期2001年4月2日 優(yōu)先權(quán)日2001年4月2日
發(fā)明者秦勇, 李紅 申請(qǐng)人:佳能株式會(huì)社