著录项信息
专利名称 | 利用索引来搜索结构化文档的系统和方法 |
申请号 | CN200810095185.3 | 申请日期 | 2008-03-20 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2008-09-24 | 公开/公告号 | CN101271474 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 株式会社东芝;东芝解决方案株式会社 | 申请人地址 | 日本东京都
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 株式会社东芝,东芝解决方案株式会社 | 当前权利人 | 株式会社东芝,东芝解决方案株式会社 |
发明人 | 酒井美由纪;松井浩二;中西基起 |
代理机构 | 北京市中咨律师事务所 | 代理人 | 杨晓光;于静 |
摘要
一种结构化文档搜索系统(50)包括一索引存储单元(58)和一搜索单元(53)。所述索引存储单元(58)存储被对应附加给节点的索引,所述节点包含在数据库(42)中存储的结构化文档中。所述索引包括关于被对应附加所述索引的节点的节点信息项以及关于相关节点的位置信息项。所述节点信息项包括关于被对应附加所述索引的节点的位置信息项。当由客户作出的搜索请求中指定的搜索条件包括覆盖所述节点的值的值搜索条件并且是一指定对为所述节点所共有的相关节点进行搜索的特定搜索条件时,所述搜索单元(53)在所述索引存储单元(58)中搜索符合所述值搜索条件的索引并且获取关于为搜索到的索引所共有的相关节点的位置信息项。
1.一种结构化文档搜索系统,其特征在于包括:
索引存储单元,其存储被对应附加给节点的索引,所述节点包含在存储于数据库的结构化文档中,所述索引包含关于被对应附加所述索引的节点的节点信息项和关于相关节点的位置信息项,所述节点信息项包括关于被对应附加所述索引的节点的位置信息项和所述节点的值,所述相关节点是在包括被对应附加所述索引的节点的结构化文档的树形结构上与所述被对应附加所述索引的节点具有特定关系的预先指定类型的节点;以及搜索单元,其被配置为基于来自客户的搜索请求中指定的搜索条件在所述索引存储单元中搜索索引,当所述搜索条件包括覆盖多个节点的值的值搜索条件并且所述搜索条件是指定搜索为所述多个节点所共有的相关节点的特定搜索条件时,所述搜索单元被配置为在所述索引存储单元中搜索符合所述值搜索条件的索引,并且被配置为从搜索到的索引中获取关于为所述搜索到的索引所共有的相关节点的位置信息项。
2.根据权利要求1所述的结构化文档搜索系统,其特征在于进一步包括:
存储索引信息的索引信息存储单元,所述索引信息指示被对应附加所述索引的节点的结构和相关节点的类型,其中所述相关节点在包含所述节点的结构化文档的树状结构上与所述节点具有特定关系;
索引管理单元,其被配置为根据来自客户的指定索引的索引请求,将在所述请求中指定的索引信息项添加到所述索引信息存储单元,所述索引请求包括指定节点的信息和指定相关节点的类型的信息,其中所述节点是被设置的索引将被对应附加给的节点,所述相关节点在包括所述节点的结构化文档上与所述节点具有特定关系,而将被添加的所述索引信息项指示被对应附加所述索引的节点的结构和在所述索引请求中指定的相关节点的类型;
以及
文档存储处理单元,其被配置为根据来自所述客户的指定存储结构化文档的文档存储请求来在所述数据库中存储所述请求中指定的结构化文档,
其中,当与包含在由所述文档存储处理单元在所述数据库中存储的结构化文档中的节点有关的索引信息项已经存储在所述索引信息存储单元中时,所述索引管理单元将被对应附加给所述节点的索引添加到所述索引存储单元,被对应附加给所述节点的所述索引包括关于所述节点的节点信息项和关于所述节点的相关节点的位置信息项,所述节点的相关节点的类型由关于所述节点的索引信息项来指示。
3.根据权利要求1所述的结构化文档搜索系统,其特征在于:
被对应附加给数据库中存储的结构化文档中所包含的节点的索引包括值索引和结构索引,所述值索引包括所述节点的节点信息项和关于相关节点的位置信息项,所述结构索引包括指示被对应附加所述结构索引的节点的结构的结构信息项和关于所述节点的位置信息项;
所述值搜索条件包括结构条件;
所述索引存储单元包括存储所述值索引的值索引存储单元和存储所述结构索引的结构索引存储单元;
所述搜索单元包括:
值索引搜索模块,其被配置为当搜索请求中指定的搜索条件是所述特定搜索条件时,在所述值索引存储单元中搜索符合所述指定的搜索条件中包含的值搜索条件的节点的值索引作为候选节点的值索引,所述值索引搜索模块被配置为基于搜索到的值索引来获取相应于所述值搜索条件的第一候选节点列表,所述第一候选节点列表是其值符合所述值搜索条件的候选节点以及所述候选节点的相关节点的列表;
结构索引搜索模块,其被配置为在结构索引存储单元中搜索其结构符合所述值搜索条件中包含的所述结构条件的节点的结构索引作为候选节点的结构索引,所述结构索引搜索模块被配置为基于搜索到的结构索引来获取相应于所述值搜索条件的第二候选节点列表,所述第二候选节点列表是其结构符合所述值搜索条件中包含的所述结构条件的候选节点的列表;以及
搜索结果获取模块,其被配置为从包含在根据所述值搜索条件而获取的所述第一候选节点列表和所述第二候选节点列表中的候选节点的相关节点中,获取为所述第一候选节点列表所共有的相关节点作为搜索结果。
4.根据权利要求3所述的结构化文档搜索系统,其特征在于所述搜索结果获取模块被配置为通过根据包括在第一候选节点列表和第二候选节点列表这两个列表中的候选节点将这两个列表合并,来获取第三候选节点列表,并进一步被配置为获取为所述第三候选节点列表所共有的相关节点作为搜索结果。
5.根据权利要求4所述的结构化文档搜索系统,其特征在于所述搜索结果获取模块被配置为利用候选节点的节点IDs作为关键词来对所述第一候选节点列表和第二候选节点列表执行一AND合并操作,以及还被配置为通过所述AND合并操作来合并所述第一候选节点列表和所述第二候选节点列表。
6.根据权利要求1所述的结构化文档搜索系统,其特征在于:
被对应附加给数据库中存储的结构化文档中所包含的节点的索引包括值索引和结构索引,所述值索引包括所述节点的节点信息项,所述结构索引包括指示被对应附加所述结构索引的节点的结构的结构信息项、关于所述节点的位置信息项和关于相关节点的位置信息项;
所述值搜索条件包括结构条件;
所述索引存储单元包括存储所述值索引的值索引存储单元和存储所述结构索引的结构索引存储单元;
所述搜索单元包括:
值索引搜索模块,其被配置为当搜索请求中指定的搜索条件是所述特定搜索条件时,在所述值索引存储单元中搜索符合所述指定的搜索条件中包含的值搜索条件的节点的值索引作为候选节点的值索引,所述值索引搜索模块被配置为基于搜索到的值索引来获取相应于所述值搜索条件的第一候选节点列表,所述第一候选节点列表是其值符合所述值搜索条件的候选节点的列表;
结构索引搜索模块,其被配置为在结构索引存储单元中搜索其结构符合所述值搜索条件中包含的结构条件的节点的结构索引作为候选节点的结构索引,所述结构索引搜索模块被配置为基于搜索到的结构索引来获取相应于所述值搜索条件的第二候选节点列表,所述第二候选节点列表是其结构符合所述值搜索条件中包含的结构条件的候选节点以及所述候选节点的相关节点的列表,以及
搜索结果获取模块,其被配置为从包含在根据所述值搜索条件而获取的所述第一候选节点列表和所述第二候选节点列表中的候选节点的相关节点中,获取为所述第二候选节点列表所共有的相关节点作为搜索结果。
7.根据权利要求6所述的结构化文档搜索系统,其特征在于所述搜索结果获取模块被配置为通过根据包括在第一候选节点列表和第二候选节点列表这两个列表中的候选节点将这两个列表合并,来获取第三候选节点列表,并进一步被配置为获取为所述第三候选节点列表所共有的相关节点作为搜索结果。
8.根据权利要求7所述的结构化文档搜索系统,其特征在于所述搜索结果获取模块被配置为利用候选节点的节点IDs作为关键词来对所述第一候选节点列表和所述第二候选节点列表执行AND合并操作,以及还被配置为通过所述AND合并操作来合并所述第一候选节点列表和所述第二候选节点列表。
9.根据权利要求6所述的结构化文档搜索系统,其特征在于:
所述结构索引搜索模块被配置为,当包含在所述第一候选节点列表中的候选节点的数目大于或等于预先确定的特定数目时,获取所述第二候选节点列表;
所述搜索单元包括结构化文档搜索模块,其被配置为当包含在所述第一候选节点列表中的候选节点数目小于所述特定数目时开始运作,所述结构化文档搜索模块被配置为在存储于所述数据库中的结构化文档中搜索包含在所述第一候选节点列表中的候选节点,以及被进一步配置为获取其结构符合所述值搜索条件中包含的结构条件的节点和该节点的相关节点的列表作为第三候选节点列表;以及
所述搜索结果获取模块被配置为获取为所述第三候选节点列表所共有的相关节点作为搜索结果。
10.一种利用数据库服务器计算机中的索引来搜索存储于数据库中的结构化文档的方法,其中所述数据库服务器计算机包括索引存储单元,以用于存储被对应附加给节点的索引,所述节点包含在存储于所述数据库中的结构化文档中,所述方法的特征在于包括:
根据来自客户的指定存储结构化文档的结构化文档存储请求,将在所述请求中指定的结构化文档存储于数据库中;
当所述结构化文档被存储在所述数据库中时,把被对应附加给包含在所述结构化文档中的节点的索引添加到所述索引存储单元,添加的索引包括关于被对应附加所述索引的节点的节点信息项和关于相关节点的位置信息项,所述节点信息项包括关于被对应附加所述索引的节点的位置信息项和所述节点的值,所述相关节点是在包括被对应附加所述索引的节点的结构化文档的树形结构上与所述被对应附加索引的节点具有特定关系的预先指定类型的节点;
基于来自所述客户的搜索请求中指定的搜索条件,在所述索引存储单元中搜索索引,当所述搜索条件包括覆盖多个节点的值的值搜索条件并且所述搜索条件是指定搜索为所述多个节点所共有的相关节点的特定搜索条件时,被搜索的索引是符合所述值搜索条件的索引;
基于所述搜索到的索引,搜索关于为所述搜索到的索引所共有的相关节点的位置信息项;以及
向所述客户返回关于搜索到的相关节点的位置信息项作为来自所述客户的搜索请求的搜索结果。
11.根据权利要求10所述的方法,其特征在于:
被对应附加给数据库中存储的结构化文档中所包含的节点的索引包括值索引和结构索引,所述值索引包括所述节点的节点信息项和关于相关节点的位置信息项,所述结构索引包括指示被对应附加所述结构索引的节点的结构的结构信息项和关于所述节点的位置信息项;
所述值搜索条件包括结构条件;
所述索引存储单元包括存储所述值索引的值索引存储单元和存储所述结构索引的结构索引存储单元;
所述搜索索引的步骤包括:
当在所述搜索请求中指定的搜索条件是特定搜索条件时,在所述值索引存储单元中搜索其值符合包含在所述特定搜索条件中的值搜索条件的节点的值索引作为候选节点的值索引,以及
在所述结构索引存储单元中搜索其结构符合所述值搜索条件中包含的结构条件的节点的结构索引作为候选节点的结构索引;以及
所述搜索关于所述相关节点的位置信息项的步骤包括:
基于搜索到的值索引来获取相应于所述值搜索条件的第一候选节点列表,所述第一候选节点列表是其值符合所述值搜索条件的候选节点以及该候选节点的相关节点的列表;
基于搜索到的结构索引来获取相应于所述值搜索条件的第二候选节点列表,所述第二候选节点列表是其结构符合所述值搜索条件中包含的结构条件的候选节点的列表;以及从包含在所述第一候选节点列表和所述第二候选节点列表中的候选节点的相关节点中获取为所述第一候选节点列表所共有的相关节点作为搜索结果。
12.根据权利要求10所述的方法,其特征在于:
被对应附加给数据库中存储的结构化文档中所包含的节点的索引包括值索引和结构索引,所述值索引包括所述节点的节点信息项,所述结构索引包括指示被对应附加所述结构索引的节点的结构的结构信息项、关于所述节点的位置信息项和关于相关节点的位置信息项;
所述值搜索条件包括结构条件;
所述索引存储单元包括存储所述值索引的值索引存储单元和存储所述结构索引的结构索引存储单元;
所述搜索索引的步骤包括:
当在所述搜索请求中指定的搜索条件是特定搜索条件时,在所述值索引存储单元中搜索其值符合包含在所述特定搜索条件中的值搜索条件的节点的值索引作为候选节点的值索引,所述值索引存储单元存储被对应附加给节点的值索引,所述节点包含在所述数据库中存储的结构化文档中;以及
在所述结构索引存储单元中搜索其结构符合所述值搜索条件中包含的结构条件的节点的结构索引作为候选节点的结构索引;以及
所述搜索关于所述相关节点的位置信息项的步骤包括:
基于搜索到的值索引来获取相应于所述值搜索条件的第一候选节点列表,所述第一候选节点列表是其值符合所述值搜索条件的候选节点的列表,
基于搜索到的结构索引来获取相应于所述值搜索条件的第二候选节点列表,所述第二候选节点列表是其结构符合所述值搜索条件中包含的结构条件的候选节点和所述候选节点的相关节点的列表;以及
从包含在所述第一候选节点列表和所述第二候选节点列表中的候选节点的相关节点中获取为所述第二候选节点列表所共有的相关节点作为搜索结果。
利用索引来搜索结构化文档的系统和方法\n技术领域\n[0001] 本发明涉及利用索引对存储在数据库中的结构化文档进行搜索的系统和方法,更特别地,涉及适合如下情况的结构化文档搜索系统和方法,其中根据一搜索条件来指定覆盖多个节点值的值搜索以及对于为所述多个节点所共有的一个相关节点的搜索。\n背景技术\n[0002] 把一具有逻辑结构的文档称为一结构化文档。在一结构化文档中,所述文档的逻辑结构由写在所述文档中的标签指示。利用所述标签表示其逻辑结构的结构化文档适合在计算机上处理。\n[0003] 扩展标记语言(XML)是广泛使用的利用标签来描述数据的手段。XML的特点是利用有意义标签的层次数据和结构的自由扩展。由于应用XML的技术使这些特征很好地使用,被称为XML数据库(XMLDB)的数据库被人们所熟知。所述XML数据库由一称为XML数据库管理系统(XMLDBMS)的数据库管理系统所控制。所述XML数据库提供存储XML文档和搜索一XML文档(在所述XML文档中指定的结构)的功能。\n[0004] 利用XML书写的所述XML文档被认为是结构化文档的代表。一XML文档由构成一树状结构的元素所组成。每个元素也被称为一个节点(或标签节点),由一标签和一内容(或值)组成。所述树状结构从作用为根(根节点)的元素开始。所述单个元素被配置成这样的方式,它们具有父-子关系和兄弟-姐妹关系。\n[0005] 经常使用一标准化搜索语言来搜索XML文档中的节点。XPath和XQuery被认为是典型的查询语言。XPath用于通过指定所述XML文档中元素(或节点)的位置来进行搜索。\n[0006] 在包括一XML数据库管理系统的XML文档搜索系统(或者一结构化文档搜索系统)中,为了加快搜索,索引被对应附加给被认为是值搜索的可能目标的节点(例如,参见日本专利申请KOKAI公开号2006-018584的第0013段)。这样的索引被称为值索引。\n[0007] 附图2示例了树状结构的XML文档的例子。在一存储附图2的所述XML文档的数据库(XML数据库)中,假定搜索一满足标题为“TCP...”的条件的书。在这个例子中,以例如Xpath描述由一客户(一客户终端)作出的查询(下文中,称为第一查询),给出如下:\n[0008] /bib/book[title=”TCP..”]\n[0009] 为了加快基于第一查询(XPath)的搜索,值索引被对应附加给被认为是值搜索的可能目标的标题节点。所述值索引由值(关键词),例如“TCP..”和“Adv..”,以及节点IDs的集合所组成。节点ID是分配给每个节点的唯一数字,其指示存储于所述数据库中的一XML文档中的一逻辑位置(节点位置)。\n[0010] 附图22A到22C示例了值索引的例子。附图22A示例了具有标题名字的值的节点(标题节点)的值索引的例子。附图22B示例了具有最后名字的值的节点(最后节点)的值索引的例子。附图22C示例了具有第一名字的值的节点(第一节点)的值索引的例子。\n这些值索引通常被保存在一值索引表格中。\n[0011] 在基于从客户向XML文档搜索系统的一查询的搜索中,利用一节点(元素)的值作为一关键词进行索引的搜索。如果相应的索引被找到,可以获得相应于所述值的节点ID。\n在所述第一查询(XPath)的例子中,所述XML文档搜索系统可以从被对应附加给所述标题节点的所述值索引中确定存在满足标题为“TCP..”的条件的节点,并且节点ID是3(参见附图22A)。\n[0012] 如上描述的,在搜索中利用索引(值索引)的所述XML文档搜索系统具有下面优点。首先,所述XML文档搜索系统可以确定是否存在符合所述查询条件的节点而不必搜索存储于所述数据库中的所有XML文档(或细查所述XML文档)。如果存在这样的节点,所述XML文档搜索系统可以确定所述节点的位置。这使得所述XML文档搜索系统能够高速执行搜索。\n[0013] 为了加快指定了结构条件的搜索,已知一种抽取存储在所述数据库中的XML文档上的结构信息并且编译一索引的方法。这样的索引被认为是结构索引。所述结构索引包括指示结构的一组路径字符串,例如“/”或“/bib”,以及具有所述结构的节点的节点ID。如果有多个节点符合相同的路径字符串(如,在附图2的例子中的“/bit/book”),所述多个节点ID相应于相同路径字符串。这样的结构索引的数据结构与应用于后面说明的本发明实施例的结构索引相同。因此,如果需要的话参考附图6。\n[0014] 在所述第一查询(XPath)中,所述XML文档搜索系统基于一值索引来发现符合所述值搜索条件的一个节点(节点ID为3的一节点)。不能仅由所述值索引来确定所述节点是否符合在XPath中给定的结构条件(/bib/book/title)。这样,使用所述结构索引,所述XML文档搜索系统检测所述节点是否符合所述结构条件。从附图6的所述结构索引(结构索引表)中可以看出存在符合所述结构条件(/bib/book/title)的节点(即,三个具有表示为“/bib/book/title”的结构的节点)并且所述节点的节点IDs是3,13和26。节点ID是3的所述节点同时满足结构条件和所述值搜索条件。因此,可以确定所述节点ID为3的节点满足所有搜索条件。\n[0015] 如上描述的,在一搜索中使用一值索引和一结构索引的所述XML文档搜索系统具有下面的优点。首先,所述XML文档搜索系统可以确定是否存在符合包含所述结构条件的所述查询条件的节点,而不必搜索存储在所述数据库中的所有XML文档。如果存在这样的节点,所述XML文档搜索系统可以确定所述节点的位置。这使得有可能高速地执行搜索。\n[0016] 然而,在上述传统的技术中,当处理在其中指定了值搜索的多个目标的查询时,这将延迟所述搜索。原因是需要搜索存储在数据库中的所有XML文档(细查所述XML文档)。\n在其中指定了值搜索的多个目标的查询的例子是,在一查询中,由AND操作符“and”指定了作为值搜索的目标的多个节点(标签节点)。当在包括所述AND操作符“and”的条件下搜索多个节点时,这将由于上述原因延迟所述搜索。\n[0017] 下文中,这样的搜索将利用一个例子来进行解释,其中基于下面的第二查询(xPath):\n[0018] /bib/book/author[last=”Stevens”and first=”W.”]\n[0019] 来搜索出满足条件的作者,其中最后节点的值(最后名字)是“Stevens”(last=“Stevens”)并且第一节点的值(第一名字)是“W.”(first=“W.”)。\n[0020] 如上描述的,值索引被对应附加给被认为是搜索的可能目标的节点。所述值索引由例如,“Stevens”或“Buneman”这样的值(关键词)以及一节点ID的集合来构成。在第二查询的例子中,如附图22B和22C中所示的,为(i)最后节点和(ii)第一节点中的每个分配一值索引,使其能够高速搜索满足所述最后名字是“Stevens”(last=“Stevens”)的条件的节点和满足第一名字是“W.”(first=“W.”)的条件的节点。\n[0021] 然而,在所述第二查询中示出的搜索条件是“作者为[A]和[B]”的所述AND条件。\n因此,对于基于所述值索引搜索的最后节点和第一节点,具有相同父节点(作者节点)的节点,即,与相同节点(作者节点)相连接的节点,必须被选择。然而,这样的连接不能从所述值索引来确定。相应地,在传统的技术中,存储在所述数据库中的所有XML文档必须实际地从被搜索的所述最后节点和第一节点中搜索,其引起了所述搜索的延迟。\n[0022] 在传统技术中,即使在使用结构索引的搜索中也会如下面描述的引起这样的延迟。基于第二查询从所述值索引中搜索的所述最后节点的节点IDs,即,满足最后名字是“Stevens”(last=“Stevens”)的值搜索条件的节点的节点IDs是16和29(参见附图22(b))。此外,从所述值索引中搜索的第一节点的节点IDs,即,满足第一名字是“W.”(first=“W.”)的值搜索条件的节点的节点IDs是8,18和23。(参见附图22(c))[0023] 当获得所述最后节点的节点IDs的集合(候选集合)和所述第一节点的节点IDs的集合(候选集合)时,从所述结构索引中确定,例如,包括在所述两个候选集合中的节点IDs是否满足所述结构条件(对于所述最后节点是/bib/book/author/last以及对于所述第一节点是/bib/book/author/first)。在这个例子中,可以看到所有的节点IDs都满足所述结构条件。\n[0024] 接着,对于由所述索引所限定的最后节点和第一节点的所有组合,具有相同父(作者节点)的组合在作者是[A]和[B]的AND条件下必须被选择。在这个例子中,满足AND条件的节点仅仅是在最后名字是“Stevens”(last=“Stevens”)的节点中的其节点ID是16的节点和在第一名字是“W.”(first=“W.”)的节点中的其节点ID是18的节点的组合。\n[0025] 然而,不能从所述值索引和结构索引中确定所述最后节点和第一节点是否具有相同的父节点。相应地,在传统技术中,存储在数据库中的所有XML文档必须实际地被搜索,导致所述搜索的延迟。\n发明内容\n[0026] 本发明的一个目标是,即使在执行在其中指定了值搜索的多个目标的查询时,也不必搜索存储在数据库中的结构化文档,从而加快搜索。\n[0027] 根据本发明的一个方面,提供了一种结构化文档的搜索系统。所述结构化文档搜索系统包括一索引存储单元和一搜索单元。所述索引存储单元存储被对应附加给节点的索引,所述节点包含在存储于数据库中的结构化文档中。所述索引包括关于被对应附加该索引的节点的节点信息项和关于相关节点的位置信息项。所述节点信息项包括关于被对应附加所述索引的节点的位置信息项。所述相关节点是预先指定类型的节点,其在包括被对应附加所述索引的节点的结构化文档的树状结构上相对于所述被对应附加索引的节点具有特定关系。所述搜索单元配置为基于在来自客户的搜索请求中指定的搜索条件来在所述索引存储单元中搜索索引。当所述搜索条件包括覆盖多个节点的值的值搜索条件并且是指定了对于为所述多个节点所共有的一个相关节点的搜索的特定搜索条件时,所述搜索单元在所述索引存储单元中搜索符合所述值搜索条件的索引,并且从所述被搜索的索引中获取关于为所述被搜索的索引所共有的一个相关节点的位置信息项。\n附图说明\n[0028] 包含在说明书中并组成说明书的一部分的附图示例了本发明的实施例,并且与上述给出的概要描述和下面给出的实施例的详细描述一起用于解释本发明的原理。\n[0029] 附图1是示例了根据本发明一实施例的包括结构化文档搜索系统的客户服务器系统的硬件配置的模块图;\n[0030] 附图2示例了附图1中的数据库所存储的XML文档集合的例子;\n[0031] 附图3是主要示例了附图1的结构化文档搜索系统的功能配置的模块图;\n[0032] 附图4示例了附图3中所示的索引表格的数据结构的例子;\n[0033] 附图5示例了附图3中所示的值索引表格的数据结构的例子;\n[0034] 附图6示例了附图3中所示的结构索引表格的数据结构的例子;\n[0035] 附图7是一流程图,用于帮助解释在实施例中的索引处理的过程;\n[0036] 附图8是一流程图,用于帮助解释在实施例中的文档存储处理的过程;\n[0037] 附图9A和9B是流程图,用于帮助解释在实施例中搜索处理的过程;\n[0038] 附图10A和10B示例了根据所述值搜索条件从具有附图5的数据结构的值索引表格中获取的第一候选节点列表的例子;\n[0039] 附图11示例了包含在附图10A和10B的第一候选节点列表中的其值为“Stevens”的最后节点和其值为“W.”的第一节点在附图2的XML文档中的位置;\n[0040] 附图12A和12B示例了根据所述值搜索条件从具有附图6的数据结构的结构索引表格中获取的第二候选节点列表的例子;\n[0041] 附图13A和13B示例了将根据所述值搜索条件从所述值索引表格和结构索引表格中获取的所述候选列表进行合并而得到的第三候选节点列表的例子;\n[0042] 附图14示例了一组合列表,其相关的节点IDs在附图13A和13B的所述候选节点列表之间相互一致;\n[0043] 附图15是一模块图,主要示例了应用于一实施例变体的结构化文档搜索系统的功能配置;\n[0044] 附图16示例了附图15中所示的值索引表格的数据结构的例子;\n[0045] 附图17示例了附图15中所示的结构索引表格的数据结构的例子;\n[0046] 附图18是一流程图,用于帮助解释在所述变体中的文档存储处理过程;\n[0047] 附图19A和19B是流程图,用于帮助解释所述变体中搜索处理的过程;\n[0048] 附图20A和20B示例了根据所述值搜索条件从具有附图16的数据结构的值索引表格中获取的第一候选节点列表的例子;\n[0049] 附图21A和21B示例了根据所述值搜索条件从具有附图17的数据结构的结构索引表格中获取的第二候选节点列表的例子;以及\n[0050] 附图22A到22C示例了应用于传统技术的值索引的例子。\n具体实施方式\n[0051] 下文中,将参考附图解释本发明的实施例。\n[0052] 附图1是示例了根据本发明一实施例的包括结构化文档搜索系统50的客户服务器系统的硬件配置的模块图。所述客户服务器系统主要由一数据库服务器10和多个客户(客户终端)组成。所述多个客户包括客户20。在客户20上,一应用(应用程序)使用数据库服务器10进行操作。包括客户20的所述多个客户通过例如局域网(LAN)的网络30连接到所述数据库服务器10。在附图1中,除了客户20以外的客户被省略。\n[0053] 所述数据库服务器10是一具有例如一主存储器的存储器11的计算机(数据库服务器计算机)。所述数据库服务器10连接到例如一硬盘驱动器的外部存储设备40。所述外部存储设备40存储数据库管理程序41和数据库42。在所述实施例中,结构化文档搜索系统50通过数据库服务器10和外部存储设备40(数据库42)来实现。\n[0054] 所述数据库管理程序41用于由所述数据库服务器10管理所述数据库42以及用于基于来自客户的查询的搜索处理,所述查询利用XPath,XQuery等等。所述数据库42是一XML文档数据库(结构化文档数据库),其存储例如XML文档(XML电子文档)这样的结构化文档。\n[0055] 附图2示例了存储在数据库42中的XML文档集合的例子。在附图2的例子中,所述数据库42存储一包括XML文档101到XML文档103的XML文档的集合。包含在存储于数据库42中的XML文档中的每个节点具有如传统技术中一样的指示所述节点位置的节点ID。在附图2中,每个所述节点附近的数字指示所述节点的节点ID。\n[0056] 附图3是主要示例了附图1的结构化文档搜索系统50的功能配置的模块图。所述结构化文档搜索系统50包括一数据库管理系统51和数据库42。所述数据库42不仅存储XML文档集合还存储索引表格421、值索引表格422和结构索引表格423。\n[0057] 所述索引表格421用于管理关于节点的信息(索引信息),所述节点包括在存储于数据库42中的XML文档中并且将被分配(设置)值索引。所述值索引表格422保存被分配给(被对应附加给)由所述索引表格421管理的所述节点(被认为是一值搜索的可能目标的节点)的值索引(索引信息项)。每个所述值索引包括节点(元素)的值(关键词),所述节点的节点ID以及相关节点(此处,指一父节点)的节点ID。所述结构索引表格423保存表示所述节点的结构的结构索引,所述节点包括在存储于数据库42中的XML文档中。\n[0058] 所述数据库管理系统51包括一请求处理单元52,一搜索单元53,一索引管理单元\n54,一文档存储处理单元55,一数据库操作单元56,一索引表格57,一值索引表格58以及一结构索引表格59。\n[0059] 从客户20接收一请求(命令),所述请求处理单元52确定所述请求的类型,并且基于所述确定的结果把所述请求发送给所述搜索单元53、索引管理单元54或者文档存储处理单元55。如果来自客户20的所述请求是一搜索请求,则所述请求处理单元52把所述搜索请求发送到所述搜索单元53。如果来自客户20的所述请求是一索引请求,则所述请求处理单元52把所述索引请求发送到所述索引管理单元54。如果来自客户20的所述请求是一文档存储请求,则所述请求处理单元52把所述文档存储请求发送到所述文档存储处理单元55。\n[0060] 通过所述请求处理单元52接收来自客户20的搜索请求,所述搜索单元53基于包括在所述搜索请求中的一查询来执行一搜索处理。在所述搜索处理中,所述索引管理单元\n54(由所述索引管理单元54管理的所述值索引表格58和结构索引表格59)被使用。所述搜索单元53包括一值索引搜索模块531,一结构索引搜索模块532以及一搜索结果获取模块533。\n[0061] 所述值索引搜索模块531在值索引表格58中搜索其值符合在所述搜索请求(查询)中指定的搜索条件的值索引。所述结构索引搜索模块532在所述结构索引表格59中搜索其结构符合在所述搜索请求中指定的搜索条件的结构索引。所述搜索结果获取模块533基于在所述值索引搜索模块531和结构索引搜索模块532中搜索所述索引的结果来获取所述搜索请求的搜索结果。\n[0062] 所述索引管理单元54通过所述请求处理单元52从所述客户20接收索引请求,并且基于所述索引请求来执行一索引处理。在所述索引处理中,关于在一XML文档中的元素(节点)的信息被添加到所述索引表格57,其中在所述索引请求中指定的值索引将被分配(设置)到所述XML文档中的元素。利用所述索引表格57,所述索引管理单元54也管理关于已被分配(设置)值索引的节点的信息。基于所述值索引表格58,所述索引管理单元54进一步为符合值搜索条件的节点产生一索引信息项(值索引)的列表。当所述值搜索条件包含一结构条件时,所述索引管理单元54基于所述结构索引表格59进一步为符合所述结构条件的节点产生一索引信息项(结构索引)的列表。当所述搜索单元53执行一值搜索处理时,所述索引管理单元54根据来自所述搜索单元53的所述请求产生一列表。产生的列表被发送到所述搜索单元53。\n[0063] 所述文档存储处理单元55通过所述请求处理单元52从客户20接收所述文档存储请求,并且执行把在所述文档存储请求中指定的一XML文档存储到数据库42中的文档存储处理。在所述文档存储处理中,所述文档存储处理单元55产生如下的值索引并把所述值索引添加到所述值索引表格58,即在包括在存储于所述数据库42中的XML文档中的节点之中,所述值索引将被分配给那些被指定在索引表格57进行索引的节点。所述数据库操作单元56起接口的作用,该接口使搜索单元53、索引管理单元54以及文档存储处理单元55能够访问数据库42并且在数据库42上执行处理。\n[0064] 所述索引表格57、值索引表格58和结构索引表格59分别相应于存储于数据库42中的索引表格421、值索引表格422和结构索引表格423。在实施例中,在所述结构化文档搜索系统50启动时,所述索引表格421、值索引表格422和结构化索引表格423作为索引表格57、值索引表格58和结构化索引表格59从数据库42中被复制到附图1中的存储器11中。当所述结构化文档搜索系统50在操作时,所述索引表格57、值索引表格58和结构索引表格59被查阅或者更新。索引表格57、值索引表格58和结构索引表格59的被更新的内容周期性地或者根据需要(如,当系统50的负载低时)反映在索引表格421、值索引表格422和结构索引表格423中。\n[0065] 附图4示例了附图3中所示的所述索引表格57的数据结构的例子。在该实施例中,所述索引表格57用作为每个路径(路径字符串)保存索引信息的索引信息存储单元。\n索引信息包括相应于所述索引信息的路径和相关节点类型信息。\n[0066] 所述路径是一绝对路径,其将在该路径中指定的一节点的结构表示为从根节点到所述节点的路径。相关节点类型信息指示与在所述路径中指定的所述节点(指定节点)具有特定关系的一节点(相关节点)的类型,所述路径被使得相应于包括所述指定节点的XML文档的层次结构(树状结构)的信息。当所述结构化文档搜索系统50发起搜索多个节点并且为所述多个节点所共有的一相关节点被获取作为搜索的结果时,用户指定所述类型。相关节点是在包括所述指定节点的XML文档的层次结构(树状结构)上与所述指定节点具有一特定关系的节点。例如,一相关节点是父节点或兄弟节点。一相关节点可以在包括所述指定节点的XML文档的树状结构上从所述指定节点进行追溯。在该实施例中,为简化说明,假设相关节点的类型限定为父节点。\n[0067] 附图5示例了附图3中所示的值索引表格58的数据结构的例子。在该实施例中,所述值索引表格58用作保存(存储)分配给节点的值索引(索引信息项)的一值索引存储单元,所述节点利用所述索引表格57进行管理。每个值索引包括一节点的值、所述节点的节点ID以及与所述节点相关的一相关节点的节点ID(相关节点ID)。所述值索引与传统技术的不同点在于其添加了相关节点ID。附图5的所述值索引表格58包括分配给附图2的XML文档101到XML文档103中的最后节点和第一节点的值索引。\n[0068] 附图6示例了附图3中所示的结构索引表格59的数据结构的例子。所述结构索引表格59用作结构索引存储单元,用于保存(存储)表示节点结构的结构索引,所述节点包括在存储于数据库42中的XML文档中。如在传统技术中,应用于该实施例中的每个结构索引包括表示结构的路径(路径字符串)和具有由所述路径指示的结构的节点的节点ID。\n[0069] 附图6的所述结构索引表格59包括分配给(被对应附加给)附图2的XML文档\n101到XML文档103中的个体节点的结构的结构索引。当多个节点IDs相应于一单个的路径(路径字符串)时,多个节点IDs以这样的方式被输入所述结构索引表格59中,即,使得所述多个节点IDs相应于所述单个路径。这种情况的一个例子是与附图2的XML文档101到XML文档103具有相同的结构的多个XML文档被存储于数据库42的情况。\n[0070] 在该实施例中,假设附图1的数据库服务器10把外部存储设备40中存储的数据库管理程序41读入到服务器10的存储器11中并且执行所述程序41,因而实现所述单元\n52到56。所述程序41被存储于一计算机可读存储媒介,如压缩盘或ROM,并且因此是可分发的。此外,所述程序41可以通过网络30下载到数据库服务器10中。此外,所述单元52到56可以由硬件组成。\n[0071] 接着,将解释附图3的结构化文档搜索系统50的操作。\n[0072] <索引处理>\n[0073] 将参考附图7的流程图解释结构化文档搜索系统50中的索引处理。假设,例如,具有如附图2所示的树状结构的XML文档101到XML文档103被显示于客户20的显示器上。在附图2的示例中,所述XML文档101到103存储于称为“bib”的一个集合中并受其管理,该集合相应于文件系统中的文件夹或者目录。XML文档101到XML文档103中的最上层节点是书(book)节点。这些书节点的父节点是一bib节点。在附图2的示例中,所述bib节点是包含XML文档101到XML文档103的一树状结构中的一根节点,\n[0074] 在示例了具有如附图2所示的树状结构的XML文档101到XML文档103的状态中,假设用户通过操作,例如,鼠标指定了一任意节点作为将产生其索引的节点。指定了节点后,假设用户操作所述客户20以指定索引。在这个例子中,如果必须指定相关节点,则用户指定所期望的相关节点的类型。\n[0075] 然后,根据来自所述用户的指令,所述客户20通过网络30向所述结构化文档搜索系统50发送一索引请求以为所述指定节点设置(分配)一索引(步骤S1)。所述索引请求包括一路径(绝对路径)和一相关节点的类型,所述路径表示将被设置索引的节点的结构。\n[0076] 从所述客户20接收所述索引请求,所述结构化文档搜索系统50的所述请求处理单元52把所述索引请求转交给所述索引管理单元54,由此请求所述索引管理单元54执行索引(步骤S2)。通过所述请求处理单元52从所述客户20接收所述索引请求,所述索引管理单元54把关于在所述请求中指定的节点(即,将被设置所述索引的节点)的索引信息添加到所述索引表格57中(步骤S3)。此处,作为关于所述指定节点的索引信息,指示表示所述指定节点的结构的一路径和与所述指定节点相关的一节点(相关节点)的类型的信息(相关节点类型信息)被添加到所述索引表格57中。\n[0077] 相应地,例如,如果所述指定节点是如附图2中节点ID为6的一节点并且所述指定相关节点的类型是一父节点,则指示“/bib/book/author/last”作为路径(路径字符串)并且还指示“一个父节点”作为所述相关节点的类型的索引信息被添加到表格57(参见附图4)。相似地,如果所述指定节点是如附图2中的节点ID为8的一节点并且所述指定相关节点的类型是一父节点,则指示“/bib/book/author/first”作为路径并指示“一个父节点”作为所述相关节点的类型的索引信息被添加到表格57(参见附图4)。\n[0078] <文档存储处理>\n[0079] 接着,将参考附图8中的流程图解释在索引之后的一文档存储处理。假设用户已指定一XML文档存储于数据库42中并且操作客户20指定所述XML文档的存储。然后,所述客户20通过网络30向所述结构化文档搜索系统50发送一文档存储请求以将指定的XML文档存储到数据库42中(步骤S11)。\n[0080] 从客户20接收所述文档存储请求,所述请求处理单元52把所述文档存储请求转交给所述文档存储处理单元55,由此请求所述文档存储处理单元55存储所述XML文档(步骤S12)。通过所述请求处理单元52从所述客户20接收所述文档存储请求,所述文档存储处理单元55开始解析所述请求中指定的所述XML文档(步骤S13)。每次从所述XML文档中抽取一节点作为解析所述XML文档的结果时,所述文档存储处理单元55在所述节点上执行下面的处理(步骤S14)。从所述XML文档中抽取的节点的顺序与出现在所述XML文档中的节点的顺序相一致。\n[0081] 首先,所述文档存储处理单元55询问所述索引管理单元54所述被抽取节点上的信息(在此,表示所述被抽取节点的结构的路径)是否已被输入到所述索引表格57(步骤S15)。然后,所述索引管理单元54查阅所述索引表格57以检查表示被询问节点的结构的路径(路径字符串)是否已被存储于所述索引表格57,并且向所述文档存储处理单元55通知结果。如果该节点已被存储,则所述索引管理单元54进一步向所述文档存储处理单元\n55通知相关节点的类型,所述相关节点类型在存储于所述索引表格57中的相关节点类型信息中以这样的方式被指示,即,使得所述类型相应于表示所述被询问节点的结构的路径。\n[0082] 从所述索引管理单元54接收所述通知,所述文档存储处理单元55确定(表示所述被抽取节点的结构的一路径)所述被抽取的节点是否已经存储在所述索引表格57中(步骤S16)。如果已经被存储,基于来自所述索引管理单元54的所述通知,所述文档存储处理单元55检查存储在所述索引表格57中的相关节点的类型以相应于表示所述被抽取节点的结构的路径。\n[0083] 接着,所述文档存储处理单元55向所述索引管理单元54询问所述被抽取节点的值是否已经被存储于所述值索引表格58中(步骤S17)。于是,所述索引管理单元54查阅所述值索引表格58以检查被询问的值是否已经存储于所述值索引表格58中,并且向所述文档存储处理单元55通知其结果。从所述索引管理单元54接收所述通知,所述文档存储处理单元55确定所述被抽取节点的值是否已经存储在所述值索引表格58中(步骤S18)。\n[0084] 如果所述值没有被存储(步骤S18),所述文档存储处理单元55促使所述索引管理单元54把所述被抽取节点的值、所述节点的节点ID以及确定类型的相关节点(这个例子中是父节点)的节点ID添加到所述值索引表格58中(步骤S19)。在此,如果相关节点是如所述实施例中的父节点,则所述相关节点已经被抽取。这对于所述相关节点是,例如,长兄(elderbrother)节点或一父节点的父节点(即,祖父节点)的情况也成立。如果所述相关节点是,例如,一弟(younger brother)节点时,则所述文档存储处理单元55追溯所述树状结构并且抽取所述弟节点。相反,如果所述被抽取节点的值已经被存储(步骤S18),则所述文档存储处理单元55使得所述被抽取节点的节点ID和确定类型的相关节点(在这个例子中是父节点)的节点ID相应于所述被存储的值,并且促使所述索引管理单元54把所述结果添加到所述值索引表格58(步骤20)。\n[0085] 在执行步骤S19或步骤S20后,所述文档存储处理单元55向所述索引管理单元54询问表示所述被抽取节点的结构的路径(路径字符串)是否已经被存储于所述结构索引表格59中(步骤S21)。如果已经确定(表示所述被抽取节点的结构的路径)所述被抽取节点没有被存储在所述索引表格57中(步骤S16),则所述文档存储处理单元55立即执行步骤S21。\n[0086] 从所述文档存储处理单元55接收到查询,所述索引管理单元54查阅所述结构索引表格59。然后,所述索引管理单元54检查表示被询问节点的结构的路径(路径字符串)是否已经存储在所述结构索引表格59中,并且向所述文档存储处理单元55通知其结果。从所述索引管理单元54接收所述通知后,所述文档存储处理单元55确定表示所述被抽取节点的结构的路径是否已经被存储在所述结构索引表格59中(步骤S22)。\n[0087] 如果其没有被存储(步骤S22),则所述文档存储处理单元55促使所述索引管理单元54把表示所述被抽取节点的结构的路径(路径字符串)和所述节点的节点ID添加到所述结构索引表格59中(步骤S23)。相反,如果表示所述被抽取节点的结构的路径已经被存储(步骤S22),则所述文档存储处理单元55使得所述节点的节点ID相应于所述存储的路径,并且使得所述索引管理单元54把结果的集合添加到所述结构化索引表格59中(步骤S24)。\n[0088] 在执行步骤S23或S24之后,所述文档存储处理单元55执行一文档存储操作以把所述被抽取的节点(即,所述XML文档的一部分)存储到所述数据库42中(步骤S25)。\n[0089] 在执行所述文档存储操作之后,所述文档存储处理单元55确定所述由客户20请求的对XML文档的分析是否已经完成(步骤S26)。即,所述文档存储处理单元55确定包含在所述被请求的XML文档中的所有节点是否都已经被处理。如果还存在没有被处理的节点,则所述文档存储处理单元55返回到步骤S14并且继续处理下一个节点。\n[0090] 通过上述处理,分配到其结构存储于所述索引表格57中的所述节点的值索引被添加到所述值索引表格58中。所述值索引与传统值索引的不同在于其不仅仅包括一节点(元素)的值和该节点的节点ID,还包括相关节点(在这个例子中是父节点)的节点ID(相关节点ID)。附图5中所述值索引表格58包括当附图2中的所述XML文档101到XML文档\n103被添加到所述数据库42中时所添加的值索引。\n[0091] <搜索处理>\n[0092] 接着,将参考附图9A和9B中的流程图来解释利用存储在所述值索引表格58中的值索引和存储在所述结构索引表格59中的结构索引的一搜索处理。假设,作为用户操作客户20的一个结果,所述客户20已经通过所述网络30向所述结构化文档搜索系统50发送一搜索请求(步骤S31)。假定所述搜索请求包括例如用XPath书写的一查询。这时,假设具有附图2中所述结构的XML文档101到103已经存储于数据库42中。此外,假设附图5中所述的值索引表格58包括当附图2中的所述XML文档101到103被存储到所述数据库\n42中时所添加的值索引。\n[0093] 从所述客户20接收所述搜索请求后,所述请求处理单元52把所述搜索请求转交给所述搜索单元53,由此请求所述搜索单元53执行搜索(步骤S32)。通过请求处理单元\n52从所述客户20接收所述搜索请求后,所述搜索单元53分析所述搜索请求(步骤S33)。\n在此,假设包含在所述搜索请求中的查询是在背景技术部分中所写的第二查询:(xPath)[0094] /bib/book/author[last=”Stevens”and first=”W.”]。\n[0095] 即,假设客户20作出一搜索一作者(父节点)的搜索请求,所述作者满足条件last=”Stevens”和first=”W.”。在此,所述条件last=”Stevens”,即,最后节点的值为”Stevens”的条件是所述值搜索中的一个条件。相似地,所述条件first=”W.”,即,第一节点的值为”W.”的条件是所述值搜索中的一个条件。\n[0096] 基于步骤S23中分析的结果,所述搜索单元53确定所述被请求的搜索是否是覆盖多个节点的值的一值搜索以及所述被请求的搜索目标节点是否是父节点,其中对所述多个节点设置了索引(步骤S34)。在该实施例中,符合在步骤S34中的确定条件。在这个例子中,利用所述值索引表格58,所述搜索单元53的值索引搜索模块531执行如下的搜索。\n[0097] 所述值索引搜索模块531从多个值搜索条件中选择一个未处理的条件(步骤S35)。在此,假设选择了last=”Stevens”。所述值索引搜索模块531从所述索引管理单元54中请求符合选出的值搜索条件的节点(值为”Stevens”的最后节点)的值索引列表(步骤S36)。在下面的解释中,符合选出的值搜索条件的节点被称为候选节点。\n[0098] 根据来自所述值索引搜索模块531的请求参考所述值索引表格58,所述索引管理单元54产生所述被请求的候选节点(值为”Stevens”的最后节点)的值索引的列表作为第一候选节点列表。所述第一候选节点列表包括候选节点的值和下述所有节点的节点IDs的集合,所述所有节点包括基于候选节点的节点的相关节点(父节点)的值和节点IDs(相关节点IDs)。每个节点ID和相关节点ID的集合可以被分配节点值(这个例子中是“Stevens”)。即,第一候选节点列表可以是值、节点ID和相关节点ID的集合的列表。\n[0099] 所述索引管理单元54向所述搜索单元53的值索引搜索模块531通知基于所述值索引表格58产生的第一候选节点列表。结果,所述值索引搜索模块531获取通知的第一候选节点列表(步骤S37)。即,所述值索引搜索模块531通过所述索引管理单元54在所述值索引表格58中搜索符合所述值搜索条件的值索引来获取所述第一候选节点列表。\n[0100] 在获取所述第一候选节点列表之后,所述值索引搜索模块531作为一排序单元并且例如以所述候选节点的节点IDs和相关节点IDs(父节点IDs)的升序排列所述第一候选节点列表(步骤S38)。在此,所述候选节点的节点IDs被给定优先权。所述被排序的第一候选节点列表被存储于包含在附图1的数据库服务器10中的存储器11的指定区域中。\n[0101] 在执行步骤S38之后,所述值索引搜索模块531确定所有值搜索条件是否都已被处理(步骤S39)。如果还有未处理的值搜索条件,则所述值索引搜索模块531返回到步骤S35并选择所述未处理条件之一。在此,假设选择了值搜索条件first=“W.”。\n[0102] 所述值索引搜索模块531执行步骤S36中的处理并且推进到符合所述选择的值搜索条件的候选节点(值为“W.”的第一节点)。结果,所述值索引搜索模块531获取候选节点(值为“W.”的第一节点)的值索引(索引信息)列表作为第一候选节点列表并且排序所述列表。被排序的第一候选节点列表被存储在附图1的存储器11的指定区域中。\n[0103] 附图10A和10B分别示例了在附图5的所述值索引表格58的例子中获取的值为“Stevens”的最后节点的第一候选节点列表111和值为“W.”的第一节点的第一候选节点列表112的例子。附图11示例了包含在附图10A和10B中示例的候选列表111和112中的值为“Stevens”的最后节点和值为“W.”的第一节点在附图2的XML文档101到103中的位置。在附图11中,每个边框箭头指示值为“Stevens”的最后节点的一相关节点(父节点)或值为“W.”的第一节点的一相关节点(父节点)。\n[0104] 假设所述搜索单元53的值索引搜索模块531已经处理了所述值搜索条件中所述多个节点中的所有节点(步骤S39)。那么,所述搜索单元53中的结构索引搜索模块532被启动。所述结构索引搜索模块532从所述多个值搜索条件中选择一个未处理的条件(步骤S40),并抽取包含在所选择的条件中的结构条件(步骤S41)。在此,在值为“Stevens”的最后节点的值搜索条件中所指定的节点的结构条件(表示所述结构条件的路径)“/bib/book/author/last”被抽取。所述结构索引搜索模块532从所述索引管理单元54中请求符合所抽取的结构条件(/bib/book/author/last)的节点(候选节点)的结构索引列表(步骤S42)。\n[0105] 所述索引管理单元54根据来自所述结构索引搜索模块532的请求查阅所述结构索引表格59,由此,产生符合所述被请求(被选择)的结构条件(/bib/book/author/last)的候选节点的结构索引列表作为第二候选节点列表。所述第二候选节点列表包括符合所述结构条件的路径(路径字符串)和由该路径指定的所有节点(候选节点)的节点IDs。每个节点ID可以被分配一表示所述被选择的结构条件的路径(“/bib/book/author/last”)。\n即,所述第二候选节点列表可以是一路径和一节点ID的集合的列表。\n[0106] 所述索引管理单元54向所述搜索单元53的结构索引搜索模块532通知所产生的第二候选节点列表。结果,所述结构索引搜索模块532获取所通知的第二候选节点列表(步骤S43)。即,所述结构索引搜索模块532通过所述索引管理单元54,在所述结构索引表格\n59中搜索符合包含在所述值搜索条件中的所述结构条件的结构索引,由此获取所述第二候选节点列表。\n[0107] 在获取所述第二候选节点列表之后,所述结构索引搜索模块532作为一排序单元并且以例如,所述候选节点的节点IDs的升序来排列所述第二候选节点列表(步骤S44)。\n所述被排序的第二候选节点列表存储在包含在附图1的数据库服务器10中的存储器11的指定区域。\n[0108] 在执行步骤S44之后,所述结构索引搜索模块532确定是否所有值搜索条件都已经被处理(步骤S45)。如果还存在未处理的值搜索条件,所述结构索引搜索模块532返回到步骤S40,选择未处理的条件之一,并且抽取包含在所选择的条件中的结构条件(步骤S41)。在这个例子中,假设值为“W.”的第一节点的结构条件(表示所述结构条件的路径)“/bib/book/author/first”已经被抽取。\n[0109] 所述结构索引搜索模块532执行步骤S42中的处理并且推进到所抽取的结构条件“bib/book/author/first”。结果,所述结构索引搜索模块532获取符合所述结构条件“/bib/book/author/first”的候选节点的结构索引列表作为第二候选节点列表并且排序所述列表。所述被排序的第二候选节点列表被存储在附图1的存储器11中的指定区域。\n[0110] 附图12A和12B分别示例了从附图6的所述结构索引表格59的例子中获取的符合结构条件“/bib/book/author/last”的最后节点的第二候选节点列表113和符合结构条件“/bib/book/author/first”的第一节点的第二候选节点列表114的例子。\n[0111] 假设所述搜索单元53的所述结构索引搜索模块532已经处理了所述值搜索条件中的多个节点中的所有节点(步骤S45)。那么,所述搜索单元53的搜索结果获取模块533被启动。利用所述候选节点的节点IDs,所述搜索结果获取模块533在基于值搜索条件的条件下,将基于所述值索引表格58获取的第一候选节点列表和基于所述结构索引表格59获取的第二候选节点列表进行合并(步骤S46)。在此,所述搜索结果获取模块533利用所述候选节点的节点IDs作为关键词对所述第一和第二候选列表执行AND操作,由此合并所述第一和第二候选列表。这样的AND操作被称为AND合并操作。\n[0112] 结果,根据所述值搜索条件(last=”Stevens”和first=”W.”)产生附图13A和13B所示的第三候选节点列表115和116。所述第三候选节点列表115是对附图10A中的第一候选节点列表111和附图12A中的第二候选节点列表113执行AND合并操作的结果。对于包含在所述列表111和113两者中的所有节点IDs(候选节点IDs)来说,所述第三候选节点列表115不仅包括节点ID和相关节点ID的集合,而且还包括为具有所述节点IDs的节点(元素)所共有的值。所述第三候选节点列表116是对附图10B中的第一候选节点列表112和附图12B中的第二候选节点列表114执行AND合并操作的结果。所述第三候选节点列表116不仅包括包含在列表112和114两者中的节点IDs的所述节点ID和相关节点ID的集合,而且还包括为具有所述节点ID的节点(元素)所共有的值。\n[0113] 在执行步骤S46之后,所述搜索结果获取模块533在根据所述值搜索条件所产生的第三候选节点列表之中搜索相关节点IDs(在这个例子中是父节点IDs)相互一致的组合(步骤S47)。在此,利用包含在相应于所述值搜索条件的所述第三候选节点列表中的所述相关节点IDs作为关键词,所述搜索单元53a对所述第三候选节点列表执行一AND合并操作,由此搜索其相关节点IDs(父节点IDs)相互符合的组合。附图14示例了一组合的列表(搜索结果列表)117,所述组合的相关节点IDs(父IDs)在附图13A和附图13B所示的候选节点列表115和116之间相互一致。在此,仅仅是其值为15的相关节点在所述候选节点列表115和116之间相互一致。即,仅仅是其值为15的相关节点为所述候选节点列表115和116所共有(be common to)。如从附图11中看到的,其值为15的相关节点ID是符合在来自所述客户20的搜索请求中所请求的条件last=”Stevens”和first=”W.”的作者的节点ID。\n[0114] 所述搜索结果获取模块533把包含在从步骤S47中获取的所述搜索结果列表中的所述相关节点IDs(即,在根据所述值搜索条件产生的所述第三候选节点列表之间相互一致的相关节点IDs)作为通过所述请求处理单元52来自客户20的所述搜索请求的搜索结果返回给客户20(步骤S48)。当附图14的所述搜索结果列表117已经被获取时,其值为\n15的相关节点ID,即,满足条件last=”Stevens”和first=”W.”的作者的节点ID(=\n15)作为搜索结果被返回给客户20。\n[0115] 如上面描述的,在所述实施例中,所述相关节点(父节点)的节点IDs(相关节点IDs)包含在保存于所述值索引表格58中的所述值索引中。因此,在所述实施例中,用于覆盖多个节点的值的值搜索和用于搜索为所述多个节点所共有的相关节点(父节点)的一个搜索处理可以仅仅通过查阅所述值索引表格58的一索引操作来执行。即,在所述实施例中,所述搜索处理可以不必搜索数据库42中的所有XML文档而高速地被执行。\n[0116] 如果一搜索不符合值搜索覆盖多个节点的值且被请求搜索的节点是所述多个节点的相关节点(父节点)的条件(步骤S34),则所述搜索单元53执行传统搜索处理(步骤S50)。\n[0117] 在所述实施例中,在所述索引表格57中被管理的节点(最后节点和第一节点)的相关节点的类型是一父节点的情况是一前提条件。然而,在所述索引表格57中被管理的节点(最后节点和第一节点)的相关节点的类型可以是不同于一父节点的节点。例如,满足条件last=”Stevens”和first=”W.”的作者所写的一本书的标题被作为想要的搜索结果时,所述用户在一索引请求中指定一父节点的兄长节点(即,伯父节点)作为一相关节点,使得适合用于由所述用户使用的搜索条件的相关节点上的信息能够被包含于保存在所述值索引表格58中的一个值索引中。这使得即使所述搜索条件(搜索目标节点)改变时也有可能高速地执行搜索。\n[0118] [实施例变体]\n[0119] 接着,将参考附图解释所述实施例的一个变体(特别地,结构化文档搜索系统50的一个变体)。附图15是一模块图,主要示例了应用于所述变体的一结构化文档搜索系统\n50a的功能配置。在附图15中,与附图3中元素相等同的元素由相同的附图标记指示。\n[0120] 所述结构化文档搜索系统50a相应于所述实施例中的所述结构化文档搜索系统\n50。与所述结构化文档搜索系统50相似,假设所述所述结构化文档搜索系统50a由附图1中所示的数据库服务器10和外部存储设备40(数据库42)实现。\n[0121] 所述结构化文档搜索系统50a包括一数据库管理系统51a和数据库42。在该变体中,在所述数据库42中存储了一XML文档集合、一索引表格421、一值索引表格422a和一结构索引表格423a。\n[0122] 与传统值索引表格具有相同数据结构的所述值索引表格422a与应用于所述实施例中的值索引表格422不同,其不具有相关IDs。所述结构索引表格423a保存被对应附加给(被分配给)在所述索引表格421中被管理的节点(被认为是一值搜索的可能目标的节点)的结构索引。如后面将详细描述的,每个所述结构索引包括表示一节点(元素)的结构的路径(路径字符串)、由所述路径指定的节点的节点ID以及与所述节点相关的一相关节点(在这个例子中是父节点)的节点ID的集合。\n[0123] 所述数据库管理系统51a与附图3中的所述结构化文档搜索系统50的不同在于一搜索单元53a、一值索引表格58a和一结构索引表格59a代替了所述搜索单元53、值索引表格58和结构索引表格59。所述值索引表格58a和结构索引表格59a相应于存储在数据库42中的值索引表格422a和结构索引表格423a。在所述结构化文档搜索系统50a启动时,所述值索引表格422a和结构索引表格423a作为所述值索引表格58a和结构索引表格\n59a被复制到存储器11中。\n[0124] 所述搜索单元53a与所述实施例中的搜索单元53的不同在于,其不仅包括值索引搜索模块531、结构索引搜索模块532和搜索结果获取模块533,还包括一节点数目确定模块534和一文档搜索模块535。所述节点数目确定模块534确定包含在由所述值索引搜索模块531获取的所述第一候选节点列表中的候选节点的总数目是否大于或等于预先确定的指定数目。如果所述候选节点的总数目小于所述指定数目,则所述文档搜索模块535搜索数据库42中存储的XML文档。在所述搜索中,所述文档搜索模块535获取符合结构条件的候选节点的列表(第四候选节点列表)并且搜索其相关IDs在所述列表之间相一致的组合。\n[0125] 附图16示例了附图15中所示的值索引表格58a的数据结构的例子。与所述实施例中的值索引表格58相似,所述值索引表格58a保存了分配给利用所述索引表格57管理的所述节点的值索引。在此,保存在值索引表格53a中的值索引与保存在所述值索引表格\n58中的值索引的不同在于其没有相关节点ID。附图16中所述的值索引表格58a包括分配给附图2中的XML文档101到103中的最后节点和第一节点的值索引。\n[0126] 附图17示例了附图15中所示的结构索引表格59a的数据结构的例子。与所述实施例中的所述结构索引表格59相似,所述结构索引表格59a被用于保存表示存储在数据库\n42中的XML文档中的所述节点的结构的结构索引。每个所述结构索引包括表示所述结构的路径(路径字符串)、由所述路径指定的所述节点的节点ID以及与所述节点相关的一相关节点的节点ID(相关节点ID)。所述结构索引与保存在所述结构索引表格59中的结构索引的不同在于添加了相关节点ID。即,在所述变体中,所述相关节点ID被分配给结构索引而不是值索引。附图17中的所述结构索引表格59a包括相应于附图2中XML文档101到\n103中的每个节点的结构的结构索引。\n[0127] 接着,将解释附图11中的所述结构化文档搜索系统50a的操作,主要着重于解释与所述实施例中的所述结构化文档搜索系统50的不同之处。\n[0128] <文档存储处理>\n[0129] 首先,将参考附图18中的流程图解释在所述变体中索引之后的一文档存储处理。\n在附图18中,与附图8的流程图中相同的处理步骤由相同的附图标记指示。\n[0130] 假设客户20向所述结构化文档搜索系统50a发送一文档存储请求以将一用户指定XML文档存储到数据库42中(步骤S11)。然后,所述结构化文档搜索系统50a的文档存储处理单元55开始解析指定的XML文档(步骤S13)。然后,每当从所述指定的XML文档中抽取一节点时,所述文档存储处理单元55如下处理所述节点(步骤S14)。\n[0131] 首先,所述文档存储处理单元55向所述索引管理单元54询问关于所抽取节点的信息(一路径)是否已被输入到所述索引表格57中(步骤S15)。如果已经被输入(步骤S16),则所述文档存储处理单元55基于所述索引管理单元54响应于所述询问所给出的通知,检查由存储在所述索引表格57中的相关节点类型信息所指示的所述相关节点的类型,以相应于表示所述被抽取的节点的结构的路径。\n[0132] 如果关于被抽取节点的信息(所述路径)已经被存储在所述索引表格57中(步骤S16),则所述文档存储处理单元55向所述索引管理单元54询问所述节点的值是否已经存储于所述值索引表格58a中(步骤S17)。如果所述值没有被存储(步骤S18),则所述文档存储处理单元55促使所述索引管理单元54将被抽取节点的值和该节点的节点ID添加到所述值索引表格58a中(步骤S19a)。相反地,如果所述被抽取节点的值已经被存储(步骤S18),则所述文档存储处理单元55使得所述节点的节点ID相应于所存储的值,并且使得所述索引管理单元54把所述结果添加到所述值索引表格58a中(步骤S20a)。\n[0133] 在执行步骤S19a或S20a之后,所述文档存储处理单元55向所述索引管理单元54询问表示所述被抽取节点的结构的路径(路径字符串)是否已经被存储于结构索引表格\n59a中(步骤S21)。如果已经确定在步骤S14中所抽取节点上的信息没有被存储在所述索引表格57中(步骤S16),则所述文档存储处理单元55立即执行步骤S21和S22。\n[0134] 如果表示所述被抽取节点的结构的路径没有被存储(步骤S22),则所述文档存储处理单元55促使所述索引管理单元54把所述路径(路径字符串)、所述节点的节点ID和确定类型的相关节点的节点ID添加到所述结构索引表格59中(步骤S23)。相反地,如果表示所述被抽取节点的结构的路径已经被存储(步骤S22),则所述文档存储处理单元55使得所述节点的节点ID和确定类型的相关节点的节点ID相应于所述路径,并且使得所述索引管理单元54将所述生成的组合添加到所述结构索引表格59中(步骤S24a)。在用于没有存储于所述索引表格57中的节点的结构的结构索引(即,用于相关节点类型没有被确定的节点的结构的结构索引)中,没有包括所述相关节点的节点ID。\n[0135] 在执行步骤S23a或S24a之后,所述文档存储处理单元55执行一文档存储操作以将所述被抽取的节点(即,所述XML文档的一部分)存储于数据库42中(步骤S25)。所述文档存储处理单元55重复上述操作,直到完成对客户20请求的XML文档的分析。\n[0136] <搜索处理>\n[0137] 接着,将参考附图19A和19B的流程图解释利用存储于所述值索引表格58a中的值索引和存储于所述结构索引表格59a中的结构索引的搜索处理。在附图19A和19B中,与附图9A和9B的流程图中相同的处理步骤由相同的附图标记指示。\n[0138] 假设客户20向所述结构化文档搜索系统50a发送一搜索请求,该搜索请求包括以例如XPath撰写的一个查询(步骤S31)。假定所述查询是第二查询(XPath)。如上面描述的,所述第二查询包括last=”Stevens”的值搜索条件和first=”W.”的值搜索条件。此外,这些值搜索条件包括节点要具有由“/bib/book/author/last”表示值为“Stevens”的最后节点结构的结构条件以及节点要具有由“/bib/book/author/first”表示值为“W.”的第一节点结构的结构条件。\n[0139] 在这个例子中,与所述实施例中的所述结构化文档搜索系统50相似,结构化文档搜索系统50a执行步骤S32到步骤S39。特别地,包括在所述结构化文档搜索系统50a中的所述搜索单元53a的值索引搜索模块531从所述索引管理单元54获取与多个值搜索条件中的每一个都符合的节点列表(第一候选节点列表),并排序所述列表。然而,在变体中,第一候选节点列表利用所述值索引表格58a而产生,并且按照候选节点的ID节点的升序来进行排序。\n[0140] 附图20A和20B分别示例了附图16的所述值索引表格58a的例子中获取的值为“Stevens”的最后节点的第一候选节点列表111a和值为“W.”的第一节点的第一候选节点列表112a的例子。所述候选节点列表111a和112a不包括相关节点ID,与附图10A和10B所示例的候选节点列表111和112不同。\n[0141] 当为多个值搜索条件中的每一个获取了第一候选节点列表时(步骤S39),所述搜索单元53a的节点数目确定模块534被启动。在排序之后,所述节点数目确定模块534计算包含在所有第一候选节点列表中的候选节点的节点IDs的总数目,即,候选节点的总数目(步骤S61)。然后,所述节点数目确定模块534确定所述候选节点的总数目是否大于或等于预先指定的数目(步骤S62)。\n[0142] 在此,假设所述候选节点的总数目大于或等于所述指定数目(步骤S62)。在这种情况中,如在所述实施例中一样,所述搜索模块53a的结构索引搜索模块532执行步骤S40到步骤S45。特别地,所述结构索引搜索模块532基于所述结构索引表格59a为包含在多个值搜索条件中的每个结构条件执行获取符合所述结构条件的节点列表(第二候选节点列表)的处理。结果,所述结构索引搜索模块532获取如附图21A和21B所示的第二候选节点列表113a和114a。\n[0143] 所述候选节点列表113a是符合结构条件“/bib/book/author/last”(表示所述结构条件的路径)的节点(候选节点)的结构索引的列表,用于由最后节点值为“Stevens”的值搜索条件所指定的节点。所述候选节点列表114a是符合结构条件“/bib/book/author/first”(表示所述结构条件的路径)的节点(候选节点)的结构索引的列表,用于由第一节点值为“W.”的值搜索条件所指定的节点。由于用于产生候选列表113a和114a的结构索引表格59a的特性,所述列表113a和114a包括相关节点IDs,与所述候选节点列表113和114不同。\n[0144] 当为包含在多个值搜索条件中的每个结构条件获取了第二候选节点列表时(步骤S45),所述搜索单元53的搜索结果获取模块533被启动。利用候选节点的节点IDs,所述搜索结果获取模块533基于值搜索条件,对基于所述值索引表格58a获取的第一候选节点列表和基于所述结构索引表格59a获取的第二候选节点列表执行一AND合并操作(步骤S46)。\n[0145] 在此,在附图20A的第一候选节点列表111a和附图21A的第二候选节点列表113a上执行一AND合并操作,由此产生如所述实施例中的附图13A所示的第三候选节点列表\n115。相似地,在附图20B的第一候选节点列表112a和附图21B的第二候选节点列表114a上执行一AND合并操作,由此产生如所述实施例中的附图13B所示的第三候选节点列表116。\n[0146] 在执行步骤S46之后,所述搜索结果获取模块533在根据所述值搜索条件产生的第三候选节点列表中搜索其相关节点IDs彼此相一致的组合(步骤S47)。然后,所述搜索单元53将所述相互一致的相关节点IDs作为通过所述请求处理单元52来自客户20的所述搜索请求的搜索结果返回给客户20(步骤S48)。\n[0147] 如上描述的,在所述变体中,所述相关节点(父节点)的节点ID(相关节点IDs)被包含在保存于结构索引表格59a中的所述结构索引中。相应地,在所述变体中,用于覆盖符合所述结构条件的多个节点的值的值搜索以及用于搜索为多个节点所共有的一相关节点(父节点)的搜索处理可以仅仅通过查阅所述值索引表格58a和结构索引表格59a的索引操作来执行。即,在所述变体中,与所述实施例中一样,可以高速执行所述搜索处理而不搜索数据库42中所有XML文档。随着符合每个值搜索条件的节点数目的增加,该效果变得更加显著。\n[0148] 相反地,如果基于所述值索引表格58a找到的符合每个值搜索条件的节点的总数目很小,则利用与传统技术相似的搜索方法,即,实际搜索数据库42中存储的XML文档的方法,可以使得搜索以更高的速度执行。因此,在所述变体中,如果在步骤S62中确定候选节点的总数目(即,符合每个所述值搜索条件的节点的总数目)小于指定数目时,则所述搜索单元53a利用下面描述的与传统技术相似的搜索方法对所请求搜索的节点(相关节点)进行搜索。\n[0149] 首先,所述搜索单元53a的文档搜索模块535在存储于数据库42中的XML文档中搜索包含在为每个所述值搜索条件而获取的候选节点列表中的节点(步骤S63)。在步骤S63中,对于相应于所述值搜索条件的每个结构条件,所述文档搜索模块535从所述被搜索的XML文档中抽取符合所述结构条件的节点的节点IDs和该节点(符合所述结构条件的节点)的相关节点(父节点)的节点IDs(相关节点IDs)。在步骤S63,所述文档搜索模块\n535获取所述抽取节点的节点IDs和所述相关节点的节点IDs(相关节点IDs)的列表来作为第四候选节点列表。即,所述文档搜索模块535根据所述结构条件获取所述第四候选节点列表。\n[0150] 然后,所述搜索单元53a的搜索结果获取模块533在根据所述结构条件获取的所有第四候选节点列表之间搜索其相关节点IDs相互一致的组合(步骤S64)。然后,所述搜索结果获取模块533把为所述查得的组合所共有的相关节点ID作为通过所述请求处理单元52来自客户20的搜索请求的搜索结果返回给客户20(步骤S48)。如上所描述的,在所述变体中,由于根据候选节点的总数目自动应用了最佳搜索过程,因此能够实现最优处理性能。\n[0151] 如在所述实施例中一样,在所述变体中,在所述索引表格57中管理的节点(最后节点和第一节点)的相关节点的类型是父节点的情况是一前提条件。然而,在所述索引表格57中管理的所述节点(最后节点和第一节点)的相关节点的类型可以是与一父节点不同的节点。例如,当满足条件last=”Stevens”和first=”W.”的作者所写的一本书的标题被作为想要的搜索结果时,用户指定一伯父节点作为索引请求中的相关节点,使得适用于由所述用户使用的搜索条件的相关节点上的信息能够被包含于所述结构索引表格59a中。这使得即使所述搜索条件(搜索目标节点)改变时也有可能高速地执行搜索。\n[0152] 所述搜索单元53a本身可以查阅所述索引表格57、值索引表格58a和结构索引表格59a。相似地,在所述实施例中,所述搜索单元53本身可以查阅所述索引表格57、值索引表格58和结构索引表格59。进一步地,如在所述变体中一样,在所述实施例中,所述搜索单元53可以配备有所述节点数目确定模块534和文档搜索模块535。\n[0153] 对于本领域技术人员来说很容易发现其它优点和变体。因此,本发明的范围不限于此处所示例和描述的具体细节和代表性实施例。相应地,能够作出多种变体而不偏离由所附权利要求和其等同物所定义的总发明构思的精神和范围。
法律信息
- 2012-09-19
- 2008-11-19
- 2008-09-24
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2002-06-05
|
2001-02-26
| | |
2
| |
2005-06-29
|
2004-12-29
| | |
3
| |
2007-02-14
|
2005-09-27
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |