高效的搜索结果更新机制的制作方法

文档序号:6563788阅读:373来源:国知局

专利名称::高效的搜索结果更新机制的制作方法高效的搜索结果更新机制对相关申请的交叉引用〖0001本申请基于2006年8月23日提出的美国临时申请No.60/823,370,并要求该申请的优先权,该专利申请的全部内容以引用的方式并入本文中。
技术领域
FromTabicnameWhere[ColumnnameoperatorValue〖and/orColumnnameoperatorValue]在上文的语句中,括号对(,,["和"")之间的一切都是可选的。使用SQLSelect语句中的Where子句来指定选择准则,该选择准则用于过滤从表中选择的数据。每一个列名称运算符值都是作为过滤结果集中的要返回的数据的过滤器(sieve)的准则条件。在此示例中,不返回第一条记录,因为该记录中的STATE的值不匹配任何一个条件,因此其未通过过滤。w250001"""00000}C3={"HomePrice"5"w"w200001J400000}C4={"HomePrice"5"薦w500001aw"00000}C5={"HomePrice"350001600000}通过利用200001到300000的区间在"范围"索引表中创建一行,来索引第一条件Cl。此行被映射到条件Cl。在图2A用图形方式显示了结果,显示了在向"HomePrice,,范围索引中添加了此条件之后会发生什么。此时使用此索引,条件Cl将被认为对于落在此区间(200001300000)内的任何"HomePrice"值都为真,所有其他值都将没有"真"条件。条件中措定的范周通常映射到Rangelndex表中的一组范围。Rangelndex表中的每个范围都在IndexXRef表中具有对应的条目。随着数据库的增长,范围倾向于变得越来越小,数量变得越来越多。如果希望向巨大的数据库中插入宽的范围,则IndexXRef表中的要被更新的记录的数量会非常大。如此,处理范围的如前所述的过程被证明是昂贵的。为克服此问题,本发明的一个示例包含一组表,即,HigherOrderNumericRangelndex和HigherOrderDateRangelndex表。如果希望向系统中添加范围,那么,从根开始,本处理开始从顶部向下对树进行分析。如果一个节点完全在添加的范围内,那么,它直接就包括在该节点中。如果一个节点比添加的范围本身更宽,或比添加的范围的一部分更宽,那么,探查该节点的子节点。如果一个节点不与添加的范围交叠,那么,忽略该节点。如此,如果添加范围35,001-250k,则本处理探查根的子节点,因为根范围(0-oo)比给定范围更宽。现有的2级节点50-100k,100-150k和150-200k完全在给定范围内。如此,这些被直接包括。由于现有的2级节点0-50k和200-00包含给定范围的一部分,因此本处理探查它们的子节点。在0-50k节点的子节点中,节点40-50k完全在该范围内,而30-40k包括该范围的一部分。注意,30-40k节点是叶子,没有任何子节点要探查。如此,向现有的0级30-40k节点中添加0级节点(30-35k),以便不与所包括的节点中的任何一个节点交叠,但是,完全覆盖添加的范围。类似地,向现有的0级节点200-500k添加0级节点200國250k。例如,考虑给出一个人的工资的数值属性。此属性的通用范围将是0到Qo。预计工资的分布具有大约70k的中值。考虑2个范围60-80k和0-30k。可以预期,在前一范围内,有较高的命中频率,在后一范围内,有较低的命中频率。如此,范围60-80k被分为,例如,二十个范围,每一个的宽度为1000,而范围0-30k^皮分为仅两个范围。根据某些方面,优选情况下,本发明避免了重新分割现有的范围,因为这会导致记录的拷贝。在物理上,这些树可以以存储器结构或使用物理数据库表来实现。这里将讨论物理数据库实现方式。用两个表—节点和节点分支表一来实现树。构建对应于开始属性和每个起始字母的每一个组合的根节点。图4A到4E和下面的描述显示了这些表的结构的一个示例。节点分支表:<table>tableseeoriginaldocumentpage31</column></row><table>01291通过添加条件C31={NameLike'Jack%'},#"改了树,如图4C所示。此时,有两个可以从才艮节点402遍历的路径,一个导向项"John"的子节点404,另一个导向项"Jack"的新添加的节点406。如进一步所显示的,根节点402进一步被更新,以显示它具有2个子节点,并向子节点的列表中的第二个条目中添加新的子节点路径和地址。更具体来说,对于"J,,后面的第一个字母,节点路径被标记了"A",子节点地址一皮初始化为12。相应地,新的子节点406被标记了"JACK",其地址一皮初始化为12,其父节点地址,皮设置为1,而其子节点的数量被初始化为o。节点表被修改为:<table>tableseeoriginaldocumentpage33</column></row><table>0137]节点分支表被修改为<table>tableseeoriginaldocumentpage33</column></row><table>使用"不相似"条件索引,将具体列值映射到"不相似"条件。可以以完全相同的方式,向"相似,,条件中嵌入"不相似,,条件索引。与列(属性ID)关联的所有"不相似"条件都被视为"真",从此集合中,排除了被发现使用"不相似匹配算法"的匹配的所有条件。前几年,大多数数据库供应商在他们的数据库引擎中集成了文本搜索,作为SQL的一部分。全文搜索功能允许SQL用户快速地搜索数据库列中的关键字。数据库引擎关键字提取算法从特定列中提取关键字,并对这些关鍵字进行索引。当SQL查询使用CONTAINS运算符时,数据库引擎查询该索引,并返回包含该关键字的所有行。示例查询Ql的条件CI{CONTAINS(Skills,'.net')}使用CONTAINS运算符。此条件对于表的在"Skills"列中具有项".net"的任何行都为"真"。在示例表1中,此条件将对于行1和2都为"真"。通常在应用中,对于本质上冗长的列,如工作说明、经验总结等等,使用全文本索引和CONTAINS运算符。在本发明的一个示例中,对于在CONTAINS条件中所使用的每一个关键字,创建将关键字映射到条件的简单索引。在一个优选的实现方式中,使用两个表来创建"包含"条件索引。使用"包含关键字索引(ContainsKeywordIndex)"和"索引条件(IndexConditions)"表,来实现"包含"条件索引。[0147"包含关键字索引"表包括下面的列(1)"索引ID",数据类型Numeric;(2)"属性ID",数据类型Numeric;以及,(3)"KeywordValue",数据类型Text。此表应该具有主键"索引ID"。每次添加属性和关键字值的新的唯一的組合时,都生成索引ID,作为运行序列号。此表使用列"索引ID"链接到"索引条件"表。考虑示例查询Ql的条件CI{CONTAINS(Skills,'.net')}。这是"包含"条件。第一次值".net,,和列"SkiUs"—起用于"包含"条件中时,向"包含值索引(ContainsValueIndex)"表中添力口一行。在该示例中,Skills列的属性ID为3。如此,在"包含关键字索引"表中添加带有下列值的一行<table>tableseeoriginaldocumentpage35</column></row><table>[0149当添加新的一行时,对列skills执行关键字提取,"包含关键字索引"表中的每一个关键字,都用于确定所有"真,,条件。例如,考虑添加下面的记录。<table>tableseeoriginaldocumentpage38</column></row><table>[0166假设只有查询1此时被添加到系统中,"属性条件XREF"表看起来如下所示。<table>tableseeoriginaldocumentpage39</column></row><table>给定一个列的值,通过对三个"值索引表"中的一个执行简单查询,来确定此值的匹配"索引ID",其中,属性ID等于给定列的属性ID,值等于给定值。如果该列是文本数据类型的,则使用"文本值索引"。"数值索引"和"日期值索引"表分别用于Date和Number字段。例如,在JohnnySmith的记录(ll)中,"JobType,,列(属性ID=8)具有"E,,值。为确定对此列和等于条件有效的"索引111",使用"文本值索引,,表。在辱加示例查询Ql之后,"文本值索引"表看起来如下所示。<table>tableseeoriginaldocumentpage39</column></row><table>相应地,下面的SQL语句,当执行时,将检索出索引IDSelectIIDIndexWhereAttributeID=8(parameter1)andValue="E"(parameter2)这将得到索引ID2。在上面的JohnnySmith的示例记录(行ll)中,"CareerLevel"列(属性ID-6)具有"XP,,值。假设"属性条件XREF,,表具有带有属性ID-6并且条件类型-"NOTEQUALS"的行,则按如下方式执行查找匹配"不等于"条件步骤。下面的SQL语句,当执行时,将检索出索引ID{5,6,7,8以及9}:SelectIndexIDFromNotTextValueIndexWhereAttributeID=6(parameter1)对于"属性条件XREF"表中的具有条件类型"NotIn"的每个属性,执行查找匹配"NotIn,,条件处理。在上面的示例记录(ll)中,"CareerLevel"列(属性ID=6)具有"乂?"值。假设"属性条件XREF"表具有带有属性ID-6并且条件类型="NOTIN"的行,按如下方式执行查找匹配"NotIn,,条件步骤。下面的SQL语句将检索出集合1作为{12}SelectDistinctIndexIDFromNotInXREFWhereAttributeID=6(parameter1)对于带有Numeric和Date数据类型的列,该步骤可以完全相同,只是将分别使用"非数值索引"和"非日期值索引,,来代替"非文本值索引"表。01991对于"属性条件XREF"表中的具有条件类型"范围"的每个属性,执行查找匹配"范围"条件处理。假设利用等于$275000的"HomePrice"列(属性ID=10)的值添加了一个不动产记录,通过执行下面的SQL来检索对应于此的索引ID:SelectIndexIDFromNumericRangeIndexWhereAttributeID=10(parml)andLowerLimit<=275000(parm2)andUpperLimit>=275000(pa浅2)0203在此示例中,返回索引ID22。0204〗也对较高级数值范围索引表执行此相同的SQL语句,以获取对应于指定的列的给定值的所有索引ID。0205对于"属性条件XREF"表中的具有条件类型"相似"的每个属性,执行查找匹配"相似"条件处理。如上文所阐述的,"相似"条件被分成3种类型(l)"相似以...开始";(2)"相似-以..,结束,,;以及(3)"相似-作为".的一部分"。接下来,在步骤606中,确定此值的根节点("J,,)。如果存在根节点(在步骤608中检查),则处理继续,否则,匹配结束。在步骤610中,确定在输入字符串中是否存在更多字符。如果是,则通过确定输入字符串中的下一个字符,标识带有下一个字符的支路的节点分支,来在步骤612中继续本处理。在此示例中,下一个字符是"o",存在根节点的带有等于"o"的支路的节点分支。相应地,如在步骤614中所检查的,存在分支,然后本处理继续进行到步骤616。在此步骤中,发现此分支的子节点,并确定其长度。在此示例中,此子节点中的字符串是"Johii",其长度是4。接下来,在步骤618中,确定输入值的具有与子节点字符串相同长度的子字符串。在此示例中,输入值的长度为4的子字符串产生"John"。接下来,在步骤620中,将输入值子字符串与子节点字符串进行比较,然后在步骤622中,确定是否有匹配。在此示例中,子字符串匹配子节点的节点字符串。相应地,下一步骤624判断匹配子节点是否是项端点。在此示例中,回答是"是",则子节点是项端点。相应地,在下一步骤624中,向匹配的索引ID中添加索引ID1002,然后本处理返回到步骤610。此时,在"John"之后,输入字符串中存在更多字符。然而,不存在到节点"JOHN"的带有等于"n"(其为输入字符串中的如在步骤612中确定的下一个字符)的节点路径的节点分支。相应地,匹配结束,匹配算法的结果指向索引ID1002。例如,在上面的的示例记录(11)中,"Skills"列(属性ID=3)的值为".net,SQLSERVER,MSACCESS"。通过对此值执4亍关键字提取,将返回关键字".net"、"SQLSERVER,,和"MSACCESS"。0224为确定对此列和"包含,,条件有效的"索引ID",使用"包含关键字索引"表。在添加示例查询Ql之后,"包含关键字索引"表看起来如下所示。索引ID属性ID值1013",net,'相应地,通过执行下列SQL,将返回查询编号1:SelectdistinctQueryNumberWhereIndexIDin(1,2,3,101)GroupbyQueryNumber,PartNumberHavingcount(*)=ConditionCount根据应用的需求,然后查询编号1可以自动地在数据库上执行,并且/或者可以通知与查询关联的用户,已经更改或添加了查询结果信息,并且/或者向该用户呈现新的或变更后的记录。[0237在一个可能的示例中,本发明是作为关系数据库管理系统(RDBMS)加载项产品来实现的。相应地,"保存查询,,处理流程和/或"将记录与保存的查询匹配,,处理流程可以作为在数据库服务器上执行的软件程序或处理器来实现。例如,这样的软件可以使用Java技术来构建,以便可以独立于平台,并可以与任何商业化RDBMS产品(如ORACLE、MSSQLServer、DB2等等)一起使用。在通过阅读这里的描述之后,所属领域的技术人员将理解如何实现这样的各种及其他实现方式。[0238图7显示了本发明在在线分类门户700(例如,求职、不动产、汽车搜索门户等等)中的一个可能的用途,传统上,门户700为客户提供如下能力通过网络(如因特网和万维网),使用常规的搜索引擎、查询工具和界面以及所属领域的技术人员所知道的关联的Web页面,对记录的数据库702进行在线搜索。尽管这些搜索会产生通常是某时间的快照的结果,但是,基础数据库702持续地利用新记录进行更新(新的工作、住宅、汽车、求职者等等的列表)。[0239根据本发明的某些方面,不要求用户定期重新执行搜索以检索匹配它们的准则的新的列表,本发明允许在线门户700创建定期(每晚、每周等等)自动地执行的搜索代理,以确定自从第一次创建搜索查询以来的新的匹配。作为另一个示例,在线门户700可以在每次更新或添加数据库702中的记录时,或在更新或添加了某一阈值数量的记录之后,执行搜索代理。显而易见的,除保存客户的查询之外,在线门户700还可以具有用于创建和维护用户帐户的功能,和/或用于标识客户并将他们与保存的查询关联起来的其他机制。由门户700维护的客户信息也可以包括电子邮件地址,及其他配置文件或信息,这些信息允许用户指定首选项和/或用来通知更改的搜索结果的手段。所属领域的技术人员将理解,可以有可以用来实现这样的机制和/或功能的各种已知的方法和替代方案。[02401如图7所示,带有本发明的功能的门户700允许在每次向数据库702中添加新记录(工作、住宅、汽车)时,匹配和检索所有保存的搜索/查询704。如上文所描述的,在客户保存他们的搜索准则之后,查询被保存在列表704中,并创建条件索引和交叉引用表,并存储在索引706中。[0241此后,当新的/变更的记录存储在数据库702中时(例如,使用如上文所提及的自动化搜索代理,或手动通过管理员界面,或通过其他用户,通过由门户700所提供的Web界面,通过因特网或WWW),门户700使用上文所描述的匹配算法,来判断列表704中哪些保存的查询会受到影响。然后,门户可以通知与保存的查询关联的用户,并且/或者通过多个已知的信号发送方法或机制中的任何一个(例如,通过电子邮件或者RSS反馈发送消息,通过Ajax等动态地更新屏面)将所述新的结果推向关联的用户。[02421通过向保存的搜索提供新记录的立即的和递增的匹配,本发明增强了诸如700之类的搜索门户的用户体验,还在对时间敏感的领域(如,工作、不动产、汽车等等)向客户提供竟争优势。[02431虽然这里是参考优选实施例具体描述本发明的,但是,对那些本领域的普通技术人员显而易见的,在不偏离本发明的精神和范围的情况下,可以对形式和细节进行各种变化和修改。所附的权利要求包含这样的变化和修改。权利要求1.一种方法,包括接收用于标识多组数据之中的一组数据的查询;根据多个条件索引对所述查询进行分析;存储通过所述分析步骤更新的所述条件索引,并将所述查询与所述存储的条件索引关联;以及将新的或更改后的数据组与所述存储的条件索引进行比较,并且如果存在匹配,则标识关联的查询。2.根据权利要求1所述的方法,进一步包括如果有匹配,则返回所述标识的关联的查询的更新的搜索结果。3.根据权利要求1所述的方法,其中,所述数据组是数据流的一部分,每一组都具有一个或更多个字段,并且所述查询是要应用于某些字段的布尔规则。4.根据权利要求1所述的方法,其中,所述分析步骤包括标识所述查询中的各个条件;利用所述标识的各个条件,生成布尔形式的表达式;以及基于所述生成的表达式,标识所述多个条件索引。5.根据权利要求4所述的方法,其中,所述数据组是数据库记录,并且其中,所述多个数据组包括表,并且其中,所述查询是SQL查询,并且通过所述SQL查询中的where子句来标识所述各个条件。6.根据权利要求5所述的方法,其中,所述各个条件包括数值等于值、文本等于值、日期等于值、数值范围、文本范围、日期范围以及文本串比较中的一个或更多个。7.根据权利要求4所述的方法,其中,所述表包括与每一个记录关联的多个属性,该方法还包括维护主表,所述主表将某些属性映射到所述条件中的多种条件;以及基于所述标识的各个条件,更新所述主表。8.根据权利要求7所述的方法,其中,所述比较步骤包括判断所述新的或变更后的记录是否包含所述更新的主表中的所述某些属性中的任何一个;以及基于对所述新的或变更后的记录包含所述某些属性中的任何一个的判断,限制是否有匹配的判断。9.根据权利要求4所述的方法,进一步包括维护索引条件交叉引用表,所述索引条件交叉引用表将所述查询与所述标识的多个条件中的每一个关联;以及基于所述分析步骤的结果,更新所述索引条件交叉引用表。10.根据权利要求9所述的方法,其中,所述比较步骤包括利用所述标识多个条件索引的步骤,查询更新的索引条件交叉引用表。11.根据权利要求1所述的方法,其中,所述数据组包括文本属性,并且其中,如果所述查询包括文本串,则所述分析步骤包括基于所述文本串,更新节点表;以及基于所述文本串内的支路,更新节点分支表。12.根据权利要求11所述的方法,进一步包括维护多个所述节点表,以及分别与多个文本条件中的每一个文本条件关联的所述节点分支表,其中,所述文本条件至少包括以…开始、包含,以及作为".的一部分。13.—种方法,包括提供能够通过在线门户进行访问的查询工具和记录的数据库;通过所述在线门户,从用户那里接收查询;使用所述查询工具对所述数据库进行搜索,并将搜索结果返回到所述用户;对所述查询进行分析以提取其条件,并保存所述查询以及其关联的提取的条件;接收新的或变更的记录以存储在所述数据库中;将所述接收到的记录与所述提取的条件进行比较,以判断所述的关联的查询的所述搜索结果是否被所述接收到的记录更改;以及如果判断更改了所述搜索结果,则通知所述用户。14.根据权利要求13所述的方法,其中,所述通知步骤包括给用户提供所述更改的搜索结果。15.根据权利要求13所述的方法,其中,所述通知步骤包括以下步骤中的一个或更多个向所述用户发送电子邮件、通过在线反馈给用户发出信号以及更新搜索结果屏面。16.—种用于搜索表中的记录的设备,包括查询处理器,用于根据多个条件索引来分析接收到的查询,存储通过所述分析更新的所述条件索引,并将所述查询与所述存储的条件索引关联;以及查询匹配处理器,用于将新的或变更的记录与存储的条件索引进行比较,并且如果有匹配则标识所述关联的查询。17.根据权利要求16所述的设备,其中,所述表包括关系数据库,并且其中查询是SQL查询,并且所述各个条件由所述查询处理器通过所述SQL查询中的where子句进行标识。18.根据权利要求17所述的设备,其中,所述各个条件包括数值等于值、文本等于值、日期等于值、数值范围,文本范围、日期范围,以及文本串比较中的一个或更多个。19.根据权利要求16所述的设备,进一步包括在线门户,用于通过网络从用户那里接收所述查询,并通过网络向用户返回搜索结果。20.根据权利要求19所述的设备,其中,所述在线门户进一步用于,如果所述查询匹配处理器判断有所述新的或变更的记录的匹配,则通知用户。全文摘要一种允许数据库查询被保存方法/算法,以及一种每当向所有保存的查询中添加记录或修改记录时匹配记录,并且一旦添加或修改了记录,就返回匹配给定记录的那些查询的列表的高效机制。如果在在线搜索门户示例中使用(例如,工作搜索站点),本发明将允许搜索者提交并保存他的搜索准则一次,应用程序将返回在该时间点匹配搜索准则的列表,还将自动地匹配在查询被保存之后添加的任何新的列表,一旦添加了列表,如果存在匹配,就将把列表通知给用户。这种新的列表与保存的搜索的匹配将会持续地进行,直到删除该搜索。根据本发明的一个方面,通过对添加或修改到数据库中的记录与所有保存的查询进行匹配,它给用户带来了方便,它还降低了计算成本,以与针对相同情况的其他现有技术相比取得相同的结果。文档编号G06F17/30GK101535990SQ200780038304公开日2009年9月16日申请日期2007年8月23日优先权日2006年8月23日发明者G·贾根内森申请人:创新解决方案公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1