搜索索引格式优化的制作方法

文档序号:6593943阅读:141来源:国知局
专利名称:搜索索引格式优化的制作方法
搜索索引格式优化背景在由多个文档组成的搜索域内搜索关键字或相似的数据项通常涉及使用索引。通 常,该索引是将关键字与文档相关联的倒排索引。在搜索索引本质上是通用的情况下,它必须支持各种类型的搜索。一个常见示例 是关键字搜索,其中用户提供一个或多个关键字或值,并且搜索结果是搜索域内包含所有 关键字的所有文档。另一示例是短语搜索,其中用户提供由两个或更多单词以特定顺序组 成的短语。在这种情况下,搜索结果是来自搜索域中包含恰如所提供的短语的短语(即,所 有单词相邻且以相同的顺序)的所有文档。支持短语查询的索引必须包含比不支持短语查 询的索引多得多的数据,因为它必须包括单词每一次出现在文档内的位置。为了满足用户需求,搜索必须既快速又准确。在索引层面,这引发了竞争的需求。 为了精确索引必须是完整的,但这驱动了对较大索引的需求。为了快速访问索引必须是较 小的,但这驱动了消除数据的需求。可以使用压缩方案来减少必须读入的数据量,但是这可 能不足以满足用户对快速结果的需求。概述提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的一些概 念。本概述并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于确定 或限制所要求保护的主题的范围。此处所公开的主题的各方面涉及搜索索引结构,其中使用对预先存在的结构的扩 展来优化非短语搜索。该优化包括消除关于文档内关键字出现的位置的信息。其他方面涉及通过以可以计算而非存储索引的方式构造索引来消除数据。将可变 长度出现计数字段与逻辑类别相关联以允许从类别推断字段大小而非存储字段大小。在类 别内和跨类别使用连续符号值允许计算符号值而非将其存储在类别中。对类别内的符号条 目进行排序并且在编码表中匹配该排序允许计算对应于代码的符号而非存储该符号。以下描述的方法可被实现为计算机进程、计算系统、或者诸如计算机程序产品等 制品。计算机程序产品可以是计算机系统可读并编码了用于执行计算机进程的指令的计算 机程序的计算机存储介质。计算机程序产品还可以是计算系统可读并编码了用于执行计算 机过程的指令的计算机程序的载体上的传播信号。对以上概述的更全面的理解可通过参考以下简要概述的附图、以下对本发明的各 实施例的详细描述以及所附权利要求书来获得。附图简述

图1示出了复合搜索索引的结构的一实施例。图2示出了用于执行多单词、非短语查询的方法的一实施例的高级流程图。图3示出了用于执行短语查询的方法的一实施例的高级流程图。图4示出了内容索引扩展的顶层结构的一实施例。图5示出了用于压缩表页面的结构的一实施例。图6示出了用于类别描述符的结构的一实施例。
图7示出了用于数据页面的结构的一实施例。图8示出了用于页面目录条目的结构的一实施例。图9示出了用于文档ID比特流条目的结构的一实施例。图10示出了压缩过程的一般流程。图11示出了解压过程的一般流程。详细描述本详细描述是参考附图做出的,附图构成了详细描述的一部分,并且附图通过说 明示出了具体实施例。足够详细地描述这些实施例以允许本领域的技术人员实践以下所教 导的内容,并且应该理解可以使用其他实施例,并且可以作出逻辑、机械、电子和其他改变 而不背离本发明主题的精神或范围。以下详细描述因此不是限制性的,且其范围仅由所附 权利要求来限定。概览本发明针对在搜索域内搜索文档(或文件)集以找到与用户最相关的文档。搜索 通常涉及从用户获取一组关键字以指示搜索并且然后标识搜索域内匹配这些关键字的所 有文档。在试图标识这些候选文档时,搜索引擎可以在文档的正文或文档的特定部分或特 性(例如标题、摘要等)内查找关键字。所得的候选文档集包含来自搜索域的可能相关的所有文档。接着可以将排序算法 应用到候选文档以预测文档与用户的相关性。接着通常以预测的相关性的降序向用户呈现 候选文档。这种类型的搜索的实施例通常利用将关键字与文档关联的倒排索引结构。参考图 1,可以看出这种索引100可以由若干组件组成。本发明的主要兴趣是内容索引102和内容 索引扩展106。虽然基本范围索引104和复合范围索引108对于总体搜索过程是重要的,但 是它们不直接与本发明相关。内容索引102是在搜索域中的文档中找到的关键字的完整索引。它被结构化成支 持各种类型的搜索并且可独立于内容索引扩展106使用。内容索引102内的标志指示在内 容索引扩展106中是否有信息可供使用。对于每一个关键字都存在该标志,以便提供对如 何和何时使用扩展信息的控制。内容索引102支持的一种类型的搜索是“短语”查询。这是其中用户查找以特定 顺序出现的单词的特定组合的查询。一个简单的示例是搜索短语“the quick brown fox”。 如果文档恰好包含该短语,则它是候选者,如果它包含分散在整个文档中或不同顺序的所 有单词,则它不是候选者。为了高效起见,这种类型的查询要求索引包含有关每一个关键 字出现在文档中的哪里的信息,这样使得搜索引擎可确定它们是否相邻并且按照适当的顺 序。该信息增加了索引的大小以及由此的必须从包含索引的存储介质(例如盘驱动器)读 入的数据量。对于其中所提供的关键字中的一个或多个在较高百分比的文档中出现的较大 搜索域,读入该数据所需的时间包括执行搜索所需的时间中的大部分。为涉及在大量文档中出现的关键字的非短语查询优化内容索引扩展106。一种用 途是用于其中用户提供关键字集的情况,所有关键字必须出现在每一个候选文档中,但不 必按照任何特定顺序。另一用途是作为对短语查询的初始过滤器,在使用内容索引102来 执行特定短语是否包含在其余文档中的更昂贵的判定之前清除不包含所有单词的那些文档。由于内容索引扩展106无需支持短语查询,因此它无需包含关于每一个关键字出 现在每一个文档内的特定位置的信息(被称为出现数据)。它最多会存储单词出现多少次 的计数,即出现计数。该单个值比表示文档内的每一个位置所需的数字集小得多,尤其当单 词在文档中广泛使用时。消除该数据减少了必须从存储读取的关于每一个关键字的数据 量。这减少了处理每一个关键字所需的时间,从而加速了搜索。为了简明起见,在本发明中,索引将被描述为由对应于每一个组件的单独的文件 组成。清楚地,使用文件仅是一个实施例且并不旨在作为对本发明的限制。索引也是按照 存在于“文档”内的“关键字”来描述的。关键字不限于“单词”。它可以是短语、数字、代码 或要在文档内搜索的任何类似的值。以类似方式,术语“文档”会被用于指正在搜索的且包 含关键字的那些实体。它们可以是文档、文件、卡或具有必要特性的任何其他逻辑结构。为了进一步减少需要从存储读取的数据量,如下所述压缩内容索引扩展106的各 部分。一个实施例使用哈夫曼编码,它是具有对较频繁出现的数据项使用较短的代码的特 性的无损熵编码方案。在编码被应用到文档ID之间的差异(或步长)的情况下,随着在搜 索域内关键字出现的频率增加,压缩编得更加高效。这是对所公开的方法的较好的匹配,其 中内容索引扩展仅用于常用关键字。可以用许多方式使用内容索引扩展106以支持关键字搜索。图2中示出了一种用 途,其示出了多单词、非短语查询的高级逻辑流程。在步骤200,从用户获取关键字。循环判 定202控制对每一个关键字的处理。在该循环内,在步骤204,在内容索引102内单独地查 找每一个关键字以确定内容索引扩展(“CIX”)是否对关键字可用。这可以在无需读入大 量出现数据的情况下完成,因为必要的数据可以被存储在关于关键字的首部信息中。如果 在内容索引102内置位了标志,则它将伴随到内容索引扩展106中单独所在位置的偏移量。 这允许直接访问相关信息。接着在步骤208,使用来自内容索引扩展106的索引信息来确定 包含当前单词的文档的列表。如果没有内容索引扩展106条目可用,则会在步骤206处使 用内容索引102中的出现数据来生成候选文档的列表。在单独地为每一个关键字获取候选 文档的列表之后,将形成210这些列表的交集,该交集生成其中出现所有关键字的所有文 档的单个列表。这是将对用户可用的搜索结果。第二种用途在图3中示出,图3示出了可用于执行短语查询的高级步骤。步骤 300,302,304和308与以上参考图2所讨论的步骤200、202、204和208相同。循环内的处 理的不同之处在于在没有可用于关键字的内容索引扩展106时,跳过处理而非使用内容索 引104来生成列表。这是因为循环内的处理正在担当过滤器并且不生成最终回答。当搜索 短语时,仅需对其中出现所有关键字的那些文件检查短语。该文件集必然是其中出现关键 字的任何组合的那些文件的子集。虽然期望在形成交集之前形成关于所有关键字的候选列 表,但这不是必须的。即使对单个单词进行过滤会充分地减少开销以加速搜索。在形成310 所有候选文档列表的交集后,使用内容索引104来处理312其余文档以确定哪一个(如果 有的话)恰好包含短语。该列表是会对用户可用的搜索结果。内容索引扩展结构参考图4,可以看出内容索引检索106的顶层结构。存在用于索引中的每一个关键 字的单独分段400。在一个实施例中,每一个分段开始于4096个字节的页边界。分段接着可以横跨如所需那样多的页面以保存数据。在每一个关键字分段内,有两个不同的数据集。 从初始页边界开始的是压缩表页面402。此后,在下一页边界开始的是一系列的一个或多个 数据页404。注意页面对齐对于实现本发明的概念不是必须的,但是可以提供改进的性能。本发明的一实施例单独地为每一个单词编码数据。该方法允许为每一个关键字数 据集使用单独的编码表504(见图幻,以便优化每一个关键字内的压缩。为了解压数据,解 码信息必须对每一个关键字可用。一个实施例将编码表504与关键字一起存储为压缩表页 面的一部分。这样做是因为可以从编码表504导出所需的解码表并且编码表504较小,由 此节省存储空间。一旦生成了解码表,就可以解压和使用数据页404。图5示出了压缩表页面402的结构。该结果可以通过也参考图7中所示的数据页 404来最好地理解。在一较高层面,为每一个关键字存储的数据是对包含关键字的文档的一 系列引用。对于每一个文档,需要两个信息项文档ID(DocID)和关键字在文档中出现的次 数的出现计数(OccurCnt)。这些信息项被存储在数据页的单独部分,即DocID比特流708 和OccurCnt比特流710中。这是部分是因为不总是使用出现数据并且单独存储它意味着 无需使用DocID来检索它的事实。这些信息项都是使用压缩表页面402但以不同的方式来 编码的。OccurCnt被存储在OccurCnt比特流710中作为一系列可变长度位字段。OccurCnt 值可以在各文档中广泛地变化。鉴于此,存储OccurCnt所需的位数也是变化的。在一个实 施例中,使用固定数量的不同大小来存储OccurCnt。例如,字段的长度可以是0、3、7、12或 20位中的一个。结果,每一个文档会具有存储在具有这些有限长度数字中的一个的字段中 的OccurCnt。使用该属性,文档可以按照其对应的OccurCnt的长度来分组。在比特流402 中,这些组被称为类别并且每一个类别用类别描述符502表示。因为特定类别中的所有文 档具有相同的OccurCnt字段长度,所以仅需将该长度作为出现中的位字段606存储在类别 描述符502中一次,而非与每一个DocID存储在一起。这从内容索引扩展106中消除了大量 冗余数据。对于出现中的位,使用0值来指示OccurCnt值与对应于前一 DocID的OccurCnt 值相同。在OccurCnt比特流710中没有用于这些条目的条目。第一类别包含具有该特性 的所有DocID增量。图6示出了类别描述符502的一实施例。符号计数602指定类别中符号数量。 DocID增量阈值604指定将在类别中编码的DocID增量的上限。出现中的位606指定用于 存储OccurCnt比特流710中的对应于类别中的符号的每一个OccurCnt条目的位数。基础 符号值608( “BSV”)定义了加到每一个DocID增量值以使得它对该类别唯一的值。在类别中使用的每一个符号是对应于该类别的DocID增量和BSV的总和。对应于 每一个类别的DocID增量值的范围从O到(DocID阈值-1)。对应于第一类别的BSV是零 (0),而对应于所有其他类别的BSV等于前一类别的BSV加上类别中符号数。结果,由所有 类别表示的完整的符号集是从最小的DocID增量(0)到上一类别的BSV加上最大的经编码 的DocID增量的连续数列。在该数列中,不同的DocID增量集在每一个类别中重复,通过使 用不同的BSV被编码为不同的符号。该方法导致每一个DocID增量出现在每一个类别中, 由此与对应于出现中的位的每一个可用值配对。一个实施例也使用每一个类别内的连续的DocID增量值。每一个类别将包含一系 列相同的值。这允许根据符号和类别描述符计算DocID增量值。符号值用作对由类别表示的一系列DocID增量的索引。它落入哪一个类别确定对应于该类别的对应的出现中的位值 和BSV。从符号减去BSV确定DocID增量值。因为排序定义了每一个类别中的符号值,所以 无需存储符号。相反,可以按需计算符号值。也可以使用对类别中的值的其他固定排序来 获得相同的结果。代码以对应于类别描述符502中的条目的次序存储在编码表504中。编码表504 中的条目的数量等于所有组合类别中的条目的总数。该对应关系允许通过使用编码表504 中的代码索引来索引到类别中,来将代码映射到符号。这允许直接计算DocID增量或从类 别定义和编码表504中生成解码表。因为可以用这种方式执行解码,所以无需像哈夫曼编 码方案常用的那样将离散的符号值和代码一起存储在编码表504中。本发明的概念之一是内容索引扩展106内的出现信息不包含关于关键字出现在 相关联的文档中的哪里的任何数据。唯一的数据是关键字在文档中出现的次数。该出现计 数数据支持使用基于单词出现的频率来区分候选文档的相关性排序算法的查询。这可以使 用比本发明的内容索引扩展106特别地不支持的短语查询所需的数据少得多的数据来完 成。本发明的另一概念是出现计数数据被存储在与DocID增量信息分开的比特流中。这 允许检索DocID数据而无需检索出现数据。这进一步优化了供在单独的DocID是足够的情 况下使用的索引。也在某些相关性排序算法中使用的文档长度也不存储在内容索引扩展 (106)中,由此进一步减少了所存储的数据量。现在参考图7,DocID被存储在DocID比特流708内作为由哈夫曼编码算法生成的 一系列符号。第一步是将每一个DocID转换成距离前一 DocID的步长(或增量)。该DocID 增量是2个连续DocID之间的数值差。如果当前DocID是已知的,则增量值允许计算下一 DocID0因为增量比DocID小,所以使用增量减少了要存储的数据量。它也将唯一 DocID的 列表映射到哈夫曼压缩所需的小得多的有限数值集中。为了进一步限制可能的值的数量,比所选DocID增量阈值604大的所有DocID增 量被显式地存储在DocID比特流708内而非被存储为经编码的值。参考图9,经编码的 DocID条目会仅具有符号代码902。具有比DocID增量阈值大的增量值的那些DocID会用特 殊符号值表示,并且增量值会被显式地存储在下一字段中作为未经编码的DocID增量904。 一实施例将(BSV+DocID增量阈值)的值用作特殊符号。这是对标准哈夫曼编码方案的修 改。它具有减少需要编码的符号数的优点并且招致最小尺度的惩罚。这是因为在其中较大 百分比的文档包含关键字的搜索域中,DocID增量值通常会分布在相对较小的值集上。较 大的增量值会很少出现。在哈夫曼编码方案中,这会导致它们被分配最长的代码。将使用 的代码和增量值本身之间的长度差异相对较小,因此将增量存储为未经编码的值的代价是 最小的。在某些情况下,未经编码的增量和相关联的特殊符号值的组合长度实际上会比用 标准编码方法分配的符号要小。又一实施例使用两个不同的特殊符号值来为显式DocID增 量值选择两个不同的存储大小(即两个字节对比四个字节)以便进一步优化存储使用。再次参考图7,可以看出每一个数据页404开始于内务处理信息。在一个实施例 中,这包括指定存储在该页上的上一文档ID的上一 DocID 702和指定包括当前页面上的文 档ID的剩余文档ID的数量的剩余DocID数704。这些在导航通过数据页404时使用。数 据页404的下一部分是页面目录706,页面目录706是当前页面上的DocID的目录。对于每 一个DocID,存在页面目录条目800。一个实施例在图8中示出。DocID字段802标识条目适用的特定文档ID。DocID Cnt字段804指定当前DocID之前的页面中的DocID的数量。 DocID偏移量字段806指定从DocID比特流708的开头到DocID比特流708中的经编码的 DocID条目的位置的位偏移量。OccurCnt偏移量字段808指定从OccurCnt比特流710的 开头到OccurCnt比特流710中的OccurCnt条目的位置的位偏移量。这些值允许直接访问 对应于数据页404内的所选DocID的信息,其中并不期望遍历列表以找到该信息。压缩概览为内容索引扩展106生成经压缩的数据涉及两个独立的高级过程生成编码数 据;以及编码每一个条目。为每一个关键字重复每一个过程以便在内容索引扩展106中列 出。一种方法在下文中描述并且在图10中示出。生成编码数据生成编码数据的第一步是确定搜索域中包含关键字的文档的列表。对于每一个文 档,确定1004 DocID增量和OccurCnt值以及保存OccurCnt所需的出现中的位值。所有相 关文档中的这些值的完整集合被存储在单个文档列表中。使用该列表,基于DocID增量值 来确定用于类别的DocID增量阈值。在来自文档列表的信息可用的情况下,可以定义1006类别并指定类别描述符 502。对于每一个类别,符号计数602被定义为小于DocID增量阈值的值。符号计数602和 DocID增量阈值604值在所有类别中是公共的。向每一个类别分配从预定义的值集中顺序 地选出的不同的值以用于出现中的位字段606。接着向每一个类别分配不同的基础符号值 (BSV) 608,从O开始并且对于每一个后续类别按符号计数602递增。在定义类别之后,指定跨越所有类别的完整符号集1008。每一个符号被计算为对 应于于类别的BSV加上适当的DocID增量值。接着利用从文档列表导出的频率信息,使用 哈夫曼编码来生成对应于于每一个符号的不同的代码1010。每一个唯一的DocID增量和 出现中的位对在列表中出现的次数是对编码过程的输入,且给予更频繁使用的对更短的代 码。结合这些代码以创建以上讨论的格式的编码表504。接着可以将类别描述符502和编 码表504的组合集合写入1012到内容索引扩展106作为对应于关键字的压缩表页面402。为每一个文档编码数据在编码数据可用的情况下,可以编码文档列表中的每一个DocID增量/OccurCnt 对。对于列表中的每一个文件1014,使用相关联的出现中的位值来确定将在哪一个类别中 编码数据1016。将对应于类别的BSV 608加到DocID增量以确定符号1018。使用编码表 1020将该符号映射到其关联的代码,并且将该代码附加1022到DocID比特流708的末尾。 如果出现中的位是非O的,则将OccurCnt附加10 到该位数中的出现中的位的末尾。对于其中DocID增量大于DocID增量阈值604的特殊情况1024,会使用来自步骤 1020的对应于特殊符号的代码,并且会将DocID增量写入10 到DocID比特流708,紧接 着如图9所示的经编码的符号之后。当在步骤10 中在DocID比特流708和OccurCnt比特流710中积累了用于填充 数据页404的足够数据时,生成包括上一DocID 702、剩余DocID数704以及页面目录706的 首部信息,并且以图7中所示的格式将完整的数据页写入1030到内容索引扩展106中,且 开始新的数据页404。该处理继续直至所有文档信息被编码并且写入到内容索引扩展106, 包括写入1032上一个可能部分的数据页面。处理接着移动到要插入到内容索引扩展106的下一关键字。解压缩概览以类似于压缩的方式,解压缩涉及两个主要过程生成解码信息;以及接着为每 一个文档解码信息。通常这是对于在查询中指定的各个关键字完成的,而非一次为整个关 键字列表完成。一种方法在下文中描述并且在图11中示出。生成解码表通过引用类别描述符502将存储在压缩表页面402中的编码表504转换成解码表 1102。因为编码表504中的代码是以与出现在类别中的符号相同的顺序存储的,所以可以 通过枚举符号并按照它们存储在编码表504中的顺序将它们与代码进行匹配,来将代码到 符号映射重新创建为解码表。解码关于每一个文档的数据对于每一个文档1104,从DocID比特流708读取1106代码并且使用解码表来将 该代码映射到符号1108。将符号与对应于类别描述符502的BSV进行比较允许确定正确 的类别1110。这确定了要使用的出现中的位606值。检查1112符号以确定它是普通符号 还是特殊符号。如果它是普通的,则计算DocID增量。从符号减去对应于类别的BSV 608 生成对应的DocID增量值。将DocID增量加到上一经处理的DocID生成当前DocID。如 果需要OccurCnt,则可以使用出现中的位606值来从OccurCnt比特流710中读取1118该 OccurCnt0在其中从DocID比特流708读取的代码映射到指示超过DocID增量阈值604的 DocID增量的特殊符号的特殊情况下,在代码后立即从DocID比特流708读取DocID增量 值。在步骤1118之后,流程返回到步骤1104。在一个实施例中,支持对比特流的两种访问模式。通过在每一个比特流的开头处 开始并且维护到每一个比特流中的当前位置的指针,顺序访问是可用的。读取每一个代码 时,对于DocID比特流708的指针前进一位。因为哈夫曼编码使用无前缀代码,所以代码在 长度上变化并且可以按照其位顺序来识别。这意味着可以通过读取任一位来识别代码。对 于OccurCnt比特流710的指针递增对应于符号的出现中的位值。直接访问也经由页面目 录706可用。可以搜索目录以查找包含对应于所访问的文档的DocID字段802的页面目录 条目800。DocID偏移量804提供到DocID比特流708中的偏移量,而OccurCnt偏移量808 提供到OccurCnt比特流710中的偏移量。接着可以检索关于所访问的文档的数据或者从 该点开始顺序访问。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权 利要求书中定义的主题不必限于上述具体特征或动作。相反,上文所描述的具体特征和动 作是作为实现权利要求的示例形式来公开的。本领域的技术人员可以理解,构想结构中的 许多改变和具有很大不同的实施例和应用,而不背离所公开的主题的范围。
权利要求
1.一种搜索搜索域内的多个文档的方法,所述方法包括(a)提供(102 具有一系列连续、长度可变的文档ID增量条目(904)的经压缩的文档ID增量列表(708),对所述多个文档中包含关键字的每一个文档有一个所述文档ID增量条 目;(b)提供(102 具有一系列连续、长度可变的关键字出现计数条目的出现计数列表 (710),对所述经压缩的文档ID增量列表(708)中的多个文档中的至少某一些中的每一个 有一个所述关键字出现计数条目;以及(c)通过使用所述经压缩的文档ID增量列表(708)并使用所述出现计数列表(710)来 搜索(20 所述多个文档。
2.如权利要求1所述的方法,其特征在于,还包括将每一个关键字出现计数条目与有限的一组类别中的一个相关联,每一个类别具有出 现条目大小,且每一个关键字出现计数条目的大小等于所述出现条目大小。
3.如权利要求2所述的方法,其特征在于,一个类别具有指示所述关键字出现计数条 目不是存储在所述出现计数列表中的出现条目大小。
4.如权利要求2所述的方法,其特征在于,所述有限的一组类别中的每一个还包括基 值,并且所述文档ID增量列表中的每一条目表示类别基值和相关联的文档ID增量条目之 和的符号。
5.如权利要求4所述的方法,其特征在于,所述符号的值形成跨所述有限的一组类别 中的所有类别的单个连续数列。
6.如权利要求4所述的方法,其特征在于,还包括使用单个文档ID增量值集来表示所述文档ID增量列表,其中所述有限的一组类别中 的每一个表示整个文档ID增量值集,并且每一个离散文档ID增量值出现在具有不同符号 值的每一个所述类别中,由此每一个符号值表示不同的文档ID增量值和出现条目大小对。
7.如权利要求6所述的方法,其特征在于,还包括提供用于压缩所述文档ID增量列表的编码表,所述编码表中的代码排序对应于所述 有限的一组类别中的相关联的符号的次序,由此对应于所述编码表中的每一个代码的符号 可以基于所述代码排序来计算。
8.如权利要求7所述的方法,其特征在于,还包括(a)使用通过指定文档ID增量大小的上阈值修改的哈夫曼编码来压缩所述文档ID增 量列表;(b)不编码大于所述上阈值的所有文档ID增量值;以及(c)显式地将大于所述上阈值的所有文档ID增量值存储在所述文档ID增量列表中。
9.如权利要求1所述的方法,其特征在于,还包括其中所述经压缩的文档ID增量列表基于多个关键字来标识文档集,通过使用所述经 压缩的文档ID增量列表来搜索所述文档集以标识包含给定关键字的文档子集,并且使用 所述出现计数列表来标识所述给定关键字出现在所述文档子集中的每一个文档中的次数。
10.一种搜索出现在搜索域内的多个文档中的关键字的方法,所述方法包括(a)使用索引(100)来标识包含所述关键字的那些文档,所述索引(100)具有经编码的 文档ID增量列表(708),所述文档ID增量列表具有多个条目,每一个所述条目使用符号来表示对应于所述搜索域中包含所述关键字的多个文档中的每一个的文档ID增量值。(b)将所述文档ID增量列表(708)中的每一个符号(902)与有限的一组类别(502)中 的一个类别以及所述有限的一组类别(502)中的每一个类别内的次序相关联(1016)。
11.如权利要求10所述的方法,其特征在于,每一个类别包括基值,且所述文档ID增 量列表中的每一个符号是对应于相关联的类别的基值和所述符号表示的文档ID增量值之 和。
12.如权利要求11所述的方法,其特征在于,还包括使用单个文档ID增量值集来表示所述文档ID增量列表,每一个所述类别表示整个文 档ID增量值集并且每一个离散文档ID增量值出现在具有不同符号值的每一个所述类别 中。
13.如权利要求12所述的方法,其特征在于,还包括通过使用编码表的方法来编码所述文档ID增量列表,所述编码表中的代码排序对应 于所述类别中的相关联的符号的次序,由此对应于所述编码表中的每一个代码的符号可以 基于所述代码排序来计算。
14.如权利要求10所述的方法,其特征在于,还包括(a)使用通过指定文档ID增量大小的上阈值修改的哈夫曼编码来压缩所述文档ID增 量列表;(b)不编码大于所述上阈值的所有文档ID增量值;以及(c)显式地将大于所述上阈值的所有文档ID增量值存储在所述文档ID增量列表中。
15.如权利要求10所述的方法,其特征在于,还包括使用出现计数列表来确定关键字在每一个文档中的出现次数,其中所述出现计数列表 具有与所述文档ID增量列表中的至少某些条目相关联的关键字出现计数条目。
16.如权利要求15所述的方法,其特征在于,所述出现计数列表包括一系列连续的长 度可变条目,且每一个条目的长度选自有限的一组固定值。
17.如权利要求16所述的方法,其特征在于,还包括(a)将每一个类别与出现条目大小相关联;以及(b)将对应于与所述类别相关联的文档ID增量列表条目的每一个出现计数列表条目 存储在其大小等于与所述类别相关联的大小的字段中。
18.如权利要求17所述的方法,其特征在于,一个类别具有指示出现计数不是存储在 所述出现计数列表中的出现条目大小。
19.一种搜索出现在搜索域内的多个文档中的关键字的方法,所述方法包括(a)提供具有多个关键字条目(400)的索引结构(100),其中每一个所述关键字条目 (400)包括(1)多个逻辑类别(502)(i)每一个所述类别(50 具有基础符号值(608)、出现条目大小(606)和符号集,( )每一个所述类别(502)将一系列相同的连续文档ID增量值表示为一系列不同的 符号(1008),并且(iii)每一个所述符号(1008)被计算为对应于所述类别(50 的基础符号值(608)和 所述符号(60 表示的文档ID增量值之和;(2)具有一系列连续、长度可变的文档ID增量条目(904)的经压缩的文档ID增量列表 (708),对所述搜索域内的多个文档中包含所述关键字的每一个文档有一个所述文档ID增 量条目(708)(i)每一个所述文档ID增量条目(904)与所述多个逻辑类别(502)中的一个相关联,并且( )每一个所述文档ID增量条目(904)包括来自相关联的逻辑类别(502)的对应符 号(1008);(3)具有一系列连续、长度可变的关键字出现计数条目的出现计数列表(710)(i)每一个所述出现计数条目与所述文档ID增量条目(904)中的一个相关联,并且 ( )每一个所述关键字出现计数条目存储在其大小等于对应于与所述文档ID增量条 目(904)相关联的逻辑类别(502)的出现条目大小(606)的字段中;以及(4)具有代码(90 列表的编码表(504)(i)每一个所述代码(90 与来自所述多个逻辑类别(50 中的一个的符号相关联,并且( )代码排序对应于所述多个逻辑类别(502)中的相关联的符号的次序,由此对应于 所述编码表(504)中的每一个所述代码(902)的符号可基于所述代码排序来计算;以及(b)通过以下动作来搜索(20 所述多个文档使用所述文档ID增量列表来标识包含 所述关键字的文档,使用所述出现计数列表(710)来标识所述关键字出现在每一个文档中 的次数,以及使用所述编码表(504)来压缩所述文档ID增量列表(708)。
20.如权利要求19所述的方法,其特征在于,还包括(a)使用通过指定文档ID增量大小的上阈值修改的哈夫曼编码来压缩所述文档ID增 量列表;(b)不编码大于所述上阈值的所有文档ID增量值;以及(c)显式地将大于所述上阈值的所有文档ID增量值存储在所述文档ID增量列表中。
全文摘要
提供了一种搜索索引结构,其通过结合为从存储中进行快速检索而优化并且消除专用于短语搜索的数据的索引来扩展典型的复合索引。其他数据以允许计算数据而非存储数据的方式来表示。将可变长度条目与逻辑类别相关联允许从类别推断条目长度而非存储类别长度。使用文档ID之间的增量值而非ID本身生成通过哈夫曼编码或类似的压缩方法来高效地压缩的紧凑的、密集的符号集。在编码之前使用上阈值来从该符号集中移除较大的且由此少见的增量值进一步提高编码性能。
文档编号G06F17/21GK102057378SQ200980122470
公开日2011年5月11日 申请日期2009年5月13日 优先权日2008年6月13日
发明者A·I·科汉, C·C·梅里根, M·佩特立克, R·卡萨诺夫 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1