具体实施方式
本发明的主题在此处利用特异性来描述以满足法定要求。但是,该描述本身并不旨在限制这个专利的范围。相反,发明人已考虑:结合其他的现在或未来的技术,所请求保护的主题也可以采用其他的方式来体现,以包括不同的步骤或与这个文档中所描述的相类似的步骤的组合。此外,虽然在这里可以使用术语“步骤”和/或“方框”来暗示所采用的方法的不同元素,但是除非且除了明确地描述个别步骤的顺序之外,这些术语不应被解释为暗示在这里披露的各个步骤之中或之间的任何特定顺序。
本发明的实施例涉及优先散列索引,其是驻留在若干层的存储设备上的数据结构,用于提供搜索索引中项的倒排列表的有效查找。应该注意:“项(term)”在这里被宽泛地用来指示在利用搜索索引进行索引的文档中找到的单个词或多个词(例如,短语、n字尾(n-gram)、n元组等等)。
优先散列索引围绕为利用搜索***索引进行索引的项的群组提供“搜索列表”来构造。概念地,搜索列表是被分布在每一个存储设备的存储位置上的列表结构。每一个搜索列表中的项被散列为独特的数字,而从这些独特的数字中导出两个散列值。用于搜索列表中的所有项的第一散列值在第一存储设备上选择相同的位置,其中所述位置用作搜索列表中的起点。第二散列值消除搜索列表中的各个项的歧义,并且基于项重要性(从最高到最低)被存储在从最快存储设备到最慢存储设备的不同存储设备中。项重要性可以基于诸如与该项相关联的倒排列表的长度或访问统计信息之类的因素。
在本发明的一些实施例中,较高层的存储设备(即,较快的存储设备)存储各自一般包括用于项的散列值以及用于项的倒排列表的地址的数据条目。在一些实例中,如果倒排列表是短的,那么可以与散列值一起内联存储倒排列表。相反,较低层(或最低层)的存储设备(即,一个或多个最慢的存储设备)包括各自一般包括用于项的散列值的数据条目,其中用于该项的倒排列表被内联存储。特别地,如果该层次中的存储设备具有显著的输入/输出等待时间(例如,硬盘驱动器)以致多次访问该设备将显著影响性能,那么倒排列表可以被内联存储在那个存储设备上。
在操作中,在接收到搜索查询时,识别和散列项,以导出两个散列值。第一散列值选择第一存储设备中的存储位置。该存储位置被读取,以确定它是否包含用于第二散列值的数据条目。如果在该存储位置上找到包括第二散列值的数据条目,则用于该项的倒排列表的地址从该数据条目中进行检索并被用于访问倒排列表。例如,第一存储设备可以是RAM,而倒排列表被存储在硬盘驱动器中。这样,存储在RAM上的地址与硬盘驱动器上存储用于该项的倒排列表的位置相对应。
如果第一存储设备上的存储位置不包含第二散列值,该处理通过检索在该层次的存储设备中的下一个存储设备上的存储位置的地址来继续。下一个存储设备上的存储位置包含搜索列表的延续。该处理可以通过顺序读取该层次中的存储设备上的存储位置来继续,直至定位第二散列值。如果在最后存储设备的存储位置上找到第二散列值,则倒排列表与第二散列值内联存储。这样,将只需要访问一次最后的存储设备(即,最慢的存储设备)来访问倒排列表。
相应地,在一个方面中,本发明的实施例涉及用于为搜索引擎存储优先散列索引的***。该***包括第一类型的第一数据存储设备。第一数据存储设备具有多个存储位置,其中第一数据存储设备上的第一存储位置存储多个数据条目,其中每一个条目包括与项相对应的散列值以及定位用于该项的倒排列表的地址。第一存储位置也存储第二数据存储设备上的第二存储位置的地址。第二数据存储设备具有第二类型并且具有多个存储位置,其中第二数据存储设备上的第二存储位置存储多个数据条目,其中每一个数据条目包含与项相对应的散列值以及定位用于该项的倒排列表的地址。第二存储位置也存储第三数据存储设备内的第三存储位置的地址。第三数据存储设备具有第三类型并且具有多个存储位置,其中第三数据存储设备上的第三存储位置存储多个数据条目,其中每一个数据条目包含与项相对应的散列值以及用于该项的倒排列表。
在另一实施例中,本发明的一个方面涉及用于访问搜索索引中的数据的方法。该方法包括:接收与搜索查询中的搜索项相对应的散列值。该方法也包括:识别第一存储设备上的第一存储位置,以及确定散列值是否存储在第一存储位置上。如果散列值存储在第一存储位置上,则该方法包括从第一存储位置中检索倒排列表的地址以及使用那个地址来访问倒排列表。如果散列值没有存储在第一存储位置上,则该方法包括从第一存储位置检索第二存储设备上的第二存储位置的地址。该方法随后包括确定是否散列值存储在第二存储位置上。如果散列值存储在第二存储位置上,那么该方法包括从第二存储位置检索倒排列表的地址以及使用那个地址来访问倒排列表。如果散列值没有存储在第二存储位置上,那么该方法包括从第二存储位置检索第三存储设备上的第三存储位置的地址。该方法随后包括确定散列值是否存储在第三存储位置上。如果散列值没有存储在第三存储位置上,则该方法包括确定放弃搜索该散列值。如果散列值存储在第三存储位置上,那么该方法包括从第三存储位置访问倒排列表。
本发明的进一步实施例涉及一个或多个存储计算机可用指令的计算机存储媒体,其中计算机可用指令当被计算设备使用时导致计算设备执行方法。该方法包括:接收搜索查询;识别搜索查询中的项;以及散列该项,以生成第一散列值和第二散列值。该方法也包括:识别RAM中与第一散列值相对应的缓存线,该缓存线包含多个数据条目,其中每一个数据条目包括与给定项相对应的散列值以及用于给定项的倒排列表的地址。该方法进一步包括:确定缓存线是否包含第二散列值。如果缓存线包含第二散列值,则该方法包括从缓存线中检索与第二散列值相对应的倒排列表的地址以及使用那个地址来访问倒排列表。如果缓存线不包含第二散列值,那么该方法包括从缓存线中检索包含多个数据条目的基于闪存的固态设备中的页面的地址,其中每一个数据条目包括与给定项相对应的散列值以及用于给定项的倒排列表的地址。该方法随后包括确定是否该页面包含第二散列值。如果该页面包含第二散列值,那么该方法包括从该页面中检索与第二散列值相对应的倒排列表的地址以及使用那个地址来访问倒排列表。如果该页面不包含第二散列值,那么该方法包括采用存储在该页面中的布隆过滤器。如果第二散列值没有通过布隆过滤器,那么该方法包括确定放弃搜索第二散列值。如果第二散列值通过布隆过滤器,那么该方法包括从该页面检索包含多个数据条目的硬盘驱动器中的页面文件的地址,其中每个数据条目包括与给定项相对应的散列值以及用于给定项的倒排列表。该方法随后包括确定是否该页面文件包含第二散列值。如果该页面文件不包含第二散列值,那么该方法包括确定放弃搜索第二散列值。如果该页面文件包含第二散列值,那么该方法包括从该页面文件中访问与第二散列值相对应的倒排列表。
已描述了本发明的实施例的概述之后,下面描述其中可以实现本发明的实施例的示例操作环境,以便为本发明的各个方面提供一般上下文。特别地,最初参考图1,用于实现本发明的实施例的示例操作环境被显示并且一般被表示为计算设备100。计算设备100仅是合适计算环境的一个示例并且不打算对本发明的使用范围或功能建议任何的限制。计算设备100既不应被解释成具有与所示出的任一组件或其组合相关的任何依赖或要求。
本发明可以在由计算机或其他机器诸如个人数据助理或其他手持设备运行的包括诸如程序模块之类的计算机可执行指令的计算机代码或机器可用指令的一般上下文中进行描述。一般,包括例程、程序、对象、组件、数据结构等等的程序模块指的是执行特定任务或实现特定抽象数据类型的代码。本发明可以在包括手持设备、消费电子设备、通用计算机、更专业计算设备等等的各种***配置中进行实践。本发明也可以在其中任务由通过通信网络链接的远程处理设备来执行的分布式计算环境中进行实践。
参考图1,计算环境100包括直接或间接耦合到以下设备的总线110:存储器112、一个或多个处理器114、一个或多个呈现组件116、输入/输出(I/O)端口118、输入/输出组件120以及说明性的电源122。总线110所代表的可以是一条或多条总线(诸如地址总线、数据总线或其组合)。虽然为了清楚起见而利用线条来显示图1的各个方框,但是在现实中,勾画各个组件并不是如此清楚的,并且隐喻地,这些线条将更确切地是灰色和模糊的。例如,可以将诸如显示设备之类的呈现组件考虑为I/O组件。此外,处理器具有存储器。发明人认识到:这是本领域的性质,并且重申图1的图示仅仅说明能够与本发明的一个或多个实施例结合使用的示例计算设备。不区分诸如“工作站”、“服务器”、“膝上型计算机”、“手持设备”等的类别,这是因为全部被考虑在图1的范畴之内并且称为“计算设备”。
计算设备100通常包括各种计算机可读媒体。计算机可读媒体可以是能够被计算设备100访问的任何可用媒体,并且包括易失性和非易失性媒体、可移动和不可移动媒体二者。通过示例而非限制,计算机可读媒体可以包括计算机存储媒体和通信媒体。计算机存储媒体包括以任何方法或技术实现的用于存储诸如计算机可读指令、数据结构、程序模块或其他数据之类的信息的易失性和非易失性媒体、可移动和不可移动媒体二者。计算机存储媒体包括但不限于RAM、ROM、EEPROM、闪存或其他存储技术、CD-ROM、数字多用途碟片(DVD)或其他光盘存储设备、磁带盒、磁带、磁盘存储设备或其他磁存储设备或任何其他的能够用于存储所需信息并能够被计算设备100访问的介质。通信媒体一般在诸如载波或其它传送机制之类的调制数据信号中包括计算机可读指令、数据结构、程序模块或其它数据。术语“调制数据信号”表示其特征中的一个或多个特征采用编码信号中的信息的方式进行设置或改变的信号。通过示例而非限制,通信媒体包括有线媒体诸如有线网络或直接有线连接以及无线媒体诸如声学、RF、红外和其它无线媒体。以上任何的组合也应该被包括在计算机可读媒体的范围之内。
存储器112包括采用易失性和/或非易失性存储器形式的计算机存储媒体。该存储器可以是可移动的、不可移动的或其组合。示例的硬件设备包括固态存储器、硬盘驱动器、光盘驱动器等等。计算设备100包括一个或多个处理器114,其从诸如存储器112或I/O组件120之类的各个实体中读取数据。一个或多个呈现组件116将数据指示呈现给用户或其他设备。示例的呈现组件包括显示设备、扬声器、打印组件、振动组件等等。
I/O端口118允许计算设备100逻辑地耦合到包括I/O组件120的其他设备,其中的一些设备可以是内置的。说明性的组件包括麦克风、操纵杆、游戏手柄、卫星碟形天线、扫描仪、打印机、无线设备等等。
现在转到图2,提供说明根据本发明的实施例用于搜索索引的优先散列索引的图示。如先前所指示的,优先散列索引是有助于用于搜索查询中提交的项的倒排列表的有效查找的数据结构。图2所示的优先散列索引驻留在三个存储设备即RAM 202、基于闪存的固态设备(SSD)204以及硬盘驱动器(HDD)206上。应该注意:在本发明的实施例的范围之内可以采用其他类型的存储设备。此外,虽然图2说明遍布在三个存储设备上的优先散列索引,但是根据本发明的各个实施例的优先散列索引可以采用两个或更多的存储设备。
根据本发明的实施例,利用搜索索引进行索引的项被组合到“搜索列表”中。每一个搜索列表包括利用搜索索引进行索引的项的一部分并被存储在三层的存储设备上:即RAM 202、SSD 204以及HDD 206。例如,图2说明是搜索列表的一部分的许多项208。这些项208均被散列成独特的散列值。在本发明的各个实施例内可以采用各种不同的散列函数中的任何一个。通过示例而非限制,可以采用MD4散列函数。
在实施例中,对这些项进行散列提供两个散列值。这两个散列值可以是单独的值,或可以是利用散列函数生成的较大散列值的部分。第一散列值用于识别搜索列表,而第二散列值用于消除每一个搜索列表中的各个项的歧义。
作为说明,用于项208的群组中的每一个项的第一散列值选择RAM 202中的缓存线210。这样,缓存线210用作用于项208的群组的搜索列表的入口点。RAM 202中的每一个其他的缓存线用作包括利用搜索索引进行索引的不同集合项的不同搜索列表的入口点。
用于项208的群组的第二散列值基于这些项的重要性而被遍布在从最快的存储设备到最慢的存储设备的三层存储设备上。例如,用于最重要项的散列值存储在RAM 202中,用于下一最重要项的散列值存储在SSD 204上,而用于最不重要项的散列值存储在HDD 206上。项的重要性在本发明的各个实施例中可以基于许多因素。例如,项的重要性可以基于用于这些项的倒排列表的长度。特别地,较长的倒排列表可以表示更大的重要性。项的重要性也可以基于与每一个项响应于搜索查询而被历史访问的频率相关的访问统计信息。被更频繁访问的项可以被认为是更重要的。在一些实施例中,项重要性可以基于排名函数(例如,BM25f排名函数或通用排名函数F(a, q)=(0..1))。
如图2所示,RAM 202中的缓存线210包括多个数据条目212。每一个数据条目包括散列值以及用于与那个散列值相对应的项的倒排列表的地址。在一些实施例中,倒排列表可以存储在HDD 206的不同位置上,并且每一个数据条目的地址可以与HDD上存储倒排列表的位置相对应。在图2所示的示例中,缓存线210包括用于十个散列值的数据条目。这些散列值与搜索列表中十个最重要的项相对应。
缓存线210也包括SSD 204上的位置216(例如,页面)的地址214。SSD 204上的位置216包括开始于RAM 202的缓存线210上的搜索列表的延续。如图2所示,位置216包括许多数据条目218。每一个数据条目包括散列值以及与散列值相对应的项的倒排列表的地址。在一些实施例中,倒排列表可以存储在HDD 206的不同位置上,并且每一个数据条目的地址可以与HDD 206上存储倒排列表的位置相对应。在图2所示的示例中,位置216包括用于244个散列值的数据条目。这些散列值与在缓存线210中存储的前十个项之后的下一个最重要的项相对应。
SSD 204上的位置216也存储布隆过滤器220。布隆过滤器可以基于存储在HDD 206中的搜索列表的剩余散列值来构造。SSD 204上的位置216进一步包括HDD 206上的位置224(例如,页面文件)的地址222。HDD 224上的位置224包括从存储在SSD 204的位置216上的数据条目开始继续的搜索列表的延续。如图2所示,HDD 224上的位置224包括许多数据条目226。每一个数据条目包括散列值以及用于与那个散列值相对应的项的倒排列表。换句话说,倒排列表与散列值一起内联存储在HDD 224上,这与在RAM 202和SSD 204上存储地址相反。在图2所示的示例中,位置216包括用于1240个散列值的数据条目。这些散列值与搜索列表中最不重要的项相对应。
在一些实施例中,短的倒排列表可以内联存储在RAM 202和/或SSD 204中。特别地,如果存储在RAM 202或SSD 204上的项的倒排列表短于某个阈值以致它将不会消耗过多的存储空间,那么可以将倒排列表与用于该项的散列值一起存储在RAM 202或SSD 204上,这与将倒排列表存储在别处并证明在RAM 202或SSD 204上的地址相反。这在短的倒排列表的情况下避免寻找HDD 206。
在操作中,当接收到搜索查询时,项被识别并被散列,以生成第一和第二散列值。例如,用于项208的群组中的项的第一散列值将选择缓存线210作为搜索列表的入口点。缓存线上的数据条目被读取,以确定其是否包含用于该项的第二散列值。如果是的话,则与存储的散列值相关联的倒排列表地址用于访问用于该项的倒排列表。如果否的话,则SSD地址214从缓存线210中进行检索并被用于访问SSD 204上的位置216。存储在SSD 204的位置216上的数据条目被读取,以确定其是否包含第二散列值。如果是的话,则具有存储的散列值的倒排列表地址用于访问用于该项的倒排列表。如果否的话,则检查布隆过滤器220,以确定第二散列值是否有可能被HDD 206上的搜索列表的延续所包含。在这一点上使用布隆过滤器,这是因为下一步骤将是访问HDD 206,这与访问RAM 202和SSD 204相比是极其缓慢的。如果第二散列值未通过布隆过滤器,则第二散列值不存储在HDD 206上,并且该处理被放弃。这样,避免针对HDD 206的不必要访问。作为替换,如果第二散列值通过布隆过滤器,则HDD地址222从SSD 204上的位置216中进行检索并被用于访问HDD 206上的位置224。存储在HDD 206的位置224上的数据条目226被读取,以确定其是否包含第二散列值。如果是的话,则访问与第二散列值相关联存储的倒排列表。因为用于存储在HDD 206上的散列值的倒排列表与散列值一起内联存储,所以只需要访问一次HDD 206来定位散列值和检索对应的倒排列表。如果数据条目226不包含第二散列值,那么该处理被放弃,这是因为该项没有被搜索***索引。
相应地,图2的优先散列索引说明跨越RAM 202、SSD 204和HDD 206的三层数据结构。这允许有界搜索来利用至多一次短的SSD读取和一次短的HDD读取来找到(turn up)倒排列表。
接下来参考图3,提供说明其中可以采用本发明的实施例的示例***300的框图。应该明白:这里描述的这种以及其他安排仅仅作为示例来阐述。除了所显示的之外或替代所显示的,还能够使用其他的安排和元素(例如,机器、接口、功能、命令和功能的分组等等),并且某些元素可以一起被省略。进一步,这里描述的许多元素是功能实体,其中这些功能实体可以被实现为分立组件或分布式组件或与其他组件相结合来实现,并且可以在任何合适的组合和位置中进行实现。在这里被描述为由一个或多个实体执行的各种功能可以利用硬件、固件和/或软件来完成。例如,各种功能可以通过处理器运行存储在存储器中的指令来完成。
除了未显示的其他组件之外,***300可以包括用户设备302、内容服务器304和搜索引擎服务器306。例如,图3所示的每一个组件可以是任何类型的计算设备,诸如参考图1所描述的计算设备100。这些组件可以经由网络308彼此通信,其中网络可以包括但不限于一个或多个局域网(LAN)和/或广域网(WAN)。这样的联网环境在办公室、企业范围计算机网络、内联网和因特网中是司空见惯的。应该明白:在本发明的范围内在***300内可以采用任何数量的用户设备、内容服务器和搜索引擎服务器。每一个可以包括在分布式环境中协作的单个设备或多个设备。例如,搜索引擎服务器306可以包括安排在分布式环境中共同提供在这里描述的搜索引擎服务器306的功能的多个设备。此外,在***300内也可以包括未显示的其他组件。
搜索引擎服务器306一般操作来接收来自诸如用户设备302之类的用户设备的搜索查询,并响应于搜索查询来提供搜索结果。特别地,搜索引擎服务器306包括索引组件310、用户界面组件312和索引访问组件314。
索引组件310操作来索引与诸如内容服务器304之类的内容服务器所保持的文档相关的数据。例如,抓取组件(未显示)可以被采用来抓取内容服务器和访问与内容服务器所保持的文档相关的信息。索引组件310随后在搜索索引316中索引与抓取的文档相关的数据,这包括用于该文档中所识别的项的倒排列表。在实施例中,索引组件310也生成优先散列索引,用于搜索索引中项的有效查找。如前所讨论的,优先散列索引被遍布在多种类型的存储设备上。例如,在一个实施例中,优先散列索引存储在RAM、基于闪存的SSD和HDD上。用于项的散列值基于项的重要性而被存储在存储设备上,其中更重要项的散列值首先填充最快的存储设备,而不太重要的项的散列值存储在较慢的存储设备上。
用户界面组件312给诸如用户设备302之类的用户设备提供界面,其中该界面允许用户向搜索引擎服务器306提交搜索查询并接收来自搜索引擎服务器306的搜索结果。用户设备302可以是用户采用来提交搜索查询并接收搜索结果的任何类型的计算设备。通过示例而非限制,用户设备302可以是台式计算机、膝上型计算机、平板计算机、移动设备或其他类型的计算设备。用户设备302可以包括允许用户输入搜索查询并提交搜索查询给搜索引擎服务器306以检索搜索结果的应用。例如,用户设备302可以包括网络浏览器,其中该浏览器包括搜索输入框或允许用户访问搜索页面来提交搜索查询。用于向搜索引擎提交搜索查询的其他机制被考虑是在本发明的实施例的范围之内的。
当经由用户界面组件312接收到搜索查询时,从搜索查询中识别一个或多个项。索引访问组件314随后操作来在搜索索引316中识别用于每一个项的倒排列表。索引访问组件314采用由索引组件310生成的优先散列索引来识别其上存储用于每一个项的倒排列表的位置。在实施例中,索引访问组件314散列项,以识别第一存储设备上的位置和生成用于识别该项的倒排列表的散列值。索引访问组件310顺序访问存储优先散列索引的每一个存储设备,直至定位用于该项的散列值,并且随后检索对应的倒排列表(除非未索引该项,在这种情况下,该处理被放弃)。
由索引访问组件314为接收到的搜索查询中的项所检索的倒排列表用于为搜索查询生成搜索结果。这些搜索结果随后可以利用用户界面组件312被传送到用户设备302,以便这些搜索结果可以被呈现给提交该搜索查询的终端用户。
现在参考图4,提供说明根据本发明的实施例用于经由优先散列索引访问搜索索引中的数据的方法400的流程图。最初,如方框402所示,由搜索引擎接收搜索查询。该搜索查询可以包括一个或多个项。如方框404所示,至少一个项被识别,以便进一步处理。在方框406,通过对该项应用散列函数来散列该项。在本发明的各个实施例中可以采用各种不同的散列函数中的任何一种。通过示例而非限制,可以采用MD4散列函数。
在方框406散列项的处理可以包括生成两个散列值。在一个实施例中,生成大的散列值,从这个大的散列值中生成两个较小的且不相关的散列值。仅通过示例而非限制,可以生成72比特散列,从中可以导出包含24比特的第一散列值和包含48比特的第二散列值。第一散列值可以用于识别搜索列表,而第二散列值可以用于消除搜索列表中的多个条目的歧义。
如方框408所示,第一散列值用于识别第一存储设备内的存储位置。在一个实施例中,第一存储设备是RAM,而存储位置是该RAM中的缓存线。该存储位置包括许多数据条目,其中每一个数据条目包括散列值和倒排列表的地址。
如方框410所示,在第一存储设备上所识别的存储位置被读取,以确定其是否包含为该项确定的第二散列值。如果在方框412确定第一存储设备上的存储位置包含第二散列值,那么如方框414所示从第一存储设备上的存储位置中检索与第二散列值一起存储的地址。该地址与用于该项的倒排列表相对应。这样,如方框416所示,用于该项的倒排列表被访问。如方框418所示,倒排列表用于生成搜索结果。如方框420所示,响应于原始搜索查询,提供这些搜索结果,以便返回给终端用户。
如果在方框412确定第一存储设备上的存储位置不包含第二散列值,那么如方框422所示从第一存储设备上的存储位置中检索第二存储设备上的存储位置的地址。在一个实施例中,第二存储设备是基于闪存的固态设备,而存储位置是基于闪存的固态设备上的页面。第二存储设备上的存储位置也包括许多数据条目,其中每一个数据条目包括散列值和倒排列表的地址。
如方框424所示,在第二存储设备上所识别的存储位置被读取,以确定其是否包含为该项确定的第二散列值。如果在方框426确定第二存储设备上的存储位置包含第二散列值,那么如方框428所示从第二存储设备上的存储位置中检索与第二散列值一起存储的地址。该地址与用于该项的倒排列表相对应。这样,如方框430所示,用于该项的倒排列表被访问。如方框432所示,倒排列表用于生成搜索结果。如方框434所示,响应于原始搜索查询,提供这些搜索结果,以便返回给终端用户。
如果在方框426确定第二存储设备上的存储位置不包含第二散列值,那么如方框436所示检查存储在第二存储设备的存储位置上的布隆过滤器,以确定搜索列表的延续是否有可能包含第二散列。如果在方框438确定第二散列值未通过布隆过滤器,则在方框440放弃该访问处理,这是因为在搜索索引中没有为该项编制索引。作为替换,如果第二散列值在方框438通过布隆过滤器,那么从第二存储设备上的存储位置中检索第三存储设备上的存储位置的地址,如方框442所示。在一个实施例中,第二存储设备是硬盘驱动器,并且存储位置是硬盘驱动器上的页面文件。第三存储设备上的存储位置包括许多数据条目,其中每一个数据条目包括散列值和对应的倒排列表。
如方框444所示,在第三存储设备上所识别的存储位置被读取,以确定其是否包含为该项确定的第二散列值。如果在方框446确定第三存储设备上的存储位置不包含第二散列值,则在方框448放弃该访问处理,这是因为在搜索索引中没有为该项编制索引。作为替换,如果在方框446确定第三存储设备上的存储位置包含第二散列值,那么与第二散列值相关联存储在第三存储设备的存储位置上的倒排列表被访问,如方框440所示。如方框442所示,倒排列表用于生成搜索结果。如方框444所示,响应于原始搜索查询,提供这些搜索结果,以便返回给终端用户。
如能够明白的,本发明的实施例提供一种优先散列索引,其允许对于搜索查询中的项的倒排列表的有效查找,以便响应于搜索查询而生成搜索结果。
已结合特定实施例描述了本发明,其中这些特定实施例在所有方面都旨在说明性而非限制性的。对于本发明所涉及的领域中的普通技术人员来说,在不脱离本发明的范围的情况下,可选择的实施例将变得明显。
鉴于前述的,这个发明适合于实现上面阐述的所有目的和目标以及对于所述***和方法而言是明显的且固有的其他优点。将明白:某些特征和子组合具有实用性并且可以被采用而无需参考其他的特征和子组合。这被权利要求书所考虑并被包含在权利要求书的范围之内。