Xml數據庫的檢索方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種XML數據庫的檢索方法及系統(tǒng),該方法包括:在所述XML數據庫中創(chuàng)建全文索引表,所述全文索引表使用關鍵詞作為鍵值,所述鍵值以數據行位置標識TID作為指針,指向所述XML數據庫的節(jié)點表中的含有所述關鍵詞的節(jié)點數據行;在對所述XML數據庫進行全文檢索時,將用戶輸入的查詢條件中的關鍵詞依次匹配所述全文索引表,得到多個TID集合;根據所述關鍵詞在查詢條件中的邏輯關系對所述多個TID集合進行邏輯運算,得到符合全文檢索條件的TID集合;輸出所述符合全文檢索條件的TID集合對應的數據行。本發(fā)明可以實現(xiàn)對XML數據庫的全文檢索,提高檢索效率。
【專利說明】XI數據庫的檢索方法及系統(tǒng)
【技術領域】
[0001]本發(fā)明涉及數據庫【技術領域】,具體而言,涉及一種XII數據庫的檢索方法及系統(tǒng)。
【背景技術】
[0002]XII數據庫管理系統(tǒng)是近年來快速發(fā)展的一種新型的數據庫管理系統(tǒng)(0818),它存儲和檢索的數據是XIII文檔,并且可以更新XIII文檔。由于存儲和檢索的是XII文檔,所以X祖1)813常常被用作文檔數據庫,因此全文檢索就是X祖1)813的一個非常核心的功能。
[0003]乂見數據的檢索和更新語言是由13(:制定的標準的糾1161~7和雙!1161~7邱(1社6。130同時制定了父如61~7標準,作為X祖1)813的標準的全文檢索語言。父如61~7系列語言基于序列數據模型001),即X如61*7中任意數據都是一個序列,序列由若干個有序的項目組成;一個項目是一個原子值或者一個乂01節(jié)點,一個乂01節(jié)點是XII文檔的7種節(jié)點之一?;谶@樣的數據模型,最自然和高效的XII數據存儲方案就是把XII文檔存儲為節(jié)點。
[0004]在X祖1)813中存儲X見文檔的實體稱為容器,一個容器中存儲任意多個X見文檔的數據內容,而這個容器由若干個數據表支撐,分別存儲這些XII文檔的各個方面的數據和結構信息,包括節(jié)點數據,節(jié)點間關系,路徑數據,各種索引,各種統(tǒng)計信息等。數據表存儲的單位是數據行,一個數據表中含有若干個數據行,并且可以通過索引快速查找到特定的數據行。
[0005]XII文檔內容被作為節(jié)點數據存儲在一個節(jié)點表中,在乂01的7種節(jié)點中,將屬性節(jié)點、名字空間節(jié)點、文本節(jié)點、注釋節(jié)點和處理指令節(jié)點都存放在它們的父節(jié)點(必然是元素節(jié)點)中,因此節(jié)點表中只存儲元素節(jié)點和文檔節(jié)點。文檔節(jié)點存儲一個XII文檔的元數據信息,而文檔的內容則存儲在這個文檔的所有元素節(jié)點中。
[0006]因為XII數據庫的數據量非常龐大,因此需要一個高效的全文檢索方法來對XII數據庫進行全文檢索。
【發(fā)明內容】
[0007]本發(fā)明實施例提供一種XII數據庫的檢索方法及系統(tǒng),以實現(xiàn)對XII數據庫的全文檢索,提高檢索效率。
[0008]為此,本發(fā)明實施例提供如下技術方案:
[0009]一種數據庫的檢索方法,包括:
[0010]在XII數據庫中創(chuàng)建全文索引表,所述全文索引表使用關鍵詞作為鍵值,所述鍵值以數據行位置標識110作為指針,指向所述XII數據庫的節(jié)點表中的含有所述關鍵詞的節(jié)點數據行;
[0011]在對所述XII數據庫進行全文檢索時,將用戶輸入的查詢條件中的關鍵詞依次匹配所述全文索引表,得到多個110集合;
[0012]根據所述關鍵詞在查詢條件中的邏輯關系對所述多個110集合進行邏輯運算,得到符合全文檢索條件的110集合;
[0013]輸出所述符合全文檢索條件的110集合對應的數據行。
[0014]優(yōu)選地,所述110集合以位圖的方式存儲。
[0015]優(yōu)選地,在所述週I數據庫中創(chuàng)建全文索引表包括:
[0016]將要存儲的XII文檔的文本節(jié)點分詞,得到所述關鍵詞的集合;
[0017]將所述關鍵詞作為新的索引插入到所述全文索引表中來指向所述XII文檔的節(jié)點數據行。
[0018]優(yōu)選地,在所述XIII數據庫中創(chuàng)建全文索引表還包括:
[0019]在將所述關鍵詞作為新的索引插入到所述全文索引表中來指向所述XII文檔的節(jié)點數據行之前,利用所述XII數據庫中的停用詞元數據表對所述集合進行過濾。
[0020]優(yōu)選地,所述方法還包括:
[0021]對所述查詢條件進行分詞,得到分詞結果;
[0022]從所述分詞結果中提取關鍵詞。
[0023]優(yōu)選地,所述從所述分詞結果中提取關鍵詞包括:
[0024]對所述分詞結果中的單詞用所述XII數據庫中的停用詞元數據表進行過濾;
[0025]對過濾后的分詞結果,利用所述XII數據庫中的詞匯關系元數據表發(fā)展所述分詞結果中的關鍵詞的關系詞,和/或利用所述XII數據庫中的詞根化元數據表發(fā)展所述分詞結果中的關鍵詞的同詞根的詞。
[0026]一種乂1\11數據庫的檢索系統(tǒng),包括:
[0027]索引表創(chuàng)建模塊,用于在XII數據庫中創(chuàng)建全文索引表,所述全文索引表使用關鍵詞作為鍵值,所述鍵值以數據行位置標識110作為指針,指向所述XII數據庫的節(jié)點表中的含有所述關鍵詞的節(jié)點數據行;
[0028]匹配模塊,用于在對所述XII數據庫進行全文檢索時,將用戶輸入的查詢條件中的關鍵詞依次匹配所述全文索引表,得到多個110集合;
[0029]邏輯運算模塊,用于根據所述關鍵詞在查詢條件中的邏輯關系對所述多個110集合進行邏輯運算,得到符合全文檢索條件的110集合;
[0030]檢索結果輸出模塊,用于輸出所述符合全文檢索條件的110集合對應的數據行。[0031〕 優(yōu)選地,索引表創(chuàng)建模塊包括:
[0032]分詞單元,用于將要存儲的X見文檔的文本節(jié)點分詞,得到所述關鍵詞的集合;
[0033]插入單元,用于將所述關鍵詞作為新的索引插入到所述全文索引表中來指向所述XII文檔的節(jié)點數據行。
[0034]優(yōu)選地,所述索引表創(chuàng)建模塊還包括:
[0035]過濾單元,用于在將所述關鍵詞作為新的索引插入到所述全文索引表中來指向所述XII文檔的節(jié)點數據行之前,利用所述XII數據庫中的停用詞元數據表對所述集合進行過濾。
[0036]優(yōu)選地,所述系統(tǒng)還包括:
[0037]查詢條件分解模塊,用于對所述查詢條件進行分詞,得到分詞結果;
[0038]關鍵詞提取模塊,用于從所述分詞結果中提取關鍵詞。
[0039]優(yōu)選地,所述關鍵詞提取模塊,具體用于對所述分詞結果中的單詞用所述XII數據庫中的停用詞元數據表進行過濾;對過濾后的分詞結果,利用所述XII數據庫中的詞匯關系元數據表發(fā)展所述分詞結果中的關鍵詞的關系詞,和/或利用所述XII數據庫中的詞根化元數據表發(fā)展所述分詞結果中的關鍵詞的同詞根的詞。
[0040]本發(fā)明實施例提供的XII數據庫的檢索方法及系統(tǒng),在所述XII數據庫中創(chuàng)建全文索引表,全文索引表使用關鍵詞作為鍵值,指向節(jié)點表中的含有這個關鍵詞的一個節(jié)點數據行。使用這種文本索引,可以快速地完成關鍵詞匹配測試,從而迅速得出符合全文檢索條件的節(jié)點數據行,實現(xiàn)高效的全文檢索。
【專利附圖】
【附圖說明】
[0041]圖1是本發(fā)明實施例XII數據庫的檢索方法的流程圖;
[0042]圖2是本發(fā)明實施例XII數據庫的檢索系統(tǒng)的一種結構示意圖;
[0043]圖3是本發(fā)明實施例XII數據庫的檢索系統(tǒng)的另一種結構示意圖。
【具體實施方式】
[0044]下面將參考附圖并結合實施例,來詳細說明本發(fā)明。
[0045]在存儲一個X見文檔時,文檔被X祖1)813的查詢引擎送入“X (31,16八?I
X見)模式的X見文檔解析器中,該解析器將XII文檔數據作為事件來通知給X見0813的執(zhí)行引擎。執(zhí)行引擎將XII文檔數據中的文本節(jié)點送入分詞器中,得到的就是一個關鍵詞的集合。這些關鍵詞被插入到全文索引中來指向這個節(jié)點數據行。
[0046]“X是一個用于處理X見事件驅動的“推”模型,“X解析器在讀取文檔時激活一系列事件,這些事件被推給事件處理器,然后由事件處理器提供對文檔內容的訪問方法。
[0047]X祖1)813系統(tǒng)定義一個默認的停用詞表31,分詞器產生的單詞中在31中的,不插入到全文索引表中。在全文檢索查詢語句中的全文檢索字符串()也使用該停用詞表進行過濾,過濾后剩余單詞再使用全文索引表來查詢。如果被分詞后的單詞集合被31過濾后為空集,那么不再使用全文索引表而是直接掃描節(jié)點表。使用這個默認的停用詞表可以防止全文索引表被非常常用的單詞,比如英語中的”3,冊,^6, 1??!,0!1,如”等以及漢語中的語氣助詞等急劇膨脹而影響查詢效率----那些單詞在每個文本節(jié)點中都很可能存在。這個停用詞表可以由用戶修改和定制,這樣用戶可以根據自己的應用需求靈活調整。
[0048]基于XII數據庫的上述特點,本發(fā)明提出一種實現(xiàn)高效的全文檢索的文本索引技術。使用這種文本索引,可以快速地完成關鍵詞匹配測試,從而迅速得出符合全文檢索條件的節(jié)點數據行。這種文本索引為節(jié)點表而建立,是節(jié)點表的索引,為了方便描述,將這種文本索引表稱為全文索引表。
[0049]如圖1所示,是本發(fā)明實施例XII數據庫的檢索方法的流程圖,包括以下步驟:
[0050]步驟101,在X祖^數據庫中創(chuàng)建全文索引表,所述全文索引表使用關鍵詞作為鍵值,所述鍵值以數據行位置標識110作為指針,指向所述XII數據庫的節(jié)點表中的含有所述關鍵詞的節(jié)點數據行。
[0051]全文索引表使用關鍵詞作為鍵值,指向節(jié)點表中的含有這個關鍵詞的一個節(jié)點數據行。由于任何一個單詞都很可能在多個節(jié)點中出現(xiàn),所以全文索引表是允許重復鍵值的,比如“這個詞為鍵值的索引有很多條,分別指向節(jié)點表中的多個節(jié)點數據行;反過來任何一個節(jié)點數據行也通常有多個全文索弓I行指向它,因為其中有多個關鍵詞。
[0052]與任何其他索引一樣,本發(fā)明實施例中的全文索引表指向節(jié)點表的“指針”稱為數據行標識(110),它含有節(jié)點表數據行的地址,使用它即可得到節(jié)點表中對應的數據行。當進行全文檢索時,將用戶查詢條件中的關鍵詞收集起來,然后依次查找全文索引表,得到若干個110構成的位圖,然后根據這些關鍵詞在查詢條件中的邏輯關系對這些位圖進行與/或/非操作,即可得到最終符合全部的全文檢索條件的110集合,從而得出查詢結果。比如查找同時含有”£1卯16”和的節(jié)點,前者得到110位圖是“000100110100”后者是得到的丁10位圖是“010100010010”,對這兩個位圖做與操作,最終得到結果是“000100010000”,從這個位圖看到第4位和第8位是1,所以可以得知110是4和8的兩行是最終結果。
[0053]步驟102,在對所述XII數據庫進行全文檢索時,將用戶輸入的查詢條件中的關鍵詞依次匹配所述全文索引表,得到多個110集合。
[0054]步驟103,根據所述關鍵詞在查詢條件中的邏輯關系對所述多個110集合進行邏輯運算,得到符合全文檢索條件的110集合;
[0055]步驟104,輸出所述符合全文檢索條件的110集合對應的數據行。
[0056]首先在創(chuàng)建一個容器時,創(chuàng)建一個全文索引表作為該容器的節(jié)點表的索引表。在存儲一個XII文檔時,^110818的查詢引擎將XII文檔送入執(zhí)行引擎的5八X模式的XII解析器,該解析器會以事件通知的形式讓執(zhí)行引擎獲得XIII文檔的節(jié)點數據。
[0057]在文本節(jié)點所屬的元素節(jié)點結束事件處理函數中,執(zhí)行引擎存儲元素節(jié)點數據到節(jié)點表,然后存儲引擎的索引維護機制會調用全文索引表的回調函數(簡寫為叩,叩代表的回調函數用于產生索引表鍵值)來創(chuàng)建索引表鍵值?;卣{函數??將這個元素節(jié)點的所有文本子節(jié)點的字符串依次送入分詞器,分詞器為每個字符串返回若干個單詞,所有這些單詞構成一個集合30。30被默認的停用詞表過濾得到最終的有效單詞集合3。3中的單詞被叩全部返回給存儲引擎的索引構建邏輯。然后索引構建邏輯會將所有這些鍵值都插入到全文索引表中,他們都指向同一個節(jié)點數據行。
[0058]當一個節(jié)點數據內容被更新時,并不去除那些原來指向這個節(jié)點數據行的全文索弓丨。這樣當得到一個節(jié)點時,還需要進一步對其文本節(jié)點數據做分詞,并且查找目標單詞。即便如此,使用了全文索引仍然可以加速全文檢索,因為可以避免從一個容器的節(jié)點表的大量的節(jié)點中查找目標單詞。
[0059]做X如60查詢時將查詢條件字符串做分詞并使用默認的停用詞表過濾后,得到查詢單詞集合33。用集合33中的單詞依次查詢全文索引表得到若干個對應的110集合。根據查詢條件的不同,33中的單詞之間的邏輯關系就是這些110集合之間的運算關系。對這些位圖執(zhí)行邏輯運算得到最終的110集合。
[0060]比如,33=( “英語”,“教師”丨,這兩個單詞間的關系是與,也就是要查詢同時含有“英語”和“教師”兩個單詞的XII元素節(jié)點。使用“英語”和“教師”兩詞分別查詢全文索引表,得到兩個110集合110341和110342。110集合以位圖的方式存儲,而位圖可以方便地做邏輯位運算,即與或非運算。所以對110341和110342做按位與操作,即可得出這兩個集合的交集,也就是同時含有這兩個單詞的110的集合11036切。11086^0中含有最終結果,從中取出每一個110并且從節(jié)點表中用此110獲取節(jié)點數據行,就找到了符合全文檢索條件的數據。
[0061]本發(fā)明實施例的XI[數據庫的檢索方法可以適用于乂01161~7 ?11111:6X1:的查詢方式和本)(10)813目前的工作方式,可以高效地實現(xiàn)全文檢索功能。特別是在存儲海量XII數據時,以及全文檢索條件有大量邏輯運算組合時,使用本索引方案的優(yōu)勢更接近明顯。
[0062]相應地,本發(fā)明實施例還提供一種XII數據庫的檢索系統(tǒng),如圖2所示,是該系統(tǒng)的一種結構示意圖。
[0063]在該實施例中,所述系統(tǒng)包括:
[0064]索引表創(chuàng)建模塊201,用于在所述)011數據庫中創(chuàng)建全文索引表,所述全文索引表使用關鍵詞作為鍵值,所述鍵值以數據行位置標識110作為指針,指向所述XII數據庫的節(jié)點表中的含有所述關鍵詞的節(jié)點數據行;
[0065]匹配模塊202,用于在對所述XII數據庫進行全文檢索時,將用戶輸入的查詢條件中的關鍵詞依次匹配所述全文索引表,得到多個110集合;
[0066]邏輯運算模塊203,用于根據所述關鍵詞在查詢條件中的邏輯關系對所述多個110集合進行邏輯運算,得到符合全文檢索條件的110集合;
[0067]檢索結果輸出模塊204,用于輸出所述符合全文檢索條件的110集合對應的數據行。
[0068]在本發(fā)明實施例中,索引表創(chuàng)建模塊包括:分詞單元和插入單元(未圖示其中:
[0069]所述分詞單元,用于將要存儲的XII文檔的文本節(jié)點分詞,得到所述關鍵詞的集合;
[0070]所述插入單元,用于將所述關鍵詞作為新的索引插入到所述全文索引表中來指向所述XII文檔的節(jié)點數據行。
[0071]所述索引表創(chuàng)建模塊還可包括:過濾單元(未圖示),用于在將所述關鍵詞作為新的索引插入到所述全文索引表中來指向所述XII文檔的節(jié)點數據行之前,利用所述XII數據庫中的停用詞元數據表對所述集合進行過濾。
[0072]如圖3所示,是本發(fā)明實施例XII數據庫的檢索系統(tǒng)的另一結構示意圖。
[0073]與圖2所示實施例不同的是,在該實施例中,所述系統(tǒng)還包括:
[0074]查詢條件分解模塊301,用于對所述查詢條件進行分詞,得到分詞結果;
[0075]關鍵詞提取模塊302,用于從所述分詞結果中提取關鍵詞。
[0076]在實際應用中,上述關鍵詞提取模塊302具體可以對所述分詞結果中的單詞用所述XII數據庫中的停用詞元數據表進行過濾;對過濾后的分詞結果,利用所述XII數據庫中的詞匯關系元數據表發(fā)展所述分詞結果中的關鍵詞的關系詞,和/或利用所述XII數據庫中的詞根化元數據表發(fā)展所述分詞結果中的關鍵詞的同詞根的詞。
[0077]本發(fā)明實施例的XI[數據庫的檢索系統(tǒng)可以適用于乂01161~7 ?11111:6X1:的查詢方式和本)(10)813目前的工作方式,可以高效地實現(xiàn)全文檢索功能。特別是在存儲海量XII數據時,以及全文檢索條件有大量邏輯運算組合時,使用本索引方案的優(yōu)勢更接近明顯。
[0078]本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于系統(tǒng)實施例而言,由于其基本相似于方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。
[0079]顯然,本領域的技術人員應該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網絡上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結合。
[0080]以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技術人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。
【權利要求】
1.一種XML數據庫的檢索方法,其特征在于,包括: 在XML數據庫中創(chuàng)建全文索引表,所述全文索引表使用關鍵詞作為鍵值,所述鍵值以數據行位置標識TID作為指針,指向所述XML數據庫的節(jié)點表中的含有所述關鍵詞的節(jié)點數據行; 在對所述XML數據庫進行全文檢索時,將用戶輸入的查詢條件中的關鍵詞依次匹配所述全文索引表,得到多個TID集合; 根據所述關鍵詞在查詢條件中的邏輯關系對所述多個TID集合進行邏輯運算,得到符合全文檢索條件的TID集合; 輸出所述符合全文檢索條件的TID集合對應的數據行。
2.根據權利要求1所述的方法,其特征在于,所述TID集合以位圖的方式存儲。
3.根據權利要求1所述的方法,其特征在于,在所述XML數據庫中創(chuàng)建全文索引表包括: 將要存儲的XML文檔的文本節(jié)點分詞,得到所述關鍵詞的集合; 將所述關鍵詞作為新的索引插入到所述全文索引表中來指向所述XML文檔的節(jié)點數據行。
4.根據權利要求3所述的方法,其特征在于,在所述XML數據庫中創(chuàng)建全文索引表還包括: 在將所述關鍵詞作為新的索引插入到所述全文索引表中來指向所述XML文檔的節(jié)點數據行之前,利用所述XML數據庫中的停用詞元數據表對所述集合進行過濾。
5.根據權利要求1所述的方法,其特征在于,所述方法還包括: 對所述查詢條件進行分詞,得到分詞結果; 從所述分詞結果中提取關鍵詞。
6.根據權利要求5所述的方法,其特征在于,所述從所述分詞結果中提取關鍵詞包括: 對所述分詞結果中的單詞用所述XML數據庫中的停用詞元數據表進行過濾; 對過濾后的分詞結果,利用所述XML數據庫中的詞匯關系元數據表發(fā)展所述分詞結果中的關鍵詞的關系詞,和/或利用所述XML數據庫中的詞根化元數據表發(fā)展所述分詞結果中的關鍵詞的同詞根的詞。
7.—種XML數據庫的檢索系統(tǒng),其特征在于,包括: 索引表創(chuàng)建模塊,用于在XML數據庫中創(chuàng)建全文索引表,所述全文索引表使用關鍵詞作為鍵值,所述鍵值以數據行位置標識TID作為指針,指向所述XML數據庫的節(jié)點表中的含有所述關鍵詞的節(jié)點數據行; 匹配模塊,用于在對所述XML數據庫進行全文檢索時,將用戶輸入的查詢條件中的關鍵詞依次匹配所述全文索引表,得到多個TID集合; 邏輯運算模塊,用于根據所述關鍵詞在查詢條件中的邏輯關系對所述多個TID集合進行邏輯運算,得到符合全文檢索條件的TID集合; 檢索結果輸出模塊,用于輸出所述符合全文檢索條件的TID集合對應的數據行。
8.根據權利要求7所述的系統(tǒng),其特征在于,索引表創(chuàng)建模塊包括: 分詞單元,用于將要存儲的XML文檔的文本節(jié)點分詞,得到所述關鍵詞的集合; 插入單元,用于將所述關鍵詞作為新的索引插入到所述全文索引表中來指向所述XML文檔的節(jié)點數據行。
9.根據權利要求8所述的系統(tǒng),其特征在于,所述索引表創(chuàng)建模塊還包括: 過濾單元,用于在將所述關鍵詞作為新的索引插入到所述全文索引表中來指向所述XML文檔的節(jié)點數據行之前,利用所述XML數據庫中的停用詞元數據表對所述集合進行過濾。
10.根據權利要求7所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括: 查詢條件分解模塊,用于對所述查詢條件進行分詞,得到分詞結果; 關鍵詞提取模塊,用于從所述分詞結果中提取關鍵詞。
11.根據權利要求10所述的系統(tǒng),其特征在于, 所述關鍵詞提取模塊,具體用于對所述分詞結果中的單詞用所述XML數據庫中的停用詞元數據表進行過濾;對過濾后的分詞結果,利用所述XML數據庫中的詞匯關系元數據表發(fā)展所述分詞結果中的關鍵詞的關系詞,和/或利用所述XML數據庫中的詞根化元數據表發(fā)展所述分詞結果中的關鍵詞的同詞根的詞。
【文檔編號】G06F17/30GK104346331SQ201310311497
【公開日】2015年2月11日 申請日期:2013年7月23日 優(yōu)先權日:2013年7月23日
【發(fā)明者】趙偉, 李 浩, 鄭程光, 孫偉豐, 羅正海, 陳麗娟 申請人:北大方正集團有限公司, 方正信息產業(yè)控股有限公司, 上海方正數字出版技術有限公司