CN102084363A - 一种用于在结构化数据上高效地支持交互式模糊搜索的方法 - Google Patents
一种用于在结构化数据上高效地支持交互式模糊搜索的方法 Download PDFInfo
- Publication number
- CN102084363A CN102084363A CN2009801260268A CN200980126026A CN102084363A CN 102084363 A CN102084363 A CN 102084363A CN 2009801260268 A CN2009801260268 A CN 2009801260268A CN 200980126026 A CN200980126026 A CN 200980126026A CN 102084363 A CN102084363 A CN 102084363A
- Authority
- CN
- China
- Prior art keywords
- keyword
- record
- node
- inquiry
- prefix
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/232—Orthographic correction, e.g. spell checking or vowelisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- General Health & Medical Sciences (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种支持在文本数据上的高效交互式模糊搜索的方法,包括:在应用——诸如查询放宽、自动完成或拼写检查——中对结构化数据进行交互式模糊搜索,其中在用户查询以及数据中存在不一致和错误。其利用在结构化数据上高效地进行交互式应答模糊查询的技术,以允许用户高效、交互式地对信息进行搜索,并且他们能找到记录和文件,即使这些记录和文件与用户关键词稍有不同。
Description
政府权利
本发明是在政府的支持下、在由国家科学基金的No.0238586授权下作出的。政府在本发明中享有特定的权利。
相关申请
本申请与在2008年7月3日提交的No.61078082、2008年11月7日提交的No.61112527以及2009年2月12日提交的No.61152171的美国临时专利申请相关,这些美国临时专利申请在此通过引用方式被纳入,且依照美国法典第35篇第119条(35 USC 119)要求这些美国临时专利申请的优先权。
发明背景
技术领域
本发明涉及使用计算机对字符串数据库进行交互式模糊逻辑搜索的领域。
现有技术
传统的信息系统在用户提交完整查询后向用户回示应答。当用户对于他们要寻找的潜在的(underlying)数据或实体的认知有限时,他们通常感觉“两眼一抹黑(left in the dark)”,并且不得不使用试试看的方式来查找信息。在这些系统中支持自动完成(autocomplete)的最新趋势是解决这问题的第一步。
在信息系统中,通常用户不能找到他们感兴趣的记录或文件,因为他们不知道该实体在后台储存器中的精确表示。例如,一位名叫“John Lemmon”的人可能被错误地表示为“Johnny Lemon”。一位名叫“William Gates”的人可能被存储为“Bill Gates”。结果是,如果用户不知道他所要寻找的人的名字的准确拼写,他可能不能找到该记录。同样的问题尤其存在于当数据来自各种不同网络来源的情况下,各种不同网络来源往往是异类和杂乱的。
所需要的是一种即使在用户查询和感兴趣实体的物理表示之间有稍微不匹配的情况下仍然允许信息系统能够应答查询的方法。
所需要的是一种还能够允许用户在键入其查询时交互式地查询储存器的方法。
为了在用户制定(formulate)搜索查询时给出即时反馈,许多信息系统支持自动完成搜索,所述自动完成搜索在用户键入部分查询后立即显示结果。作为实例,目前几乎所有主要的搜索引擎都在用户键入部分关键词时自动地建议可能的关键词查询。谷歌财经和雅虎财经都支持在用户键入关键词时搜索股票信息。大多数自动完成系统将一个具有多个关键词的查询视为一个单字符串,并找出带有与该字符串精确匹配的文本的应答。作为示意性实例,考虑在Apple Inc.主页上的支持对其产品的自动完成搜索的搜索框。尽管关键词查询“itunes”可找到记录“itunes wi-fi music store”,但带有关键词“itunes music”的查询却不能找到这一记录(关于2009年6月),仅因为这两个关键词在记录中出现在不同的位置。
为了解决这一局限性,最近出现了一种新的边键入边搜索模式(type-ahead search paradigm)。使用这一模式的系统将一个查询视为一个关键词集(a set of keywords),并对潜在的数据进行全文本搜索以找出包括所述关键词的应答。一个实例是DBLP2上的CompleteSearch系统,该系统随着用户逐个字母键入关键词而“立即(on the fly)”搜索潜在的公开数据。例如,查询“music sig”,可找到具有关键词“music”并且具有以“sig”作为前缀的关键词——例如“sigir”、“sigmod”以及“signature”——的公开记录。通过这种方式,用户可在键入关键词后得到即时反馈,由此可获得关于该潜在数据的更多认知,从而更容易地制定查询。
在模糊边键入边搜索中,一个主要的挑战是高效率的需求。为了使搜索具有交互性,从用户作出键击的时间到从服务器计算得到的结果显示在用户的浏览器上的时间,延迟应该尽可能小。交互式速度要求这种延迟在几毫秒之内。注意这个时间包括网络传送延迟、服务器上的执行时间以及浏览器执行其java脚本(javascript)(往往很慢)的时间。由于该系统在用户完成键入一个完整的查询后需要比仅应答一个查询的常规系统应答更多的查询,因此提供高效率是尤其重要的。
问题包括:如何应答以模糊边键入边搜索对大量数据提出的排名查询(ranking queries)。考虑记录的总合,诸如在关系表中的元组(tuple)。随着用户逐个字母键入关键词查询,我们想立即找出带有与该查询关键词相似的关键词的记录。我们把查询中最后的关键词视为用户正在完成的部分关键词。我们假设索引结构具有用于潜在数据中的关键词的字典树(trie),每个叶节点具有带该关键词的记录的倒排列表(inverted list),以及该关键词在记录中的权重(weight)。作为一个实例,表IV示出公开记录的样本总合(collection)。为了简便,我们仅列出每一记录的一些关键词。图9示出了相应的索引结构。
假设用户键入了一个查询“music icde li”。我们想找到带有与这些关键词相似的关键词的记录,并将它们排名(rank)以找出最好的应答。为了得到该应答,对于每个查询关键词,我们可以找到与该查询关键词相似的关键词。例如,关键词“icdt”和“icde”都相似于第二查询关键词。最后的关键词“li”被视为前缀情况,因为用户仍正在这一关键词的末端键入。我们找到具有相似于“li”的前缀——诸如“lin”、“liu”、“lui”、“icde”和“icdt”——的关键词。我们访问这些相似关键词的倒排列表以找到记录并将它们排名,从而为用户找到最好的应答。
一个关键的问题是:如何高效地访问这些列表以应答前k个(top-k)查询?在文献中,有多种通过访问列表来应答前k个(top-k)查询的算法。这些算法共享最初由Fagin提出的同一框架,其中我们有基于各种情况排序的记录列表。一个累加函数(aggregation function)从这些列表中得到记录的评分(score)并计算出该记录的最终评分。有两种方法访问这些列表:(1)随机访问:给定一个记录id,我们可以获得该记录在每一列表上的评分;(2)排序(sort)访问:我们按列表顺序获得每一列表上的记录id。
发明内容
我们公开一种用于信息访问模式的方法和装置,称为“iSearch”,其中随着用户键入查询关键词,该系统“立即”搜索潜在的数据。其通过以下方式扩展自动完成接口:(1)支持以多个关键词对具有多个属性的数据作查询;以及(2)找到可能不精确地匹配查询关键词的相关记录。这种框架允许用户在其键入时(即使在存在小错误的情况下)能浏览数据。
这种框架对于大量的数据是具有挑战的。第一个挑战是搜索效率。由于用户的每次键击可能在后台引起一个查询,我们需要有效率的算法在几毫秒内处理每个这样的查询。我们开发了一种基于缓存的技术,以支持在字典树索引结构上的增量计算(incremental computation)。第二个挑战是以交互式速度支持模糊搜索。我们提出一种技术,以有效率的删减和缓存进行增量计算。我们已使用这些技术开发出几种真实原型。其中之一已被开发用于支持在UCI目录上的交互式搜索,其由于友好的界面和高搜索效率已被用户经常使用且被很好地接受。
本发明的示出实施方案的其中之一是一种支持高效的对文本数据作交互式模糊搜索的方法。当在用户查询和数据中存在不一致和错误时,对结构化数据进行交互式模糊搜索在诸如查询放宽、自动完成或拼写检查等应用中是很重要的。在这一实施方案中,我们开发出在对于结构化数据的模糊查询进行高效且交互式应答的技术。大多数现有算法不能支持交互式模糊搜索。在用户键入带有关键词的查询后,这些算法找到精确地包括这些关键词的记录和文档。
所示出的实施方案的技术允许用户高效地交互式搜索信息,并且即使记录和文档与用户的关键词稍有不同,他们也可以找到这些记录和文档。在本发明示出的实施方案中,我们开发出以下新颖性的技术,以有效地、高效地且交互式地应答对结构化数据的模糊搜索。
1)我们使用基于树的索引来高效地索引数据,并且使用随着用户键入查询而遍历该树的算法。
2)我们适应地维持查询的中间结果以支持交互式模糊搜索。
3)我们开发很好的排名算法以将候选结果排序。
我们已开发在线的样品,称为PSearch,在http://psearch.ics.uci.edu/上可用。PSearch项目的目标是使在欧文市(Irvine)的加利福尼亚大学的人们的搜索更简单。其具有单个输入搜索框,其允许对人名、UCI网络ID、电话号码、院系和头衔进行关键词查询。其具有以下的特征:
●支持交互式搜索:随着你的键入而搜索。
●允许关键词中的小错误。
●支持同义词,例如,“William=Bill”和“NACS=Network and Academic Computing Services”。
●允许多个关键词;我们使用由NACS提供的UCI目录数据。
所示的本发明的实施方案可以在这样的信息系统中使用,该信息系统需要即使在有小错误的情况下仍然允许用户对文本数据进行交互式搜索。例如,具有关于他们产品的结构化数据的电子商务网站可以受益于我们的技术。允许人们对人作搜索的服务也可以使用我们的技术来使他们的搜索更有力。所示的本发明的实施方案还可以被用于允许用户浏览潜在的数据库中的数据。
在示出实施方案的语境中,我们考虑如何利用我们要解决的问题的专有的特征来高效地支持这两种类型的操作,从而我们可以采用这些算法以解决我们的问题。我们做出以下的贡献。我们提出用于支持对倒排列表的随机访问的两种高效的算法。这两种算法都需要对数据的前向索引(forward index),并且它们的性能取决于每个记录中关键词的数量。我们考虑如何高效地支持对倒排列表的排序访问。我们确定了一个重要子类(subclass)的排名函数(rank function),这些排名函数已被证明在我们已开发的几个系统中都是非常有效的。我们开发一种列表删减技术以改进性能。我们考虑如何通过列表具体化(list materialization)来进一步改进排序访问的性能,也即,为一个字典树节点预计算和存储叶节点倒排列表的并集(union)。我们展示如何使用具体化列表适当地改进性能。接着,我们考虑在给定空间约束的情况下如何选定字典树节点以具体化它们的列表,从而最大化查询性能。我们展示我们在几个实际数据集上的实验结果,以示出使用我们技术的算法的查询性能。我们还给出如何在具有大数据集的应用中使用这些技术的建议。
前言:数据和查询
我们首先回顾模糊式边键入边搜索的问题。设R为诸如相关表中元组等记录的总合。设D为R中的词语集。随着用户逐个字母键入一个关键词查询,我们想要立即找出带有与该查询关键词相似的关键词的记录。我们使用编辑距离(edit distance)以测量字符串之间的相似度(similarity)。形式上,两个字符串s1和s2之间的编辑距离,表示为ed(s1,s2),是从s1转换为s2所需要的最小数量的单字符编辑操作(即,插入、删除和替换)。例如,ed(icde,idt)=2。
设Q为用户已键入的查询,其是关键词序列[w1,w2,:::,wm]。我们将最后的关键词wm视为用户正完成的部分关键词。我们想要在数据集中找到相似于查询关键词的关键词,因为带有这种关键词的记录可能是用户感兴趣的。
设π为对一个字符串s与D中的一个查询关键词w之间的相似度作量化的函数。一个实例是:
π(s,w)=1-ed(s,w)/|w|,
其中|w|是关键词w的长度。我们基于查询关键词长度而归一化编辑距离,以允许更长的查询关键词出现更多的错误。我们在本文中的结果聚焦于这一函数,并且可以使用编辑距离将这些结果归纳到其他函数。
a.设d是D中的一个关键词,对于每个完整的关键词wi(i=1,...,m-1),我们定义d与wi的相似度为:
Sim(d,wi)=π(d,wi)。
由于最后的关键词wm被视为前缀条件,我们使用函数π将d与wm的相似度定义为d的前缀的最大相似度,即Sim(d,wm)=max d的前缀p π(p,wm)。设τ是相似度阈值。如果Sim(d,w)≥τ,则我们判定D中的关键词相似于查询关键词w。如果π(p,wm)≥τ,则我们判定D中一个关键词的前缀p相似于该查询关键词wm。设Φ(wi)(i=1,...,m)表示D中相似于wi的关键词集,并且P(wm)表示(D中的关键词中的)相似于wm的前缀集。
在我们的当前实例(running example)中,假设用户对表IV显示的数据逐个字母输入一个查询“icde li”。假设相似度阈值τ是0.45。于是,相似于该部分关键词“li”的前缀集是P(“li″)={l,li,lin,liu,lu,lui,i},而相似于该部分关键词“li”的关键词数据集是Φ(“li″)={lin,liu,lui,icde,icdt}。具体地,“lui”相似于“li”,因为Sim(lui,li)=1-ed(lui,li)/|li|=0.5≥τ。该完整关键词“icde”的相似词语集是Φ(“icde″)={icde,icdt}。注意在当前实例中,为了简便,我们使用相对小的相似度阈值τ。增加该阈值可以减少字典树上相似前缀的数量。
前k个(top-k)应答:
我们基于每个记录r与查询的相关度来对R中每个记录r进行排名。设F(,)是这样的关于查询Q和记录r∈R的排名函数,并且计算评分F(r,Q)作为该记录r与该查询Q的相关度。给定一个正整数k,我们的目标是计算R中k个最好记录,这些记录根据它们与Q的相关度来进行排名。注意,即使并不是所有的查询关键词都具有记录中的相似关键词,我们的问题设定仍然允许在应答中有一个重要记录。我们想要在用户通过在Q中添加更多字母或修改或删除字母而修改该查询时高效地计算这些记录。在不失一般性的情况下,假定数据集中的每个字符串以及查询都仅使用小写字母。
一个有效的排名函数F基于r中关键词和在该查询中的那些关键词的相似度来计算相关度评分F(r,Q)。注意记录中的关键词d可具有与部分关键词wm不同相似度的不同前缀,我们可以将它们的最大值视为d和wm之间的整体相似度。该函数还考虑该记录中的每个关键词的重要性。记录r中的关键词具有关于r的权重,诸如该记录中关键词的词频以及逆文档频率(TF/IDF)。注意,这一设定覆盖了其中每个记录具有独立于关键词的权重的具体情况,诸如,如果记录是带有标记化的(tokenized)关键词的URL,则该权重是网页的排名,而如果记录是作者,则该权重是作者的出版的数量。
索引和搜索:
为了高效地支持模糊式边键入边搜索,我们为D中的数据关键词构建了一棵字典树。一个字典树节点具有一个字符标签。D中的每个关键词对应于字典树上的一条从根部到叶节点的唯一路径。为了简便,字典树节点与对应于从根部到该节点的路径的关键词是可互换地提及的。叶节点具有配对的倒排列表(inverted list of pairs)[rid,weight]i,其中rid是包含了该叶节点字符串的记录的ID,weight是该关键词在该记录中的权重。图9显示了我们当前实例中的索引结构。例如,对于关键词“lin”的叶节点,其倒排列表具有五个元(element)。第一个元“[r3,9]”表示记录r3具有这一关键词,并且这一关键词在这一记录中的权重是“9”。
我们以两步计算对查询Q的前k个(top-k)应答。在第一步中,对于该查询中的每个关键词wi,我们计算字典树(如图10所示)上的相似关键词Φ(wi)以及相似前缀P(wm)。我们在上文公开了一个高效的算法,用以在用户修改当前的查询时增量地计算这些相似字符串。在我们当前实例中,该查询中的关键词“icde”具有两个相似的数据关键词Φ(“icde″)={icde,icdt}。该部分关键词具有七个相似的前缀,即P(“li″)={l,li,lin,liu,lu,lui,i}。它们具有五个叶节点关键词,“lin”,“liu”,“lui”,“icde”,和“icdt”。
在第二步中,我们访问这些相似数据关键词的倒排列表以计算对该查询的最好的k个应答。已提出许多用以通过访问排序列表来应答前k个(top-k)查询的算法。当采用这些算法来解决我们的问题时,我们需要高效地支持在这些算法中使用的两种基本类型的访问:对该列表的随机访问和排序访问。在下文中,我们考虑如何高效地支持这两种访问方法,以及对索引结构的相应要求。
高效地支持随机访问:
a.考虑如何支持高效的随机访问,以采用在文献中现有的前k个算法(top-k algorithms)。在每个随机访问中,给定一个记录r的ID,我们想要获得相关于查询Q中关键词的信息,以允许我们计算评分F(r,Q)。具体而言,对于查询中的关键词wi,记录r是否具有相似于wi的关键词?一种简单的得到该信息的方式是检索原始记录r并遍历其关键词。这种方法具有两个局限性。首先,如果数据太大以至于不能安装到内存中,而不得不存储在硬盘上,从硬盘上访问该原始数据可能显著地减慢处理过程。这种成本高昂的操作将阻止我们实现交互式搜索的速度。第二个局限性是其可能需要大量的基于编辑距离的对字符串相似度的计算,这可能是费时的。
b.在此,我们提出两种解决这一问题的高效的方法。这两种方法都需要前向索引,在前向索引中,每个记录具有一个关于其关键词ID以及它们相应的权重的前向列表。我们假设每个关键词具有对应于在字典树上的其叶节点的唯一ID,并且关键词的ID遵循其字母顺序。图11显示了在我们当前实例中的前向列表。在记录r3的前向列表中的元“[1,9]”显示这一记录具有ID为“1”的关键词,其如字典树上所示是关键词“lin”。这一关键词在这个记录中的权重是“9”。为了简便,在讨论中,我们关注在如何验证该记录是否包括带有相似于该部分关键词wm的前缀的关键词。通过小修改,该讨论延伸到如下情况:其中我们想要验证r是否具有与该查询中完整关键词wi相似的关键词。
方法1:在前向列表上探测
这个方法为每个字典树节点n维持关键词区间[ln,un],其中ln和un分别是其叶节点的最小和最大关键词ID。一个有趣的看法(observation)是,以n作为前缀的完整词语在这个关键词区间中必须具有一个ID,并且该数据集中在这个区间中具有ID的每个完整词语(complete word)都必须具有前缀n。在图11中,节点“li”的关键词区间是[1,3],因为1是其叶节点的最小ID,3是其叶节点的最大ID。
基于这一看法,这个方法验证记录r是否包含具有相似于wm的前缀的关键词,如下所述。对于字典树上相似于wm的前缀p(在该算法的第一步中计算,如第II部分所述),我们在字典树节点p的关键词区间[lp,up]中检查在r的前向列表上是否有关键词ID。由于我们可以保持r的前向列表是排序的,这种检查可以高效地完成。具体地,我们使用下界lp来对r的前向列表进行二分法检索(binary search),以得到不小于lp的最小ID°。如果γ存在,且不大于上界up,即γ≤up,则该记录具有相似于wm的关键词。
在我们当前实例中,假设我们想要验证记录r3是否包含具有相似于该部分关键词“li”的前缀的完整词语。对于其每个相似的前缀,我们检查其区间是否包含该记录中的关键词。例如,考虑具有区间[1,3]的相似前缀“li”。对r3的前向列表([1,9],[3,4],[5,4])使用二分法检索,我们在这个区间中找到一个关键词ID 1。因此,我们知道该记录确实包含相似于这个前缀的关键词。
B.方法2:在字典树叶节点上的探测
使用这个方法,对于相似于wm的每个前缀p,我们遍历p的子字典树并识别其叶节点。对于每个叶节点d,我们存储如下事实:对于查询Q,该关键词d具有相似于该查询中wm的前缀。具体地,我们存储
[查询ID,部分关键词wm,sim(p,wm)]。
我们存储查询ID,从而在多个查询被同时应答的情况下将该查询与其他查询区分开。我们存储wm和p之间的相似度,以计算这一关键词在一个候选记录中的评分。在叶节点具有几个相似于wm的前缀的情况下,我们仅保留它们与wm的最大相似度。对于该查询中的每个关键词wi,我们还为那些相似于wi的字典树节点存储相同信息。因此,一个叶节点可能具有多个条目,对应于在同一查询中不同的关键词。我们将叶节点的这些条目称为该叶节点的相关查询关键词的总合。这个总合可以实现为使用查询ID作为密钥(key)的散列表(Hash table),或者作为基于查询ID而排序的数组(array)。注意这一结构需要非常小的存储空间,因为老查询的条目可以被新查询快速地再次使用,并且查询中关键词的数量往往很小。
我们使用这个额外的信息来高效地检查记录r是否包含具有相似于该部分关键词wm的前缀的完整词语。我们扫描r的前向列表。对于其每个关键词ID,我们在字典树上定位相应的叶节点,并测试相关查询关键词的总合是否包括这一查询和关键词wm。如果是,则我们使用存储的字符串相似度来计算这一关键词在该查询中的评分。
图12显示了我们如何在我们的当前实例中使用这个方法,其中用户键入关键词查询q1=[icde,li]。当计算“li”的完整词语时,对于其每个叶节点,诸如“lin”和“liu”,我们插入查询ID(显示为“q1”),该部分关键词“li”,以及与相关查询关键词的总合的相应前缀相似度。为了验证记录r3是否包括具有相似于“li”的前缀的词语,我们扫描其前向列表。其第一个关键词是“lin”。我们访问其相应的叶节点,并看到相关查询关键词的节点总合包括这一查询部分关键词。我们可以获得相应的前缀相似度,以计算这一关键词相对于这一查询的评分。
C.比较两种方法
方法1的时间复杂度是O(G*log(|r|)),其中G是wm的相似前缀和wi的相似完整关键词的总数量,对于1≤m-1,|r|是记录r中区别关键词的数量。由于wm的相似前缀可能具有祖先-后代(ancestor-descendant)关系,我们可以通过仅考虑那些“最高的”来优化访问它们的步骤。
第二种方法的时间复杂度是
第一项对应于遍历相似前缀的子字典树的时间,其中Tp是在相似前缀p处子字典树的大小。第二项对应于探测叶节点的时间,其中|Q|是查询关键词的数量。注意为了识别应答,我们需要访问完整词语的倒排列表,因此第一项可以从复杂度中被移除。方法1对于其中记录具有大量关键词的数据集——例如长文件——是优选的,而方法2对于其中记录具有少量记录的数据集——诸如具有相对短的属性值的相关表——是优选的。对于两种方法,我们都可以获得关键词在该记录中的权重以及在该记录关键词和对应的查询关键词之间的相似度,其在字典树上被预计算。我们使用这一权重和相似度来计算这一查询关键词相对于该记录的评分。
高效地支持排序访问
考虑如何在用于计算前k个(top-k)应答的算法中高效地进行排序访问。现有的前k个(top-k)算法假定我们被给定了基于各种情况排序的多个列表。每个记录在列表上具有一个评分,我们使用一个累加函数来将不同列表上的该记录的评分组合,以计算其关于该查询的整体相关度。该累加函数需要是单调的,即一个列表上的一个记录的评分的减小并不能使该记录的整体评分增加。在我们的问题中,对于查询中相似于关键词的每个数据关键词,我们具有基于该关键词在记录中的权重排序的倒排列表。因此,假设排名函数相对于列表上的权重是单调的,我们可以采用现有的前k个(top-k)算法,通过访问这些排序的列表来解决我们的问题。这种方法具有的优势在于,允许一般类型的排名函数。另一方面,其性能可能很低,因为查询的列表数量可能很大(以几万或者甚至几十万计),尤其是因为最后的前缀关键词wm可能具有多个相似的前缀,每个前缀都可能具有多个叶节点,并且访问这些列表可能是耗成本的。例如,对于DBLP数据集上的每个查询,有大约几万个倒排列表。下一步,我们考虑如何基于一类重要的排名函数来改进排序访问的性能。
一类重要的排名函数
在我们的问题设定中的一个有趣现象在于,查询的倒排列表自然地形成组。具体地,每个完整关键词wi具有对应于Φ(wi)中其相似数据关键词的几个倒排列表,最后一个部分关键词wm具有P(wm)中的几个相似前缀,每个前缀具有多个叶节点。这些组允许我们为具有以下两个特性的一大类排名函数F改进所述排序访问性能。
特性1:记录r关于查询Q的评分F(r,Q)是该查询关键词相对于记录r的评分的单调组合。
正式地,我们分两步计算评分F(r,Q)。在第一步中,对于查询中的每个关键词w,我们计算该关键词关于记录r和该查询的评分,表示为Score(r,w,Q)。在第二步中,我们通过对该查询中所有关键词w的Score(r,w,Q)应用单调函数来计算评分F(r,Q)。这一特性的作用是单个查询关键词相对于记录越相关,这个关键词越可能是这一查询的好应答。我们将很快看到,这个特性允许我们将所有倒排列表基于查询关键词而分割成不同组。在我们当前实例中,我们通过累加每个所述查询关键词“icde”和“li”相对于该记录的评分,来计算关于该查询“icde li”的记录的评分。
下一个问题是如何计算值Score(r,w,Q),尤其是因为关键词w可能相似于记录r中多个关键词。设d是记录r中的一个关键词,以使得d与查询关键词w相似,即d∈Φ(w)。我们使用Score(r,w,d)表示这个查询关键词w与记录关键词d的相关度。该值应取决于,w在r中的权重,以及w和d之间的相似度即Sim(d,w)。直观地,它们越相似,w与d越相关。
特性2:
记录中查询关键词w的相关值Score(r,w,Q)是记录中所有关键词d的Score(r,w,d)的最大值。这个特性显示出当计算该查询关键词与记录的相关度时,我们仅看到记录中与查询关键词最相关的关键词。这意味着排名函数“渴望”找到记录中最相关的关键词,作为显示这一记录对于用户查询来说是如何重要的指示(indicator)。另外,如我们能马上见到的,当访问查询关键词的多个列表时,这个特性允许我们进行有效的删减。在我们实现的多个原型系统中,我们使用具有这两个特性的排名函数,并且该函数已被证明非常有效。
在下文中,作为实例,我们使用具有两个所述特性的以下排名函数来讨论支持高效排序访问的技术。
其中Score(r,wi,Q)=maxr中记录关键词d{Score(r,wi,d)}, (2)
以及
Score(r,wi,d)=Sim(d,wi)*Weight(d,r) (3)
在最后的公式中,Sim(d,wi)是在完整关键词wi和记录关键词d之间的相似度,以及Weight(d,r)是记录r中d的权重。
B.访问组中列表
第一特性允许我们基于它们相应的查询关键词将倒排列表分割成几个组。每个查询关键词w具有一组倒排列表,可以产生以它们关于这一关键词的评分排序的记录ID的列表。在成组的这些排序列表的顶部,我们可以采用现有的前k个(top-k)算法找到该查询的最好的k个记录。
对于查询关键词w的倒排列表的每个组,我们需要支持获得w的下一个最相关的ID的排序访问。使用关键词列表完全地计算这一排序列表L(w)在时间和空间上是昂贵的。我们可以通过在倒排列表上建立最大的堆区(heap)来高效地支持在该列表L(w)上的排序访问。具体地,我们在该组中每个倒排列表上维持一个指针。所述堆区由指针业已指向的记录ID组成,在这些记录中的相似关键词的评分上排序。注意到每个倒排列表已基于其关键词在记录中的权重排序,并且这一列表上的所有记录都享有这一关键词和查询关键词w之间的相同相似度。因此,该列表还基于这一关键词在这些记录中的评分进行排序。为了从这一组中获得下一个最好的记录,我们将顶部元6从所述堆区弹出,将弹出的元的列表的指针增加1,并将这一列表的新元推入至所述堆区。第二特性允许我们忽略可产生这一弹出记录的其他列表,因为它们的相应评分将不再影响此记录关于查询关键词w的评分。因为我们的方法不需要计算L(w)的整个列表,我们称L(w)为查询关键词w的虚拟排序列表。
在我们当前实例中,图13显示具有两个关键词“icde”和“li”的查询Q的两个堆区。为了说明的目的,对于列表中的每个组,我们还显示了具有它们评分的记录的虚拟合并列表,并且在遍历潜在的列表期间,仅部分地计算了这个列表。堆区上的每个记录具有这一关键词相对于查询关键词的相关评分,使用方程式3来计算。例如,对于相似于查询关键词“li”的关键词“lui”的倒排列表上的记录1,我们有
假设我们想要基于上述函数仅通过排序访问来计算前两个(top-2)最好应答。我们首先弹出两个最大堆区的顶部元,[r4,9]和[r3,9],并计算应答的总体评分的上界,即18。我们把产生这些顶部元的列表的指针增加,将它们推入至堆区,并获得下两个顶部元:[r5,8]和[r5,8]。新的评分上界变为16。在获得每个最大堆区的四个元后,我们可以用它们的评分[r5,16]和[r4,16]计算前两个(top-2)记录。
C.删减低评分列表
我们还可以使用“按需堆区构建”的思想来进一步改进对查询关键词w的虚拟排序列表L(w)的排序访问的性能,即我们想要避免为相似于查询关键词的关键词的所有倒排列表构建一个堆区。设L1,......Lt是分别带有相似关键词d1,...,dt的那些倒排列表。在这些列表的堆区上的每个推入/弹出操作花费时间O(log(t))。如果我们可以减少堆区上元的数量,我们就可以减少该堆区的推入/弹出操作的耗费。直观地,我们将这些倒排列表基于它们关键词与w的相似度进行排序,即,Sim(d1,w),......sim(dt,w)。我们首先使用具有最高相似度值的列表构建最大的堆区。假设Li是一个尚未包括在堆区中的列表。我们可以使用列表上最大的权重以及字符串相似度Sim(di,w)来从Li(关于查询关键词w)得出记录评分上的上界ui。设r为堆区上的顶部记录,具有评分Score(r,w,Q)。如果Score(r,w,Q)≥ui,则这一列表不需要被包括在该堆区中,因为其不能具有更高评分的记录。否则,这一列表需要被包括在该堆区中。
基于这一分析,每次当我们从堆区中弹出一个记录,并将一个新记录r推入堆区时,我们将该新记录的评分与那些尚未被包括在堆区中的列表的上界比较。对于具有小于这一评分的上界的那些列表,它们从此需要被包括在堆区中。注意到这种检查可以通过存储这些上界的最大值以及基于它们的上界进行排序,而高效地进行。
我们对于这一删减方法具有两点看法。(1)作为一个特殊的实例,如果那些精确地匹配查询关键词的关键词具有最高的相关度评分,则这一方法允许我们在考虑具有不匹配关键词的其他记录之前考虑这些记录。因此,这一方法与“应首先快速地得出精确匹配的记录”的思想是一致的。(2)如果查询关键词w是最后的前缀关键词wm,则该删减能力可以甚至更为显著,因为其相似关键词中有许多在字典树上共享相似于wm的相同前缀p。我们可以从这些列表中计算记录评分的上界并存储字典树节点p的界。通过这种方式,我们可以通过将值Score(r,w,Q)与字典树上存储的这一上界相比较来更高效地删减列表,而无需立即计算该上界。
在我们该查询“icde li”的当前实例中,图13示出了我们如何删减低评分列表以及进行按需堆区构建。前缀“li”具有几个相似的关键词。在这些关键词中,两个词语“lin”和“liu”具有与查询关键词最高的相似度值,主要因为它们具有精确地匹配该关键词的前缀。我们使用这两个列表来构建一个堆区。我们计算列表“liu”、“icde”和“icdt”的记录评分的上界,分别是3、4.5和3。这些列表从来没有被包括在堆区中,因为它们的上界在遍历终止前一直比弹出记录的评分小。由于“icde”和“icdt”对于“li”共享相同的相似前缀“i”,它们对于“li”具有相同的相似度。我们可以在字典树节点“i”上存储“icde”和“icdt”的倒排列表中的权重的上界。我们使用存储的权重计算“icde”和“icdt”的上界评分,而不是获得“i”的叶后代来计算该界。如果有多个相似的7个词语共享一个相似的前缀,则这种改进是显著的。相似地,对于查询关键词“icde”,使用该删减方法我们仅需要构建使用单个列表的堆区,所述堆区对应于字典树上的关键词“icde”。关键词“icdt”的列表被删减且不会被包括在该堆区中。
通过列表具体化改进排序访问
考虑如何通过预计算和存储字典树上一些倒排列表的并集来进一步改进排序访问的性能。设v是字典树节点,并且∪(v)是v的叶节点的倒排列表的并集,根据它们记录的权重被排序。如果一个记录在这些列表上出现了多于一次,则我们选定其最大的权重作为其在列表∪(v)上的权重。我们称∪(v)为节点v的并集列表。例如,在我们当前实例中,字典树节点“li”的并集列表具有[r3,9],[r5,8],[r7,8],[r4,7],[r6,5],[r9,4],[r2,3]和[r8,1]。当使用最大的堆区来检索记录——其根据其相对于查询关键词的评分而排序——时,这个具体化的并集列表可以帮助我们构建具有较少列表的最大堆区,并减少该堆区上推入/弹出操作的成本。因此,这个方法允许我们利用额外的内存空间(memory space)来更高效地应答前k个(top-k)查询。
在最大堆区上对排序访问进行列表具体化的收益对于最后的前缀关键词wm尤其显著,因为其在字典树上可能具有多个相似的前缀,这些前缀对应于许多叶节点关键词。因此,在这一部分的剩余部分,我们主要关注对于这个前缀关键词wm的成本收益分析。我们首先讨论如何使用具体化的并集列表来加速下面的排序访问,接着考虑在给定空间约束的情况下如何选择字典树节点来具体化它们的并集列表。
适当地利用具体化并集列表
假设v是字典树节点,其并集列表∪(v)已被具体化。使用∪(v)来加速对前缀关键词wm的排序访问的一个微妙之处在于,∪(v)是基于其记录权重进行排序的,而最大堆区上的推入/弹出操作要求堆区上的每个列表基于其关于wm的记录评分而进行排序。回想在关键词di相对于wm的列表上的记录r的Score(r,wm,di)值是基于Weight(di,r)和Sim(di,wm)的。为了使用∪(v)来替换最大堆区中v的叶节点的列表,需要满足以下两种条件:
v的所有叶节点都具有相同的相对于wm的相似度。
v的所有叶节点都相似于wm,即它们与wm的相似度不小于阈值τ。
当满足所述条件时,并集列表∪(v)的排序顺序也是叶节点列表相对于wm的记录的评分的顺序。在这种情况下,我们称并集列表∪(v)对于查询关键词wm的最大堆区来说是“可用的”。例如,考虑图9中的索引,以及查询“music icd”。对于查询关键词“icd”,我们访问其相似数据关键词“icde”和“icdt”,并基于关于这个查询关键词的记录评分在它们的倒排列表上构建最大的堆区。对于字典树节点“icd”,其叶节点都相似于查询关键词(具有相同的相似度),其并集列表对于这一关键词的最大堆区来说是可用的。也即,我们可以使用这两个倒排列表的最大堆区中的其具体化并集列表,节省遍历这两个列表的时间。
对于wm的最大堆区,具体化∪(v)具有以下的性能收益。(1)我们不需要遍历字典树来访问这些叶节点并使用它们来构建最大堆区,(2)堆区上的每个推入/弹出操作更为高效,因为其具有更少的列表。注意如果v具有对于最大堆区也可用的带有具体化并集列表∪(v’)的祖先v’,则我们可以使用该具体化列表∪(v’),而非∪(v),并且列表∪(v)将不再有益于这一最大堆区的性能。
B.选择待要具体化的并集列表
设B是我们被给予的用于具体化并集列表的存储空间的预算。我们的目标是选定字典树节点,以将它们的并集列表具体化为使查询的性能最大化。以下是用于选择字典树节点的几种简单算法:
随机:我们随机地选定字典树节点。
从上到下:我们从字典树的根部从上到下选定节点。
从下到上:我们从叶节点从下到上选定节点。
每个简单方法维持选择字典树节点以具体化它们的并集列表,直到它们的列表大小的和达到空间限制B。这些方法的一个主要局限性是它们没有量化地考虑具体化并集列表的收益。为了克服这一局限性,我们提出一种基于成本的方法,称为CostBased,以进行列表具体化。其主要思想如下所述。
为了简便,如果其并集列表已被具体化,我们称节点已被“具体化”。对于具有前缀关键词wm的查询Q来说,假设一些字典树节点的并集列表已被具体化。设v是wm的最大堆区可用的最高的字典树节点,并且∪(v)没有被具体化。具体化v的一个祖先的并集列表对于这个最大堆区没有任何收益,因为它们的记录的评分顺序可能与权重顺序或这些记录不一致。对于v的每个非叶子的字典树后代c,使得在从v到c(包括c)的路径上没有节点被具体化。我们可以进行基于成本的分析以量化具体化∪(c)对于wm的最大堆区上进行的操作性能的收益。如果v具有带有具体化列表的后代节点c’,则具体化的后代c’对于wm的最大堆区将不再是有益的。
在此,我们提出对具体化该可用节点v的收益的分析。总体而言,对于字典树节点n,设T(n)表示其子字典树,|T(n)|表示T(v)中节点的数量,D(n)表示n的叶节点集。遍历这个子字典树并访问其叶节点的倒排列表的总时间是O(|T(v)|+|D(v)|)。
如图14所示,假设v具有具体化的后代。设M(v)是v的最高具体化后代集。这些具体化节点可以通过两种方式有助于减少访问v的叶节点的倒排列表的时间。首先,我们不需要遍历具体化节点的后代d∈M(v)。我们可以仅遍历|T(v)|-∑d∈M(v)|T(d)|个字典树节点。其次,当向wm的最大堆区插入列表时,我们将每个d∈M(v)的并集列表以及d′∈N(v)的倒排列表插入到该堆区中,其中N(v)表示在M(v)中不具有祖先的v的叶后代集。使S(v)=M(v)∪N(v)。现在我们量化具体化节点v的收益:
减少遍历时间:由于我们不需要遍历v的后代,因此减少的时间是B1=O(|T(v)|-∑d∈M(v)|T(d)|。
减少堆区构建时间:当为该查询关键词wm构建最大堆区时,我们将并集列表∪(v)插入堆区中,而不是S(v)中那些节点的倒排列表。减少的时间是B2=|S(v)|-1。
以下为用于查询关键词查询wm的具体化v的整体收益:
Bv=B1+B2+Av*B3 (4)
其中Av是在∪(v)上排序访问的数量。以上分析是对于单个查询。假设我们给定一个查询工作量(workload)。对于每个字典树节点,我们可以通过取具体化该工作量中所有查询的并集列表的收益的和来量化关于该工作量具体化其并集列表的收益,基于方程式4。另外,具体化v的存储器成本(memory cost)是v的并集列表中记录的数量。我们选择最好的并集列表来基于它们的收益和成本(大小)进行具体化。注意具体化这个列表将影响该查询工作量上具体化其他并集列表的收益。所以在决定具体化一个节点后,我们可能需要重新计算其他受影响的节点的收益。我们重复这一过程,直到我们达到给定的空间预算B。如果没有查询工作量,则我们可以使用该字典树结构来计算每个字典树节点待被查询的可能性,并使用这种信息来计算具体化节点的收益。
总之,我们公开了如何在模糊式边键入边搜索中高效地应答前k个(top-k)查询。我们关注在索引结构上,该索引结构具有数据集中关键词的字典树以及字典树叶节点上记录的倒排列表。我们研究了当采用文献中现有的前k个(top-k)算法时的两种技术挑战:如何高效地支持对倒排列表的随机访问和排序访问?我们提出两种高效的算法来支持随机访问。对于排序访问,我们首先识别一类重要的排名函数,该排名函数允许我们通过将列表分组来改进其性能。接着,我们提出两种技术来支持使用列表删减和具体化来高效地进行排序访问。我们对实际数据集进行了实验研究,显示出我们的技术可以高效地应答对大数据集的查询。
总之,本发明的示出实施方案是一种在文本数据上进行高效的交互式模糊搜索的方法,包括下列步骤:使用基于树的索引来高效率地索引数据;在用户键入查询时,使用算法来遍历所述树;自适应地维持该查询的中间结果以支持交互式模糊搜索;以及使用排名算法将候选结果排序。
本方法还包括执行查询放宽、自动完成或拼写检查。
其中有单个输入搜索框,本发明的示出实施方案允许对多个数据领域的关键词查询,其中该搜索是交互式的,允许在关键词中的小错误、支持同义词和/或允许多个关键词。
本发明的示出实施方案是一种方法,该方法在信息系统中使用以允许用户对文本数据(即使在有小错误的情况下)进行交互式地搜索。
本发明的示出实施方案是一种搜索具有m个属性和n个记录的结构化数据表T的方法,其中A={a1,a2,...,am}表示属性集,R={r1,r2,...,rn}表示记录集,W={w1,w2,...,wp}表示T中区别词语集,其中给定两个词语,wi和wj,“wi≤wj”表示wi是wj的前缀字符串,其中查询由前缀集Q={p1,p2,...,pl}组成,其中预知词语集是 该方法包括为每一前缀pi从相似于pi的数据集中找到前缀集,通过:确定预知记录集RQ={r|r是R的成员,对于每个i,1≤i≤l-1,pi出现在r中,且存在包括在中的w,w出现在r中};以及对于引起查询Q的一次键击,对于给定值t返回RQ中的根据记录与该查询的相关度排名的前t个记录。
当为给定值t返回RQ中的根据记录与该查询的相关度排名的前t个记录时,本发明的所示实施方案包括:通过从根部遍历字典树,在一棵在叶节点上带有倒排列表的字典树中寻找相应于关键词的字典树节点;定位对应于该关键词的字典树节点的叶后代;以及获得倒排列表上相应的预知词语和预知记录。
当为给定值t返回RQ中的根据记录与该查询的相关度排名的前t个记录时,本发明的示出实施方案包括:为每个用户维持一个会话缓存,其中每个会话缓存保留用户过去曾输入的关键词以及每一关键词的其他信息,包括该关键词的相应的字典树节点和前t个预知记录。
当为每个用户维持一个会话缓存时,本发明的示出实施方案包括:逐个字母输入查询字符串c1c2...cx,其中pi=c1c2...ci是前缀查询(1≤i≤x),其中ni是对应于pi的字典树节点,在输入前缀查询pi后,为pi存储节点ni以及其前t个预知记录,在先前的查询字符串c1c2...cx的末尾输入新字符cx+1,确定为px保存的节点nx是否具有标签为cx+1的子节点(child),如果有,则定位节点nx+1的叶后代,并获得相应的预知词语和预知记录;否则,没有词语具有前缀px+1,且然后返回一个空应答。
本发明的示出实施方案是一种方法,该方法还包括任意地修改先前的查询字符串,或者为新查询字符串复制并粘帖完全不同字符串,在用户输入的所有关键词中,识别被缓存的与新查询具有最长前缀的关键词。
本发明的示出实施方案是一种方法,其中前缀查询p1;p2;...;px也被缓存,该方法还包括:输入新查询p’=c1c2...cic’...cy,找到与p’具有最长前缀的pi,通过在新查询c’...cy的最长前缀之后挨个插入字符而使用pi的节点ni增量地(incrementally)应答该新查询p’,如果存在已缓存的关键词pi=p’,则使用pi的已缓存的前t个记录来直接地应答该查询p’;否则,如果没有这样的已缓存的关键词,则应答该查询而不使用任何缓存。
为给定值t返回RQ中的根据记录与该查询的相关度排名的前t个记录的步骤,包括:将查询字符串标记化(tokenize)为几个关键词,k1,k2,...,kl;对于每个关键词ki(1≤i≤l-1),仅仅确定一个预知词语ki以及对应于ki的字典树节点的一个预知记录列表——表示为Ii,其中对于kl有q个预知词语,并且它们的相应的预知记录列表是Il1;Il2;...;Ilq;由确定预知记录,即取部分词语的预知关键词列表的并集;以及,将部分词语的预知关键词列表的并集与该完整关键词的列表取交集。
由确定预知记录的步骤包括:确定部分关键词kl的预知记录列表的并集以通过使用排序-合并(sort-merge)算法产生有序的预知列表,接着通过使用使列表取交集的合并-联接(merge-join)算法来确定几个列表的交集假设这些列表被预排序或通过进行二分法检索或基于散列的查找来确定在短列表上的每个记录是否出现在其他长列表中。
对于给定值t返回RQ中的根据记录与该查询的相关度排名的前t个记录的步骤,包括:将每个关键词视为部分关键词,即对于每个预知记录r,给定输入查询Q={k1;k2;......kl},对于每个1≤i≤l,在r中对于ki存在至少一个预知词语wi,由于ki必须是wi的前缀,则通过以下方式量化它们的相似度:
sim(ki,wi)=|ki|/|wi|
如果在r中对于部分关键词ki具有多个预知词语,则选定与ki具有最大相似度的预知词语wi,并量化预知词语的权重,以捕获预知词语的重要程度,且考虑预知词语出现的属性的数量,表示为na,以将相似度、权重和属性的数量组合,产生如下所述的排名函数以为该查询Q对r进行评分:
其中α是0和1之间的调谐参数(tuning parameter)。
该方法用于搜索具有该查询Q={k1;k2;...;kl}的结构化数据表T,其中两个字符串s1和s2之间的编辑距离——表示为ed(s1,s2)——是从第一字符串s1转换到第二字符串s2所需要的单字符编辑操作的最小数量,以及编辑距离阈值δ,对于1≤i≤l,其中ki的预知词语集是其中预知记录集RQ是本发明的所示实施方案包括:在RQ中确定前t个预知记录,这些记录关于编辑距离阈值δ根据它们的与Q的相关度被排名。
确定预知记录集RQ的步骤包括:确定具有相似于部分关键词的前缀的可能的多个词语,包括对应于这些词语的多个字典树节点(定义为关键词k的有效节点(active node)),定位有效节点的叶后代,以及确定对应于这些叶节点的预知记录。
本发明的示出实施方案还包括:输入关键词k,存储有效节点集Φk={[n,ξn]},其中n是k的一个有效节点,并且ξn=ed(k;n)≤δ,在k后输入再一个字母,以及仅找到k的有效节点的后代作为新查询的有效节点,该新查询包括为一个空关键词(empty keyword)ε初始化一个有效节点集,即Φε={[n;ξn]|ξn=|n|≤δ},也即包括所有的具有不超过编辑距离阈值δ的长度|n|的相应字符串的字典树节点n,逐个字母输入查询字符串c1c2...cx,如下所述:在输入前缀查询pi=c1c2...ci(i≤x)后,存储pi的有效节点集Φp,当输入新字符cx+1并提交新查询px+1后,通过使用来增量地如下所述确定px+1的有效节点集对于中的每个[n;ξn],我们考虑n的后代是否为px+1的有效节点,对于节点n,如果ξn+1<δ,则n是px+1的有效节点,则将[n;ξn+1]存储至对于节点n的每个子节点nc,(1)子节点nc具有一个不同于cx+1的字符,ed(ns;px+1)≤ed(n;px)+1=ξn+1,如果ξn+1≤δ,则ns是新字符串的有效节点,接着将[ns;ξn+1]存储至或者(2)具有标签cx+1的子节点nc被表示为匹配节点nm,ed(nm;px+1)≤·ed(n;px)=ξn≤δ,使得nm是新字符串的有效节点,接着将[nm,ξn]存储至但是如果节点nm的距离比δ小,即ξn<δ,则对于每个nm的后代d——其距离nm最多δ-ξn个字母,将[d;ξd]添加至新字符串px+1的有效节点集,其中ξd=ξn+|d|-|nm|。
在存储集合的期间,对于相同的字典树节点v,可能添加两对新的[v;ξ1]和[v;ξ2],其中在这种情况下,对于相同的字典树节点v,存储所添加的新的两对[v;ξ1]和[v;ξ2]中具有较小编辑距离的一个。
给定两个词语wi和wj,它们的归一化编辑距离(ned,normalized edit distance)是:
ned(wi;wj)=ed(wi;wj)/max(|wi|;|wj|),
其中|wi|表示wi的长度,其中给定输入关键词及一个其预知词语,具有最小ned的预知词语的前缀被定义为最好的预知前缀,而相应的归一化编辑距离被定义为“最小的归一化编辑距离(minimal normalized edit distance)”,表示为“mned”,其中对于给定值t返回在RQ中根据记录与该查询的相关度而排名的前t个记录,包括:确定如果ki是完整的关键词,则使用ned来量化相似度;否则,如果ki是部分关键词,则使用mned来量化它们的相似度,即,使用以下公式来量化两个词语的相似度:
sim(ki;wi)=γ*(1-ned(ki;wi))+(1-γ)*(1-mned(ki;wi)),其中γ是介于0和1之间的调谐参数。
对于给定值t,返回在RQ中根据记录与该查询的相关度而排名的前t个记录的步骤包括:在每个前缀节点的叶节点的并集列表∪1、∪2、...∪l中,识别最短的并集列表,验证最短列表上的每个记录ID——通过为每个记录r维持一个前向列表而检查该ID是否在所有其他并集列表上,所述前向列表是r中关键词的ID的排序列表,表示为Fr,使得每个前缀pi都具有关键词ID的区间[MinIdi,MaxIdi],验证r是否出现在对于最短并集列表上的记录r的查询前缀pk的并集列表∪k上——通过对前向列表Fr执行MinIdk的二分法检索来测试pk是否作为前缀出现在前向列表Fr中,以得到下界Idlb,并检查Idlb是否大于MaxIdk,如果该条件为真则探测成功,否则失败。
当每个查询关键词具有相似前缀的多个有效节点时,本发明的所示的实施方案不是确定一个前缀节点的叶节点的并集,而是确定一个前缀关键词的所有有效节点的叶节点的并集,估计这些并集列表的长度以找到最短的一个,对于最短并集列表上的每个记录r,对于每个其他的查询关键词,对于其每个有效节点,使用r、Fr的前向列表测试相应的相似前缀是否出现在该记录r中作为前缀。
为每个用户维持一个会话缓存的步骤包括:缓存查询结果并使用它们应答后续的查询;在查询字符串在后续的查询中变更长时,增加编辑距离阈值δ;使用分页(pagination)来在不同的页显示查询结果从而部分地遍历最短的列表,直到为第一页获得足够的结果为止,继续遍历最短的列表以确定更多的查询结果并缓存它们;或者对于预定义常数k,根据排名函数获得前k个记录,通过使用记录的前向列表探测关键词区间来验证遍历中访问的每个记录,缓存通过验证的记录,接着当增量地应答查询时,首先通过探测关键词范围来验证该查询的先前的增量的缓存结果中的每个记录,如果来自该缓存的结果不足以计算新的前k个,继续从先前的查询的停止点开始在列表上遍历,直到我们具有足以用于新查询的前k个结果。
本发明的示出实施方案是这样一种方法:对于引起查询Q的键击,对于给定值t返回RQ中的根据记录与该查询的相关度排名的前t个记录的步骤,包括匹配前缀,这包括:在查询关键词及其最好的匹配前缀之间相似度;预知关键词,对于相同前缀的不同预知关键词可具有不同的权重;以及权重,不同记录具有不同的权重,其中查询Q={p1,p2,...},其中p′i是pi的最好的匹配前缀,其中ki是p′l的最好的预知关键词,其中sim(pi,p′i)是p′i和pi之间的编辑相似度,其中Q的记录r的评分可以被定义为:
其中α和β是权重(0<β<α<1),score(r,ki)是关键词ki的记录r的评分。
本发明的示出实施方案是一种模糊式边键入边搜索的方法,其中R是诸如相关表中元组等记录的总合,其中D是R中词语的一个数据集,其中用户逐个字母键入关键词,该方法包括:通过使用测量字符串之间相似度的编辑距离来立即找到带有相似于查询关键词的关键词的记录,其中两个字符串s1和s2之间的编辑距离是单字符编辑操作的最小数量,表示为ed(s1,s2),其中Q是用户已输入的关键词查询,该关键词查询是关键词序列[w1,w2,:::,wm];将最后的关键词wm视为部分关键词,找到数据集中相似于查询关键词的关键词,其中π是量化字符串s和D中查询关键词w之间相似度的函数,包括,但并不限于:
π(s,w)=1-ed(s,w)/|w|,
其中|w|是关键词w的长度;以及基于查询关键词长度归一化编辑距离,以允许较长查询关键词出现更多的错误,其中d是D中的关键词,对于每个完整的关键词wi(i=1,......,m-1),定义d与wi的相似度为:
Sim(d,wi)=π(d,wi),
由于最后的关键词wm被视为前缀的情况,使用函数π定义d与wm的相似度作为d的前缀的最大相似度,即Sim(d,wm)=max d的前缀p π(p,wm),其中τ是相似度阈值,其中如果Sim(d,w)≥τ,则D中的关键词相似于查询关键词w,其中如果π(p,wm)≥τ,则D中关键词的前缀p相似于查询关键词wm,其中Φ(wi)(i=1,....,m)表示D中相似于wi的关键词集,并且其中P(wm)表示D中相似于wm的关键词的前缀集。
本发明的示出实施方案还包括:基于R中每个记录r与该查询的相关度来对所述每个记录r进行排名,其中F(,)是取查询Q和记录r∈R的排名函数;确定评分F(r,Q)作为记录r与查询Q的相关度;以及给定一个正整数k,确定R中根据记录与Q的相关度基于评分F(r,Q)进行排名的k个最好记录。
确定评分F(r,Q)作为记录r与查询Q的相关度的步骤包括:基于r中关键词以及查询中的那些关键词的相关度来确定相关度评分F(r,Q),给定记录中的关键词d可具有与部分关键词wm不同相似度的不同前缀,通过取它们的最大值作为d和wm之间的整体相似度,其中记录r中的关键词具有关于r的权重,诸如记录中关键词的词频TF以及逆文档频率IDF。
当数据集D包括D中数据关键词的字典树时,其中每个字典树节点具有一个字符标签,其中D中的每个关键词对应于字典树上从根部到叶节点的一个唯一路径,其中叶节点具有成对的倒排列表[rid,weight]i,其中rid是包含叶节点字符串的记录的ID,weight是记录中关键词的权重,本发明的示出的实施方案还包括:通过两个步骤确定查询Q的前k个应答,包括:对于查询中的每个关键词wi,确定相似关键词Φ(wi)以及字典树上相似前缀P(wm);以及访问这些相似数据关键词的倒排列表以确定该查询的最好的k个应答。
访问这些相似数据关键词的倒排列表以确定该查询的最好的k个应答的步骤包括:随机地访问该倒排列表,在每个随机访问中,给定记录r的ID,获得相关于查询Q中关键词的信息,以使用前向索引确定评分F(r,Q),在前向索引中每个记录具有其关键词ID的前向列表以及它们相应的权重,其中每个关键词具有字典树上对应其叶节点的唯一ID,并且关键词的ID遵循它们的字母顺序。
随机地访问该倒排列表的步骤包括:对于每个字典树节点n,维持一个关键词区间[ln,un],其中ln和un分别是其叶节点的最小和最大关键词ID;验证记录r是否包含具有相似于wm的前缀的关键词,对于字典树上相似于wm的前缀p,检查在p的字典树节点的关键词区间[lp,up]中的r的前向列表上是否有关键词ID,由于r的前向列表是排序的,此检查使用下界lp来对r的前向列表进行二分法检索以得到不小于lp的最小ID°,如果γ存在,且不大于上界up,即γ≤up,则该记录具有相似于wm的关键词。
随机地访问该倒排列表的步骤包括:对于相似于wm的每个前缀p,遍历p的子字典树并识别其叶节点;对于每个叶节点d,对于查询Q,这一关键词d具有相似于该查询中wm的前缀,存储
[查询ID,部分关键词wm,sim(p,wm)],
从而在多个查询被同时应答的情况下使该查询与其他查询区分开;存储wm和p之间的相似度;确定这一关键词在候选记录中的评分,在叶节点具有几个相似于wm的前缀的情况下,存储这些前缀与wm的最大相似度;对于查询中的每个关键词wi,存储那些相似于wi的字典树节点的相同信息,定义叶节点的被存储条目作为其相关查询关键词的总合;使用相关查询关键词的总合,通过扫描r的前向列表来高效地检查记录r是否包含具有相似于部分关键词wm的前缀的完整词语,对于每个关键词ID,定位字典树上相应的叶节点,并测试相关查询关键词的总合是否包括这一查询和该关键词wm,如果是,则使用被存储的字符串相似度来确定这一关键词在该查询中的评分。
确定评分F(r,Q)的步骤包括:对于查询中的每个关键词w,确定关键词相对于记录r和该查询的评分,表示为Score(r,w,Q);以及通过对查询中所有关键词的Score(r,w,Q)应用单调函数来确定评分F(r,Q)。
其中d是记录r中的关键词,使得d与查询关键词w相似,d∈Φ(w),其中Score(r,w,d)表示这个查询关键词w与记录关键词d的相关度,其中记录中查询关键词w的相关度值Score(r,w,Q)是记录中所有关键词的Score(r,w,d)的最大值,其中确定相对于记录r和该查询的关键词的评分,表示为Score(r,w,Q),本发明的示出的实施方案包括:当计算查询关键词与记录的相关度时,找到记录中与查询关键词最相关的关键词,作为显示这一记录对于该用户查询来说是如何重要的指示。
本发明的示出实施方案包括,其中F(r,Q)是
其中Score(r,wi,Q)=maxr中记录关键词d{Score(r,wi,d)},(2)
以及
Score(r,wi,d)=Sim(d,wi)*Weight(d,r),(3)
其中Sim(d,wi)是完整关键词wi和记录关键词d之间的相似度,以及Weight(d,r)是记录r中d的权重。
权利要求31的方法,包括将倒排列表基于它们相应的查询关键词分割成几个组,其中每个查询关键词w具有一组的倒排列表,产生按记录评分相对于这一关键词排序的记录ID的列表,并使用前k个算法找到该查询的最好的k个记录。
使用前k个算法找到该查询的最好的k个记录的步骤包括:对于查询关键词w的倒排列表的每个组,通过在倒排列表上建立最大的堆区获得w的下一个最相关的记录ID,包括:在组中每个倒排列表上维持一个指针,其中所述堆区由指针业已指向的记录ID组成,按这些记录中的相似关键词的评分排序,由于每个倒排列表已基于记录中关键词的权重排序,并且这一列表上的所有记录都享有这一关键词和查询关键词w之间的相同相似度,该列表还基于这些记录中这一关键词的评分进行排序;通过从所述堆区弹出顶部元来获得来自这一组的下一个最好记录;将该弹出元的列表的指针增加1;并将这一列表的新元推入至所述堆区;忽略可产生这一弹出记录的其他列表,因为它们相应的评分将不再影响这一记录相对于查询关键词w的评分。
L1,......Lt分别是带有相似关键词d1,......dt的倒排列表,本发明的示出实施方案还包括将这些倒排列表基于它们关键词与w的相似度Sim(d1,w),......sim(dt,w)进行排序,使用具有最高相似度值的列表构建最大的堆区。
本发明的示出实施方案还包括:通过预计算和存储字典树上一些倒排列表的并集改进排序访问,其中v是字典树节点,并且∪(v)是v的叶节点的倒排列表(根据其记录的权重被排序)的并集,并且如果一个记录在这些列表上出现了多于一次,则选定其最大的权重作为其在列表∪(v)上的权重,其中∪(v)定义为节点v的并集列表。
当v是字典树节点时,本发明的示出实施方案包括:具体化并集列表∪(v),并且使用∪(v)来加速对前缀关键词wm的排序访问是∪(v)基于其记录权重进行排序,其中关键词di的列表上的记录r相对于wm的Score(r,wm,di)值是基于Weight(di,r)和Sim(di,wm)的,其中v的所有叶节点都相对于wm具有相同相似度,其中v的所有叶节点都相似于wm,即它们与wm的相似度不小于阈值τ,使得并集列表∪(v)的排序顺序也是叶节点列表相对于wm的记录的评分的顺序。
其中B是可用于具体化并集列表的存储空间的预算,包括:选定字典树节点,以将它们的并集列表具体化为使查询的性能最大化,其中如果其并集列表已被具体化,则节点被定义为被“具体化”,其中对于具有前缀关键词wm的查询Q来说,一些字典树节点使它们的并集列表具体化,其中v是wm的最大堆区可用的最高的字典树节点,其中∪(v)没有被具体化,对于v的每个非叶字典树的后代c,使得在从v到c(包括c)的路径上没有节点被具体化,本发明示出的实施方案包括:进行基于成本的分析以量化基于遍历时间减少、堆区构建时间减少以及排序访问时间减少在wm的最大堆区上进行∪(c)具体化的操作性能的收益,以及该查询关键词查询wm的具体化v的整体收益Bv为:
Bv=B遍历时间减少+B堆区构建时间减少+Av*B排序访问时间减少,
其中Av是每个查询在∪(v)上排序访问的数量,以及接着根据该查询发生的概率,将具体化其并集列表的收益相加至查询工作量中的所有查询或字典树,以及在计算每个节点的收益之后,重新计算具体化其他受影响节点的收益Bv,直到实现给定的存储空间的预算B。
尽管装置和方法为了文法流畅已经或将借助功能性说明进行描述,但应明确理解,除非明确地根据35 USC 112阐明,权利要求书并不认为必然以任何方式受限于“方法”或“步骤”限制的构架,而是应符合根据等价物的司法原则由权利要求所提供的限定的含义和等价物的全部范围,并且在权利要求书明确地根据35 USC 112阐明的情况下,应符合根据35 USC 112的全部法定等价物。现在,本发明通过以下的附图能更好地被呈现,附图中相同的要素由相同的数字来标记。
附图说明
图1和2是由所示实施方案的方法产生的屏幕截图。
图3是表I中词语上部的字典树。
图4a-4e(也总合地表示为图4)是字典树图表序列,示出用于处理“nlis”(编辑距离阈值δ=2)的前缀查询的模糊搜索的执行情况。
图5是描绘由有效节点集φpx对有效节点集φpx+1的计算的图表。我们考虑在φpx中的一个有效[n,ξn]。
图6是在叶节点带有倒排列表的字典树。
图7是使用前向列表的前缀交集的图表。带有下划线的数字是关键词ID,没有下划线的数字是记录ID。
图8是描绘了使用被缓存的应答计算前k个的结果并在一列表上继续未完成的遍历的图表。
图9是一种索引结构,即在叶节点上带有倒排列表的字典树。
图10是示出与在查询Q=[w1,w2,...wm]中的关键词相似的关键词的图表。每一查询关键词wi在叶节点上具有相似的关键词。最后的前缀关键词wm具有相似的前缀,这些相似的前缀中的每一个在叶节点上都具有几个关键词。
图11是示出前向列表的探测的图表。
图12是示出在叶节点上探测的图表。
图13是示出用于所述查询关键词“icde”和“li”的最大堆区(Max Heaps)的图表。每一加罩(shaded)列表合并自潜在列表。这是“虚拟”的,因为我们不需要计算整个列表。在长方形中的这些列表是用于构建堆区(heap)的那些,该堆区可以删除不在长方形中的其他低评分列表。
图14是示出具体化字典树节点相对于该查询中最后查询wm的合并列表∪(v)的收益。
现在,可以参考以下关于优选实施方案的详细描述来更好地理解本发明及其各种实施方案,所述优选实施方案作为权利要求书中限定的本发明的实施例示出。应明确理解,由权利要求书限定的本发明可以比在下文描述的所示实施方案具有更宽的范围。
具体实施方式
介绍——iSearch
本发明的示出实施方案是计算模式,称为“iSearch”,即支持在结构化数据上的交互式模糊搜索。它具有两个独特的特征:(1)交互式:在用户键入关键词查询时,该系统“立即”搜索最好的应答;(2)模糊:当搜索到相关记录时,该系统还试图找到包括相似于该查询中关键词的词语的那些记录,即使它们不是精确匹配。
我们已经研发出使用这一新模式的几种原型。第一个是一种系统,可参见http://psearch.ics.uci.edu,该系统可支持在UCI目录上的搜索。图1示出了一屏幕截图。第二个是支持在多于一百万个公开记录的DBLP数据集(http://www.informatik.uni-trier.de/>>ley/db/)上的搜索,可参见http://dblp.ics.uci.edu。图2示出了一屏幕截图。作为一个实例,在图1中,用户已键入查询字符串“professor smyt”。尽管用户并未完全地键入第二关键词,但该系统已能找到用户可能感兴趣的人员记录。注意在查询字符串中两个关键词(包括部分关键词“smyt”)可出现在找到记录的不同属性中。具体地,在第一记录中,关键词“professor(教授)”出现在“title(头衔)”属性中,部分关键词“smyt”出现在“name(姓名)”属性中。匹配的前缀为用户突出显示(highlighted)。这一特征使得该模式不同于许多自动完成系统,这些自动完成系统主要处理单属性数据(诸如一组流行(popular)查询)并将查询视为单属性字符串。除了找到带有前缀与该查询关键词匹配的词语的记录,该系统还找到带有相似于该查询关键词的词语的记录,诸如人名“smith”。
当用户对于潜在的数据或它们要寻找的实体的知识有限时,支持模糊搜索的特征是尤其重要的。在用户键入更多的字母时,该系统在数据上进行交互式搜索,并更新相关记录的列表。该系统还利用了先验知识(a-priori knowledge),诸如同义词。例如,给定“William”和“bill”是同义词,当用户键入“bill crop”时,该系统可找到人员“William Kropp”。由于友好的用户界面和高效率,这一搜索原型(prototype)已在UCI被许多人们经常地使用且受到正面反馈。
我们开发出对这些问题的解决方案。我们提出用于通过使用较早查询的缓存结果来应答查询的几种增量搜索(incremental-search)算法。通过这种方式,对该查询的应答的计算可以关于用户的多个键击全面展开,由此我们可以达到高速度。
特别地,我们做出以下贡献。(1)我们首先考虑带有单个关键词查询的情况,并提出用于计算与查询中前缀关键词相似的关键词前缀的增量算法。(2)对于多个关键词的查询,我们研究用于计算查询关键词的倒排列表的交集的各种方式,并研究一种用于高效地计算所述结果的算法。其主要思想是使用关键词ID的前向列表,用于检查记录是否(甚至近似地)匹配查询关键词的情况。(3)我们开发了用于增量搜索的按需缓存技术。其思想是仅缓存查询结果的部分内容。对于后续查询,如果先前的缓存的结果不充分,则未完成的计算将继续。通过这种方式,我们可以高效地计算并缓存少量结果。(4)在这一模式中,我们考虑各种特征,诸如如何适当地对结果排名、如何在结果中突出显示关键词以及如何利用专有域(domain-specific)的信息(诸如同义词)以改进搜索。(5)除了使用几个真实的原型外,我们对研究的技术在实际的数据集上进行了彻底的实验评估,并示出这一新计算模式的实用性。所有的实验都在使用单个桌面式计算机机(desktop machine)的情况下进行,所述单个桌面式计算机在几百万个记录上仍可以获得微秒级的响应时间。
II.结构化数据上多个关键词的iSearch
我们首先给出一个实例,示出iSearch如何工作以在结构化数据上进行多个关键词的查询。假设有一个带有人员信息的结构人员表(id;name(姓名);title(头衔);email(电子邮箱))。该数据储存在服务器上。用户通过Web浏览器访问并搜索该数据。用户键入的每次键击都引起一个查询,包括用户已键入的当前字符串。该浏览器将该查询发送给服务器,服务器计算并将按照与该查询的相关度排名的最好应答返回至用户。如果用户点击界面上的“搜索(search)”按钮,则浏览器将该查询发送至服务器,服务器以与常规关键词搜索方法相同的方式来应答该查询。例如,假设用户搜索名叫“smyth”的教授(professor),并逐个字母输入查询“professor smyt”,如图1所示。用分隔符——例如空格符——将该字符串标记化为关键词。关键词(除了最后一个)——诸如“professor”——已被整个地键入。最后的关键词是部分关键词,诸如“smyt”,因为用户可能没有完成键入该完整关键词。
对于部分关键词,我们想知道用户想要键入的可能词语。然而,给定的信息有限,我们可以仅在数据集中识别带有这一部分关键词作为前缀的词语集。这一关键词集被称为该部分关键词的预知词语。例如,对于部分关键词“smyt”,其预知词语是“smyth”、“smytha”等。我们得到包含所有完整关键词以及该部分关键词的预知词语中的至少一个的记录。我们称这些记录为该查询的预知记录。图1显示了四个预知记录。通过这种方式,iSearch可以节省用户的时间和精力,因为用户可以找到这些应答,即使他们没有完成键入所有完整的关键词。在该本文中有两个挑战。第一个是在用户每次键击后,如何交互地并增量地识别该预知词语。第二个是如何高效地计算带有多个关键词的查询的预知记录,尤其是当存在许多这种记录时。
问题定式化(formulation)
我们对在相关表上进行交互式模糊搜索的问题定式化,并且我们的方法可适于文本文件、XML和具有多个表的数据库。我们首先通过以下方式来对iSearch问题定式化。考虑具有m个属性和n个记录的结构化数据表T。使A={a1;a2;......;am}表示属性集,R={r1;r2;......;rn}表示记录集,以及W={w1;w2;......;wp}表示T中的区别词语集。给定两个词语,wi和wj,“wi≤wj”表示wi是wj的前缀字符串。例如,考虑表I中显示的公开表。其具有10个记录和5个属性。我们有“lu”≤“luis”。
一个查询由前缀集Q={p1,p2......pl}组成。对于每一前缀pi,我们想从相似于pi的数据集中找出前缀集。明显地,仅当最后的关键词被视为部分前缀且其他部分被视为已完成的词语时,该技术可被用于应答查询。在这一工作中,我们使用编辑距离来测量两个字符串之间的相似度。两个字符串s1和s2之间的编辑距离,表示为ed(s1,s2),是从第一个字符串转换为第二个字符串所需的单字符编辑操作(即,插入、删除和替换)的最小数量。例如,ed(smith,smyth)=1.
定义1:(iSearch问题)给定表T和查询Q={k1;k2;......kl},其中kl是最后的部分关键词,设预定词语集为Wkl={w|w是W的成员且kl≤w}。我们想计算预知记录集RQ={r|r是R的成员,对于每个i来说;1≤i≤l-1},ki出现在r中,且在Wkl中包括w,w出现在r中}。对于引起查询Q的键击,我们对于给定的值t返回在RQ中根据记录与该查询的相关度进行排名的前t个记录。
我们将数据和查询字符串视为小写字符串。我们将关注如何找出预知记录,在这些预知记录中,我们可以使用排名函数找出最好的应答。可以使用多种不同的排名函数,如下文所述。我们使用字典树来索引表中的词语。表中的每个词语w对应于从字典树的根部到叶节点的唯一路径。路径上的每个节点具有w中的字符的标签。为了简便,我们可互换地使用一个节点和其对应的字符串。对于每个叶节点,我们存储记录的ID的倒排列表,所述记录包含叶节点的词语。例如,对于表I中的公开表,其用于该标记化的词语的字典树显示在图3中。词语“luis”具有的节点ID为16,其倒排列表包括包含该词语的记录7。
或者,问题定式化可以从用于交互式模糊搜索的定义开始。
定义1(交互式模糊搜索)。给定记录集R,设W是在R中的词语集。考虑查询Q={p1,p2,...,pl}和编辑距离阈值δ。对于每个pi,使Pi为设候选记录集RQ为问题是计算RQ中的根据记录与Q的相关度而排列的最好记录。在用户修改该查询——例如键入更多的字母——时,这些记录被增量地计算。
索引:
我们使用字典树来索引相关表中的词语。表中的每个词语w对应于从字典树的根部到叶节点的唯一路径。路径上的每个节点在w中具有字符的标签。为了简便,提到的节点与随后文本中的相关字符串是可互换的。每个叶节点具有记录的ID的倒排列表,所述记录包含相应词语以及额外信息(例如,出现关键词的属性以及关键词位置)。例如,图6示出了公开记录的部分索引结构。词语“vldb”具有字典树节点ID 15,其倒排列表包括记录ID 6、7和8。为了简便,该图仅示出了记录id,没有显示关于属性和位置的额外信息。
B.单个关键词
我们首先考虑如何使用字典树来应答单个关键词的查询。用户键入的每次键击引起当前关键词的查询,且客户端浏览器将该查询发送至服务器。
简单方法:
一种在服务器上处理这种查询的简单方式是通过以下所述从头开始来应答该查询。我们首先通过从根部遍历字典树来找到对应于这一关键词的字典树节点。接着,我们定位这一节点的叶后代,并获得在倒排列表上的相应预知词语和预知记录。例如,假定用户逐个字母键入查询字符串“luis”。当用户键入字母“l”时,客户端将查询“l”发送至服务器。服务器找到对应于这一关键词的字典树节点,即,节点10。接着,其定位节点10的叶后代,即节点11、12、13、14和16,并获得对应的预知词语,即“li”、“lin”、“liu”、“lu”和“luis”,以及预知记录,即1、3、4、5和7。当用户输入字母“u”时,客户端将查询字符串“lu”发送至服务器。服务器通过以下所述从头开始(from the scratch)应答查询。其首先找到这一字符串的节点14,接着定位节点14的叶后代(节点14和16)。其获得对应的预知词语(“lu”和“luis”),并计算预知记录(4和7)。其他由所述键击引起的查询通过相似的方式处理。这一方法的一个主要局限性是其包含大量的重新计算,而不利用较早查询的结果。
2)基于缓存的方法
我们对于每一用户维持一个会话。每个会话保留用户过去键入的关键词以及用于每一关键词的其他信息,包括其相应的字典树节点和前t个预知记录。保留这些信息的目标是通过以下所述使用其增量地应答随后的查询。假定用户已逐个字母键入查询字符串c1c2...cx。使得pi=c1c2...cx为前缀查询(1≤i≤x)。假定ni是对应于pi的字典树节点。在用户键入前缀查询pi后,我们存储pi的节点ni及其前t个预知记录。
例如,假定用户已键入“lui”。在提交这一查询后,服务器存储用于前缀查询“l”的节点10以及记录1、3、4、5和7(仅前t个)、用于前缀查询“lu”的节点14以及记录4和7、以及用于“lui”的节点15以及记录7。对于用户键入的每一次键击,为了简便,我们首先假定用户在先前的查询字符串的末尾输入新的字符cx+1。为了增量地应答新的查询,我们首先检查已被保留用于px的节点nx是否具有cx+1标签的子节点,如果有,我们定位节点nx+1的叶后代,并获得相应的预知词语和预知记录。否则,没有具有前缀px+1的词语,我们可以仅返回一个空应答。例如,如果用户键入“s”,则我们检查保留用于“lui”的节点15是否具有标签“s”的子节点。在此,我们找到节点16,并获得预知词语“luis”和预知记录7。
总体来说,用户可以任意地修改先前的查询字符串,或者复制并粘帖完全不同的字符串。在这种情况下,对于用户所键入的所有关键词中的新的查询字符串,我们识别具有与新查询有最长前缀的被缓存关键词。正式地,考虑查询字符串c1c2...cx。假定我们已缓存前缀查询p1;p2;...;px。假定用户提交新查询p’=c1c2...cic’...cy。我们找到与p’有最长前缀的pi。接着,我们使用pi的节点ni通过在新查询c’......cy的最长前缀后一个接一个地插入字母来增量地应答该新查询p’。具体地,如果存在被缓存关键词pi=p’,我们使用pi被缓存的前t个记录来直接地应答查询p’;如果没有这种被缓存的关键词,那么我们从头开始应答该查询。
C.多个关键词
现在我们考虑在多个关键词查询的情况下如何进行交互式搜索。对于引起查询的键击,我们首先将查询字符串标记化为几个关键词,k1;k2;......;kl。对于每个关键词ki(1≤i≤l-1),由于其被视为完整的关键词,我们仅考虑预知的词语(即,ki)以及一个预知记录列表(即,对应于的ki的字典树节点的倒排列表,表示为Ii)。对于部分关键词kl,可以有多个预知词语和多个预知记录列表。假定有用于kl的q个预知词语,并且它们相应的预知记录列表是Il1;Il2;......;Ilq。注意完整关键词的预知记录列表可以基于被缓存的完整关键词的节点来获得。部分关键词的预知记录列表可以通过之前讨论的方式来计算。现在,我们的问题是将预知记录计算为,概念上地,我们取用于该部分词语的预知关键词列表的并集,并且取这一并集列表与完整关键词列表的交集。我们使用以下实施例来说明这一操作。
实施例2:
假定用户逐个字母输入查询“databases vldb luis”。我们使用表II来说明我们的方法如何工作。在用户键入关键词“databases”时,对于每一次键击,我们如前所述增量地应答该查询。当用户键入空格时,我们假定用户已完整地键入关键词“databases”。当用户输入“v”时,我们找到字典树节点17。我们识别预知词语“vldb“以及预知记录6、7和8。我们计算“databases”的预知记录和“v”的预知记录的交集,并得到当前查询的预知记录(记录6、7和8)。相似地,我们可以增量地应答查询“databases vldb”。当用户键入另一个空格时,我们假定“vldb”已被已完整地键入。当用户键入“lu”时,有两个预知词语(“lu”和“luis”)。我们首先计算这两个预知词语的记录列表的集合,并得到有序的预知记录列表{4,7}。用于“databases”的预知记录列表是{3,4,5,6,7,8,9,10};而“vldb”的预知记录列表是{6,7,8}。我们将这三个列表取交集并得到最后的预知记录(7)。
总体而言,我们首先计算该部分关键词kl的预知记录列表的并集以通过使用排序-合并式算法(sort-merge algorithm)来产生有序的预知列表。接着,我们计算几个列表的交集,如果这些倒排列表很大,那么计算预知记录是很昂贵的。在此可采用各种算法。具体地,我们考虑两种方法。一种方式是使用合并-联接算法(merge-join algorithm)来取这些列表交集,假定这些列表是被预排序的。另一种方式是通过进行二分法检索或基于散列的查找来检查短列表上的每一记录是否出现在其他长列表中。第二种方法已被示出获得高的性能。
D.将每一关键词视为部分关键词
在大多数情况下,当用户键入空格符时,用户不可以修改空格前的关键词。因此我们可以将它们视为完整的关键词。在一些情况下,用户可以修改它们以改进应答,或者由于他们知识有限可以输入部分关键词,例如对于“padhraic smyth”来说输入“pad smyt”。为了解决这一问题,我们可以将每次输入的关键词视为部分关键词。我们可以以相似方式来应答该查询。我们通过以上所述来识别用于每一部分关键词的预知词语和预知记录,并根据以上所述来计算该查询的预知记录。注意给定查询Q={k1k2......kl},对于每个关键词,可以有多个预知记录列表。假定关键词ki具有qi个预知记录列表,表示为Ii1;Ii2;......;Iiqi。我们计算预知记录我们可以很简单地延伸以上所述算法来计算这一交集。
E.对预知记录作排名
由于诸如客户端上界面有限等原因,我们想要返回较小数量的相关记录。可以使用各种排名函数来对预知记录进行排名。在此,我们考虑通过利用每一关键词可被视为部分关键词这一事实的特定排名函数,其与将每一输入关键词视为完整关键词的搜索界面有很大不同。
给定一个输入查询Q={k1;k2;......;kl},对于每一预知记录r,对于每一个1≤i≤l,在r中对于ki存在至少一个预知词语wi。由于ki必须是wi的前缀,我们可将其相似度量化为:
sim(ki;wi)=|ki|/|wi| (1)
如果在r中有用于部分关键词ki的多个预知词语,则我们选定与ki具有最大相似度的预知词语wi。我们还考虑预知词语的权重,以捕捉数据中预知词语的重要程度。例如,我们可以使用关键词wi的逆文档频率来量化其权重,表示为idfwi。另外,我们考虑预知词语出现的属性的数量,表示为na。因此,通过将这3个参数组合在一起,我们建议用于查询Q的评分r的排名函数如下:
其中α是0和1之间的调谐参数。
突出显示:当用户键入一些关键词时,由于我们将每个关键词视为部分关键词,我们想突出显示每个关键词的预知词语。我们突出显示用户已键入的预知词语的前缀。例如,对于输入关键词“lu”,及其前缀词语是“luis”,我们将其突出显示为“luis”。为了高效地突出显示预知词语,我们需要存储该信息(在倒排列表上),所述信息除了记录ID以外,还包括关于该词语出现的哪个属性中以及该词语在该属性中的偏移(offset)。例如,在图3中,对于在其倒排列表上关于字符串“luis”的节点16,我们需要保留其记录ID(7)、属性ID(3)以及在该属性中的偏移(20)。(为了简便,我们在图中仅显示记录ID。)
同义词:
我们可以利用关于同义词的先验知识来找到相关记录。例如,“William=Bill”在人名领域中是常见的同义词。假定在潜在的数据中,有人名叫“Bill Gates”。如果用户键入“William Gates”,我们仍可以找到这个人。为此,在字典树上,对应于“Bill”的节点具有到对应于“William”的节点的链接,反之亦然。当用户键入“Bill”时,除了获得“Bill”的预知记录外,我们还根据所述链接识别“William”的那些预知记录。通过这种方式,我们的方法可以很容易地延伸为利用同义词。
带有模糊搜索的iSearch
假定用户想要搜索由Christos Faloutsos所写的论文。用户并不知道准确的拼写,并键入“chritos felouts”,如图2所示。iSearch仍可以找到相关的应答;对于“chritos”和“flotsos”,我们预知为“christos”和“faloutsos”,并且得到前t个相关记录。带有模糊搜索的iSearch是吸引人的,尤其是因为即使用户由于有限的认知键入带有小的错误的查询,该系统仍可以找到用户可能感兴趣的应答。一个很大的挑战是如何增量且有高效地识别那些与输入关键词相似的预知词语。我们开发了一种高效的算法来解决这一问题。
问题定式化
我们首先将以上问题定式化延伸以支持模糊搜索。我们将在给定查询中的每个输入关键词视为部分关键词。对于每个关键词,我们识别其预知词语,所述预知词语在给定阈值内具有相似于该关键词的前缀,并获得包含每一关键词的预知词语的预知记录。我们使用编辑距离来量化两个词语wi和wj之间的相似度,表示为ed(wi,wj)。两个字符串之间的编辑距离是从第一个字符串转换为第二个字符串所需的单字符编辑操作(即,插入、删除和替换)的最小数量。例如,ed(chritos,christos)=1,ed(felouts,faloutsos)=3。
定义2:(模糊搜索)
为了简便,我们假定为我们关于在相似字符串之间的编辑距离而给定了阈值δ。我们可以通过为更长的关键词动态地增加阈值δ来很容易地延伸我们的解决方案。
B.单个关键词
在精确搜索的情况下,仅存在一个对应于部分关键词k的字典树节点。我们使用这一节点来识别上述预知词语。然而,为了支持模糊搜索,我们需要预知具有相似于该部分关键词的前缀的可能的多个词语。因此,可存在对应于这些词语的多个字典树节点。我们将这些节点称为关键词k的有效节点。我们定位有效节点的叶后代,并计算对应于这些叶节点的预知记录。例如,考虑图4中的字典树。假定δ=2,且用户键入部分关键词“nlis”。词语“li”、“lin”、“liu”和“luis”都相似于该输入关键词,因为它们与“nlis”的编辑距离在δ=2之内。因此,节点11、12、13和16是该部分关键词的有效节点(图4(e))。我们找到有效节点的叶后代作为预知词语(“li”、“lin”、“liu”和“luis”)。
现在我们考虑如何随着用户键入字母增量地计算查询字符串的有效节点。我们开发了一种基于缓存的方法来实现我们的目标。给定输入关键词k,不同于仅保留一个字典树节点的精确搜索,我们存储有效节点集Φk={[n,ξn]},其中n是k的有效节点,并且ξn=ed(k;n)≤δ。(注意为了简便,我们使用“n”来既表示字典树节点又表示其相应的字符串)。我们称Φk为关键词k的有效节点集(以及用于每个有效节点的编辑距离信息)。我们方法背后的构思是使用前缀过滤(prefix-filtering)。也即,当用户在k后再键入一个字母时,仅k的有效节点的后代可以是新查询的有效节点,我们不需要考虑其他字典树节点。我们使用这一特性来增量地计算新查询的有效节点集。
对于一个新查询,我们将使用被缓存的有效节点集来增量地计算用于该查询的新的有效节点集,如下所述。首先,我们初始化用于空关键词ε的有效节点集,即,Φε={[n;ξn]|ξn=|n|≤δ}。也即,其包括所有字典树节点n,其中对应字符串具有在编辑距离δ之内的长度|n|。这些节点是空字符串的有效节点,因为它们与ε的编辑距离在δ之内。
假定用户已逐个字母键入查询字符串c1c2......cx。在用户键入前缀查询pi=c1c2......ci(i≤x)后,我们保留pi的有效节点集Φp。当用户键入新的字符cx+1并提交新查询px+1时,我们通过使用来计算px+1的有效节点集如下所述。对于中的每个[n;ξn],我们考虑n的后代是否为px+1的有效节点,如图5中所示。对于节点n,如果ξn+1<δ,则n是px+1的有效节点,所以我们在中包括[n;ξn+1]。这种情况相当于从新查询字符串px+1中删除最后的字符cx+1。注意到即使ξn+1≤δ是非真的,但是由于以下所述的在中其他有效节点上的操作,这一节点n仍有可能成为该新查询字符串的有效节点。
对于节点n的每一子节点nc,其具有两种可能的情况。
子节点nc具有不同于cx+1的一个字符。图5示出了这种子节点的一个节点ns,其中“s”表示“替换”,其意思是将很快变得明了。我们有ed(ns;px+1)≤ed(n;px)+1=ξn+1。如果ξn+1≤δ,则ns是新字符串的有效节点,所以我们将[ns;ξn+1]放入中。这种情况相当于替换用于字母cx+1的ns的标签。
子节点nc具有标签cx+1。图5示出了这种子节点的节点nm,其中“m”表示“匹配”,其意思将很快变得很明了。在这种情况下,我们有ed(nm;px+1)≤ed(n;px)=ξn≤δ。因此,nm是新字符串的有效节点,所以我们将[nm;ξn]放入中。这种情况相当于在字符cx+1和nm的标签之间匹配。在此的一个微妙之处在于,如果节点nm的距离小于δ,即,ξn<δ,我们需要进行以下操作:对于nm的每一个后代d——其与nm相距至多δ-ξn个字母,我们可以将[d;ξd]安全地添加到用于新字符串px+1的有效节点集,其中ξd=ξn+|d|-|nm|。这一操作相当于在节点nm后插入几个字母。对于节点ns,我们不需要考虑其插入的后代。因为如果这些后代是有效节点,则它们必须在中,并且在处理这种有效节点时我们将考虑它们。
注意在集合的计算期间,可添加两个用于相同的字典树节点v的新配对[v;ξ1]和[v;ξ2]。在这种情况下,我们总是保留具有更小的编辑距离的那个。也即,如果ξ1<ξ2,我们仅保留前一配对。原因在于我们仅想要保留节点v和查询字符串px+1之间的编辑距离,这意味着将字符串v转换成字符串px+1的编辑操作的最小数量。以下的标题显示这一算法的正确性,其可以由数学归纳法来证明。在此,我们省略该证明。
标题(lemma)1:
对于查询字符串px=c1c2......cx,设φpx为其有效节点集。考虑新查询字符串px+1=c1c2......cxcx+1。(1)可靠性(Soundness):由上述算法计算的每个节点都是该新查询字符串px+1的有效节点。(2)完备性(Completeness):新查询字符串px+1的每个有效节点将由上述算法计算。
实施例3:
假定用户逐个字母键入查询“nlis”。假设编辑距离阈值δ为2。图4示出了我们的方法如何工作以处理由键击引起的前缀查询。表III显示了如何增量地计算有效节点集的细节。首先,我们初始化Φε={[0,0],[10,1],[11,2],[14,2]}(图4a和表III(a))。当用户键入第一个字符“n”时,由于字符串s=“n”,我们基于Φε来计算其有效节点集Φs,如下所述。对于[0;0]∈Φε,我们在Φs中放入[0;1],因为我们可以删除字母“n”。对于节点10,即带有字母“l”的节点0的子节点,我们在Φs中放入[10;1],因为我们可以用“l”代替“n”。由于节点1没有带标签“n”的子节点,所以没有匹配和插入操作。通过这种方式,我们得到Φs(图4b和表III(b))。相似地,我们可以应答“nlis”的前缀查询。
对于每个有效节点,我们预知对应其叶后代的词语。考虑前缀查询“nl”的有效节点集,如图4c所示。对于[11;2],我们计算“li”、“lin”和“liu”的预知词语以及1、3、4和5的预知记录。
C.多个关键词
iSearch
现在,我们首先考虑在使用iSearch的背景下如何在多个关键词查询的情况下进行模糊搜索。其次,我们将在下文中考虑使用关键词的多个列表的交集以及接着基于缓存的增量式交集进行多个关键词的模糊搜索。
对于每次键击,我们首先将查询字符串标记化为几个关键词。接着,我们识别每个关键词的预知词语和预知记录,如上所述。不同于精确搜索的情况,在模糊搜索中,对于每个部分关键词,可能有多个有效节点,而不是像在精确搜索中仅有一个字典树节点。例如,在图4d中,假设用户键入查询“nli”。有效节点是10、11、12、13、14和15。预知词语是“li”、“lin”、“liu”、“lu”和“lui”。对于每个关键词,有多个有效节点。我们需要对于每个有效节点组合预知记录,并对关键词产生顺序列表。接着,我们可以使用上述算法来计算该查询的预知记录。
讨论
突出显示:
我们将上述突出显示方法延伸为支持模糊搜索。在精确搜索中对预知词语进行突出显示是相对容易的,因为输入关键词必须是预知词语的前缀。然而,在模糊搜索中突出显示预知词语并不是显然的。这是因为,给定一个输入关键词及其预知词语的其中之一,该输入关键词可以不是该预知词语的前缀。相反,该输入关键词可以相似于该预知词语的一些前缀。因此,对预知词语进行突出显示可以有多种方式。例如,假设用户键入“lus”,并存在预知词语“luis”。“lui”和“luis”的前缀都相似于“lus”,且有几种方式来突出显示该预知词语,诸如“luis”或“luis”。为了解决这一问题,我们使用归一化编辑距离(normalized edit distance)(简写为ned)的概念。
定义3:(归一化编辑距离)
给定两个词语,wi和wj,它们的归一化编辑距离为:
ned(wi;wj)=ed(wi;wj)/max(|wi|;|wj|) (3)
其中|wi|表示wi的长度。给定一个输入关键词及其预知词语的其中之一,我们用到该关键词的最小的ned来突出显示该预知词语的前缀。我们将这种前缀称为最好的预知前缀,并将相应的归一化编辑距离称为“最小归一化编辑距离”,表示为“mned”。这一前缀被认为是与该输入关键词最相似的。例如,对于关键词“lus”及其预知词语“luis”,我们使ned(“lus”,“l”)=2 3,ned(“lus”,“lu”)=1 3,ned(“lus”,”lui”)=1 3,以及ned(“lus”,”luis”)=1 4。由于mned(“lus”,“luis”)=ned(“lus”,“luis”),所以我们突出显示“luis”。
2)排名:
如前所述,可以使用多种排名函数来对预知记录进行排名。在此,我们通过利用输入关键词可以是模糊的事实来考虑具体的排名函数。考虑输入关键词ki及其预知词语的其中之一,wi。由于ki可以不是wi的前缀,但却相似于wi的前缀,则|ki|/|wi|可能不会精确地量化ki和wi之间的相似度。如果ki是一个完整关键词,则ned可以量化该相似度;否则,如果ki是部分关键词,则mned是量化它们相似度的更好的函数。我们将两个函数组合以量化它们的相似度,如下所述:
sim(ki;wi)=γ*(1-ned(ki;wi))+(1-γ)*(1-mned(ki;wi)) (4)
其中γ是介于0和1之间的调谐参数。因此,我们可以使用这一相似度函数来扩展排名函数方程式2,以对模糊搜索中的记录排名。
总之,我们公开了一种计算模式,称为iSearch,其支持在结构化数据上进行交互式模糊搜索。我们已开发几种新颖的技术来对潜在的数据进行交互式地、高效地立即搜索。我们还考虑如何在框架中支持模糊搜索,通过使用基于前缀过滤的方法来增量地识别相关的关键词。我们已在实际应用中开发出几种原型。实验结果显示我们的方法可以达到高的搜索效率和结果质量。
现在,考虑在iSearch的有限背景之外的使用多个关键词的模糊搜索。该目标是高效且增量地计算带有相似于那些查询关键词的前缀的关键词的记录。我们关注这一情况下的几个挑战。
关键词的多个列表的交集:
每个查询关键词(视为一个前缀)具有多个预知的完整关键词,且这些预知关键词的列表的并集包括潜在的应答。多个查询关键词的并集列表需要取交集以计算对该查询的应答。这些操作可能是计算上高耗费的,尤其是当每个查询关键词都可能具有多个相似前缀时。我们考虑各种算法以高效地计算应答。
(2)基于缓存的增量式交集
在多数情况下,用户逐个字母键入查询,且随后的查询将额外的字母追加至前面的字母。基于这种情况,我们考虑如何使用较早查询的已缓存的结果来增量地应答查询。
对前缀的并集列表取交集
为了简便,我们首先考虑精确搜索,接着将结果扩展到模糊搜索。给定查询Q={p1,p2,...,pl},假设是共享前缀pi的关键词集。使表示的倒排列表,并且为pi的列表的并集。我们研究如何计算对该查询的应答,即∩i∪i。
简单方法:
一种方法是如下所述。对于每个前缀pi,我们立即计算相应的并集列表∪i,并取不同关键词的并集列表的交集。计算所述并集的时间复杂度可为关键词的前缀越短,查询可能越慢,因为更多预知词语的倒排列表需要被遍历以生成并集列表。这种方法仅需要字典树叶节点的倒排列表,并且倒排列表的空间复杂度是O(n×L),其中n是记录的数量,且L是每一记录的区别关键词的平均数量。
或者,我们可以预计算并存储每一前缀的并集列表,并且当出现查询时,对查询关键词的并集列表取交集。这种方法的一个主要问题是预计算的并集列表需要大量的空间,尤其是因为倒排列表上的每个记录具体值(record occurrence)需要被存储多次。所有并集列表的空间复杂度是O(n×L×w),其中w是平均关键词长度。可以使用压缩技术来降低空间需求。
使用前向列表的高效的前缀交集
我们开发一种基于以下构思的新的解决方案。在并集列表∪1,∪2,...,∪l中,我们识别最短的并集列表。通过检查该记录ID是否在所有其他并集列表(按照它们长度的递增的顺序)上存在而验证最短列表上的每个记录ID。注意这些并集列表在计算中没有被具体化。最短的并集列表可以通过访问相应前缀的叶节点而被遍历。每个并集列表的长度可以被预计算并存储在字典树中,或者被立即评估。为了高效地验证记录具体值,可以为每一记录r维持一前向列表,该前向列表是r中关键词ID的排序列表,表示为Fr。关键词ID的一个独特特性是它们使用它们的字母顺序编码。因此,每个前缀pi具有一个关键词ID区间[MinIdi,MaxIdi],使得如果pi是另一字符串s的前缀,则s的ID应该在这一区间内。
一种有趣的看法是,对于在最短并集列表上的记录r,验证r是否出现在查询前缀pk的(非具体化)并集列表∪k上的问题等同于测试pk是否作为前缀出现在前向列表Fr中。我们可以在前向列表Fr上对MinIdk进行二分法检索,以得到下界Idlb,并检查Idlb是否大于MaxIdk。如果条件为真则探测成功,否则失败。处理每一单个记录r的时间复杂度是O[(l-1)log L],其中l是查询中关键词的数量,并且L是在每一记录中区别关键词的平均数量。这种方法的一个很好的特性是每次探测的时间复杂度不依赖于倒排列表的长度,而是(对数地)依赖于记录中唯一关键词的数量。
图7显示了当用户键入查询“vldb li”时的实施例。“li”的预知关键词是“li”、“lin”、“line”和“linux”。每个查询关键词的关键词-ID区间显示在括号中。例如,前缀“li”的关键词-ID区间是[3,5],其覆盖了“lin”和“liu”的区间。为了使“vldb”的并集列表与“li”的并集列表取交集,我们首先识别“vldb”是具有较短并集列表的一个。在列表上的记录ID(6,7,8...)是挨个探测的。以记录6为例。其前向列表包含关键词ID 2、4、8......。我们使用“li”的区间来探测该前向列表。通过对关键词ID 3进行二分法检索,我们在前向列表中找到ID 4的关键词,其接着被验证为不再大于MaxID=6。因此,记录6是对该查询的应答,带ID 4的关键词(出现在记录6中)具有“li”作为前缀。
扩展到模糊搜索:
上述算法自然地扩展至模糊搜索的情况。由于每个查询关键词具有相似前缀的多个有效节点,而非考虑一个前缀节点的叶节点的并集,现在我们需要考虑前缀关键词的所有有效节点的叶节点的并集。可以估计这些并集列表的长度以找出最短的一个。对于最短并集列表上的每个记录r,对于其每个其他的查询关键词,对于其每个有效节点,我们使用r的前向列表来测试相应的相似前缀是否能作为前缀出现在记录r中。
基于缓存的对前缀取交集
在上文中,我们提出一种随着用户逐个字母键入关键词而增量地计算查询关键词的相似前缀的算法。现在,我们示出对前缀取交集也可以使用先前被缓存的结果而增量地进行。
我们通过一个实施例来说明如何缓存查询结果并使用它们来应答后面的查询。假设用户键入关键词查询Q1=“cs co”。计算并缓存对Q1的应答的所有记录。对于将两个字母追加到Q1的末尾的新查询Q2=“cs conf”,我们可以使用Q1的被缓存结果来应答Q2,因为Q2中的第二关键词“conf”比“Q1”中的相应关键词“co”被进一步限定。Q1的被缓存结果中的每个记录被验证以检查“conf”是否可作为前缀出现在该记录中。通过这种方式,Q2不需要从头开始被应答。在这个实施例中,在以下的讨论中,我们使用“Q1”来表示结果已被缓存的查询,“Q2”来表示我们想使用Q1的结果来计算其结果的新查询。
缓存缺失(cache miss):
通常,用户键入越多的关键词,该查询可能具有越多的打字错误和不匹配。因此,随着查询字符串变长,我们可能想要动态地增加编辑距离阈值δ。那么,新查询Q2的阈值可能确实地比原始查询Q1的更大。在这种情况下,Q1中关键词的有效节点可能不包括Q2中关键词的所有那些节点。结果是,我们不能使用Q1的被缓存结果(有效节点和应答)来计算Q2的那些结果。这种情况是缓存缺失,并且我们需要从头开始计算Q2的应答。
减少被缓存的结果:
查询Q1的被缓存结果可能很大,可能需要大量的时间来计算以及大量的空间来存储。这里有几种情况我们可以减小其大小。第一种情况是当我们想要使用分页,即,我们在不同的页显示结果。在这种情况下,我们可以部分地遍历最短列表,直到我们具有用于第一页的足够的结果。随着用户通过点击“Previous(前一个)”和“Next(下一个)”链接来浏览结果,我们可以继续遍历最短列表来计算更多的结果并缓存它们。
第二种情况是当用户仅对最好结果感兴趣时,即,对于预定义常数k,根据排名函数的前k个记录。假设我们确定列表上所有余下记录不可能比已计算结果的更好,这种函数可以允许我们计算对查询Q1的应答,而不需遍历整个最短列表。换句话说,该排名函数允许我们在遍历期间做出较早的终止。当使用Q1的前k个结果来计算Q2的前k个结果时,缓存结果可能并不足够多,因为Q2具有更具限制性的关键词。在这种情况下,我们可以在最短列表上继续未完成的遍历,假设我们记得在查询Q1的最短列表上停止遍历的位置。
图8示出使用被缓存结果来增量地计算前k个应答的实施例。用户逐个字母键入查询“cs conf vanc”,服务器按顺序接收查询“cs co”、“cs conf”和“cs conf vanc”。(注意:由于网络开销和服务器延迟,一些前缀查询可能没有被服务器接收。)从头开始应答第一个查询“cs co”。假设关键词“cs”的并集列表是较短的一个列表。遍历在第一竖直条处停止。在该遍历中访问的每个记录通过使用记录前向列表探测“co”的关键词区间而被验证。通过验证的记录被缓存。当我们想要增量地应答查询“cs conf”时,我们首先通过探测“conf”的关键词区间来验证先前的查询的被缓存结果中的每个记录。这些结果中的一些结果将变成新查询的结果。如果来自缓存的结果不足以计算新的前k个结果,我们从先前的查询的停止点开始继续对“cs”列表进行遍历,直到我们具有用于该新查询的足够的前k个结果为止。下一查询“cs conf vanc”相似地被应答。
在缓存缺失——即较早的被缓存结果不能被用于计算新查询的应答——的情况下,我们可能需要从头开始应答该新的查询。我们可以选择不同的列表作为最短的列表来遍历,并且可以相似地对随后的查询进行增量计算。
排名
在前述文本中,排名函数考虑不同的因数来计算对一个查询的记录的整体相关评分。以下所述是几个重要的因数。
a.匹配前缀:我们考虑查询关键词及其最好的匹配前缀之间的相似度。记录的匹配关键词与该查询关键词越相似,这一记录就应该被排名得越高。所述相似度还与关键词长度相关。例如,当用户键入关键词“circ”时,词语“circle”比“circumstance”更接近于该查询关键词,因此包含词语“circle”的记录会被排名得更高。在多数情况下,对查询的精确匹配应比模糊匹配具有更高的优先级。
b.预知关键词:相同前缀的不同预知关键词可能具有不同的权重。一种对关键词评分的方式是基于其逆文档频率(IDF)。
c.记录权重:不同的记录可能具有不同的权重。例如,多次引用的公开记录比很少引用的公开记录可能被排名得更高。
作为实施例,以下所述是一种评分函数,其组合了以上因数。假设该查询为Q={p1,p2......},pi’是pi最好的匹配前缀,并且ki是pi’最好的预知关键词。设sim(pi,pi’)为pi’和pi之间的编辑相似度。对于Q的记录r的评分可以定义为:
其中α和β是权重(0<β<α<1),score(r,ki)是关键词ki的记录r的评分。
突出显示最好的前缀
相似地,在以上文本中,当向用户显示记录时,输入前缀的最相似的前缀应该被突出显示。这种突出显示对于精确匹配的情况是很明显的。对于模糊搜索,一个查询前缀可能相似于相同预知关键词的几个前缀。因此,可能有多种方式来突出显示预知关键词。例如,假设用户键入“lus”,并存在预知关键词“luis”。前缀“lui”和“luis”都相似于“lus”,且有几种方式来突出显示它们,诸如“luis”或“luis”。为了解决这一问题,我们使用归一化编辑距离的概念。通常,给定两个前缀pi和pj,它们的归一化编辑距离为:
ned(pi,pj)=ed(pi,pj)/max(|pi|,|pj|),
其中|pi|表示pi的长度。给定一个输入前缀及一个其预知关键词,相对于该查询具有最小ned的预知关键词的前缀被突出显示。我们称这种前缀为最好的匹配前缀,并称相应的归一化编辑距离为“最小归一化编辑距离”,表示为“mned”。这个前缀被认为是与该输入最相似的。例如,对于关键词“lus”及其预知词语“luis”,我们有ned(“lus”,“l”)=2 3,ned(“lus”,“lu”)=1 3,ned(“lus”,“lui”)=1 3,以及ned(“lus”,“luis”)=1 4。由于mned(“lus”,“luis”)=ned(“lus”,“luis”),“luis”将被突出显示。
使用同义词
在上文中,我们将利用关于同义词的先验知识来以如上述相同的方式寻找相关记录。
在不偏离本发明的主旨和范围的情况下,本领域普通技术人员可以做出许多替代和修改。因此,必须理解,所示实施方案仅作为实施例的方式提出,并不应认为本发明被限制为如本发明及其各种实施方案所限定的。
因此,应理解,所示实施方案仅作为实施例的目的被提出,并不应被认为如所附权利要求书那样限制本发明。例如,尽管权利要求的要素在下文中以特定的组合被提出,但应充分地理解本发明包括更少、更多或不同要素的其他组合,如在上文中所公开的,即使这种组合初始地未要求权利。在要求权利的组合中组合两个要素的教导进一步理解为允许要求这样组合的权利,在该组合中两个要素没有彼此组合,而是可以被单独使用或以其他方式组合。本发明的任何公开的要素的删除明确地包含在本发明的范围内。
本说明书中所用的用以描述本发明及其各种实施方案的词语不仅应以它们通常意思来理解,而且还包括在其通常意义范围之外的特定结构、材料或作用的特殊含义。因此,如果一个要素在本说明书的文本中可以理解为包括多于一个含义,那么其在权利要求书中的使用必须被理解为由本说明书以及由词语本身所支持的所有可能含义的上位概念。
因此,所附权利要求书中词语或要素的定义在本说明书中限定为不仅包括文字上提出的要素的组合,还包括用于以基本相同方式来执行基本相同功能以获得基本相同结果的所有等价结构、材料或作用。因此,在这个意义上,预期两个或更多个要素的等价替换可以用于所附权利要求中的任一要素,或者单个要素可以替换权利要求中两个或更多个要素。尽管要素可以如上所述的在特定组合中起作用,甚至这样初始地要求权利,但应清楚理解,来自一个要求权利的组合的一个或多个要素在一些情况下可以从该组合中删除,以及所要求权利的组合可以指的是一个子组合或一个子组合的变型。
本领域内普通技术人员阅读后,由所要求权利的主题的非实质性变化,现在已知的或随后设想的,都明确认为是等价地包含在权利要求书的范围之内。因此,本领域内普通技术人员现在或随后知晓的显而易见的替代方案被限定为落在所限定要素的范围之内。
因此,应理解,权利要求书包括上述具体说明和描述的方案,概念上等价的方案,可以显而易见被替代的方案,以及实质上包含本发明基本构思的方案。
Claims (44)
1.一种在文本数据上进行高效的交互式模糊搜索的方法,包括:
使用基于树的索引来高效地索引所述数据;
在用户键入查询时,使用一个算法来遍历所述树;
自适应地维持该查询的中间结果以支持交互式模糊搜索;以及
使用排名算法将候选结果排序。
2.权利要求1的方法,还包括:执行查询放宽、自动完成或拼写检查。
3.权利要求1的方法,其中有单个输入搜索框,其允许对多个数据域的关键词查询,其中所述搜索是交互式的,允许在所述关键词中存在小错误、支持同义词和/或允许多个关键词。
4.权利要求1的方法,用于一种信息系统,以允许用户对文本数据进行交互式地搜索,即使在有小错误的情况下。
5.一种搜索具有m个属性和n个记录的结构化数据表T的方法,其中A={a1,a2,...,am}表示属性集,R={r1,r2,...,rn}表示记录集,W={w1,w2,...,wp}表示T中的区别词语集,给定两个词语,wi和wj,“wi≤wj”表示wi是wj的前缀字符串,其中一个查询由前缀集Q={p1,p2,...,pl}组成,其中预知词语集是Wkl={w|w是W中的成员且kl≤w},该方法包括对于每一前缀pi从数据集中寻找相似于pi的前缀集,包括:
确定预知记录集RQ={r|r是R的成员,对于每个i,1≤i≤l-1,pi出现在r中,且在Wkl中包括w,w出现在r中};以及
对于引起查询Q的键击,对于给定值t返回RQ中的根据记录与该查询的相关度排名的前t个记录。
6.权利要求5的方法,其中对于给定值t返回RQ中的根据记录与该查询的相关度排名的前t个记录,包括:通过从根部遍历字典树,在一棵在叶节点上带有倒排列表的字典树中寻找对应于关键词的字典树节点;定位对应于所述关键词的字典树节点的叶后代;以及获得倒排列表上相应的预知词语和预知记录。
7.权利要求5的方法,其中对于给定值t返回RQ中的根据记录与该查询的相关度排名的前t个记录,包括:为每个用户维持一个会话缓存,其中每个会话缓存保存该用户过去曾输入的关键词以及每一关键词的其他信息,包括该关键词的相应的字典树节点和前t个预知记录。
8.权利要求7的方法,其中为每个用户维持一个会话缓存包括:逐个字母输入查询字符串c1c2...cx,其中pi=c1c2...ci是前缀查询(1≤i≤x),其中ni是对应于pi的字典树节点,在输入该前缀查询pi后,为pi存储节点ni以及其前t个预知记录,在先前的查询字符串c1c2...cx的末尾输入新字符cx+1,确定为px保存的节点nx是否具有标签为cx+1的子节点,如果有,则定位节点nx+1的叶后代,并获得相应的预知词语和预知记录;否则,没有具有前缀px+1的词语,且然后返回一个空应答。
9.权利要求7的方法,还包括任意地修改先前的查询字符串,或者为新查询字符串复制并粘帖完全不同的字符串,在用户输入的所有关键词中,识别被缓存的与该新查询具有最长前缀的关键词。
10.权利要求7的方法,其中前缀查询p1;p2;...;px已被缓存,该方法还包括:输入新查询p’=c1c2...cic’...cy,寻找与p’具有最长前缀的pi,通过在新查询c’...cy的最长前缀之后挨个插入字符而使用pi的节点ni增量地应答该新查询p’,如果存在被缓存的关键词pi=p’,则使用pi的被缓存的前t个记录来直接地应答该查询p’;否则,如果没有这样的被缓存的关键词,则应答该查询而不使用任何缓存。
13.权利要求5的方法,其中对于给定值t返回RQ中的根据记录与该查询的相关度排名的前t个记录,包括:将每个关键词视为部分关键词,即对于每个预知记录r,给定输入查询Q={k1;k2;......kl},对于每个1≤i≤l,在r中对于ki存在至少一个预知词语wi,因为ki必须是wi的前缀,则通过以下方式量化它们的相似度:
sim(ki,wi)=|ki|/|wi|
如果在r中对于部分关键词ki具有多个预知词语,则选定与ki具有最大相似度的预知词语wi,并量化预知词语的权重,以捕获预知词语的重要程度,且考虑预知词语出现于其中的属性的数量,表示为na,以将相似度、权重和属性的数量组合,从而产生如下所述的排名函数以为该查询Q对r进行评分:
其中α是介于0和1之间的调谐参数。
15.权利要求5的方法,其中确定预知记录集RQ包括:确定具有相似于部分关键词的前缀的可能的多个词语,包括对应于这些词语的多个字典树节点定义为关键词k的有效节点,定位有效节点的叶后代,以及确定对应于这些叶节点的预知记录。
16.权利要求14的方法,还包括:
输入关键词k,存储有效节点集Φk={[n,ξn]},其中n是k的一个有效节点,并且ξn=ed(k;n)≤δ,
在k后输入再一个字母,以及
仅寻找k的有效节点的后代作为新查询的有效节点,该新查询包括为一个空关键词ε初始化一个有效节点集,即
Φε={[n;ξn]|ξn=|n|≤δ},也即包括所有的其相应字符串具有不超过编辑距离阈值δ的长度|n|的字典树节点n,逐个字母输入查询字符串c1c2...cx,如下所述:在输入前缀查询pi=c1c2...ci(i≤x)后,存储pi的有效节点集Φp,当输入新字符cx+1并提交新查询px+1后,通过使用以如下方式增量地确定px+1的有效节点集对于中的每个[n;ξn],我们考虑n的后代是否为px+1的有效节点,对于节点n,如果ξn+1<δ,则n是px+1的有效节点,则将[n;ξn+1]存储至对于节点n的每个子节点nc,(1)子节点nc具有一个不同于cx+1的字符,ed(ns;px+1)≤ed(n;px)+1=ξn+1,如果ξn+1≤δ,则ns是该新字符串的有效节点,接着将[ns;ξn+1]存储至或者(2)具有标签cx+1的子节点nc被表示为匹配节点nm,ed(nm;px+1)≤·ed(n;px)=ξn≤δ,使得nm是新字符串的有效节点,接着将[nm,ξn]存储至但是如果节点nm的距离比δ小,即ξn<δ,则对于每个nm的后代d——其距离nm最多δ-ξn个字母,将[d;ξd]添加至新字符串px+1的有效节点集,其中ξd=ξn+|d|-|nm|。
18.权利要求14的方法,其中给定两个词语wi和wj,它们的归一化编辑距离是:
ned(wi;wj)=ed(wi;wj)/max(|wi|;|wj|),
其中|wi|表示wi的长度,其中给定输入关键词及一个其预知词语,具有最小ned的预知词语的前缀被定义为最好的预知前缀,而相应的归一化编辑距离被定义为“最小归一化编辑距离”,表示为“mned”,其中对于给定值t返回在RQ中根据记录与该查询的相关度而排名的前t个记录,包括:确定如果ki是完整关键词,则使用ned来量化相似度;否则,如果ki是部分关键词,则使用mned来量化它们的相似度,即,使用以下公式来量化两个词语的相似度:
sim(ki;wi)=γ*(1-ned(ki;wi))+(1-γ)*(1-mned(ki;wi)),其中γ是介于0和1之间的调谐参数。
19.权利要求6的方法,其中对于给定值t返回在RQ中根据记录与该查询的相关度而排名的前t个记录包括:在每个前缀节点的叶节点的并集列表∪1,∪2,...,∪l中,识别最短的并集列表,验证最短列表上的每个记录ID——通过为每个记录r维持一个前向列表而检查该ID是否存在于所有其他并集列表上,所述前向列表是r中关键词的ID的排序列表,表示为Fr,使得每个前缀pi都具有关键词ID的区间[MinIdi,MaxIdi],验证r是否出现在对于最短并集列表上的记录r的查询前缀pk的并集列表∪k上——通过测试pk是否作为前缀出现在前向列表Fr上,包括:执行前向列表Fr上MinIdk的二分法检索以得到下界Idlb,并检查Idlb是否大于MaxIdk,如果该条件为真则探测成功,否则失败。
20.权利要求19的方法,其中每个查询关键词具有相似前缀的多个有效节点,不是确定一个前缀节点的叶节点的并集,而是确定一个前缀关键词的所有有效节点的叶节点的并集,估计这些并集列表的长度以找到最短的一个,对于最短并集列表上的每个记录r,对于每个其他的查询关键词,对于其每个有效节点,使用r、Fr的前向列表测试相应的相似前缀是否出现在记录r中作为前缀。
21.权利要求7的方法,其中为每个用户维持一个会话缓存包括:
缓存查询结果并使用它们应答后续的查询;
在查询字符串在后续的查询中变更长时,增加编辑距离阈值δ;
使用分页来在不同的页面显示查询结果从而部分地遍历最短列表直到为第一页获得足够的结果为止,继续遍历最短列表以确定更多的查询结果并缓存它们;或者
对于预定义常数k,根据排名函数获得前k个记录,通过使用记录的前向列表探测关键词区间来验证遍历中访问的每个记录,缓存通过验证的记录,接着当增量地应答查询时,首先通过探测关键词区间来验证该查询的先前增量的被缓存结果中的每个记录,如果来自缓存的结果不足以计算新的前k个结果,则继续从先前的查询的停止点开始遍历所述列表,直到我们得到足以用于该新查询的前k个结果。
22.权利要求8的方法,对于引起查询Q的键击,对于给定值t返回RQ中的根据记录与该查询的相关度排名的前t个记录,包括匹配前缀,这包括:在查询关键词及其最好的匹配前缀之间相似度;预知关键词,其中对于相同前缀的不同预知关键词可具有不同权重;且记录权重,其中不同记录具有不同的权重,其中查询为Q={p1,p2,...},其中p′i是pi的最好的匹配前缀,其中ki是p′l的最好的预知关键词,其中sim(pi,p′i)是p′i和pi之间的编辑相似度,其中Q的记录r的评分可以被定义为:
其中α和β是权重(0<β<α<1),score(r,ki)是关键词ki的记录r的评分。
23.一种模糊式边键入边搜索的方法,其中R是诸如相关表中元组等记录的总合,其中D是R中词语的一个数据集,其中用户逐个字母键入关键词查询,该方法包括:
通过使用测量字符串之间相似度的编辑距离来立即寻找带有相似于该查询关键词的记录,其中两个字符串s1和s2之间的编辑距离是单字符编辑操作的最小数量,表示为ed(s1,s2),其中Q是用户输入的关键词查询,该关键词查询是关键词序列[w1,w2,:::,wm];
将最后的关键词wm视为部分关键词,寻找数据集中相似于查询关键词的关键词,其中π是量化字符串s和D中查询关键词w之间相似度的函数,包括,但并不限于:
π(s,w)=1-ed(s,w)/|w|,
其中|w|是关键词w的长度;以及
基于查询关键词长度归一化所述编辑距离,以允许较长查询关键词出现更多的错误,其中d是D中的关键词,对于每个完整关键词wi(i=1,......m-1),定义d与wi的相似度为:
Sim(d,wi)=π(d,wi),
由于最后的关键词wm被视为前缀的情况,使用函数π定义d与wm的相似度作为d的前缀的最大相似度,即Sim(d,wm)=max d的前缀pπ(p,wm),其中τ是相似度阈值,其中如果Sim(d,w)≥τ,则D中的关键词相似于查询关键词w,其中如果π(p,wm)≥τ,则D中关键词的前缀p相似于查询关键词wm,其中Φ(wi)(i=1,...,m)表示D中相似于wi的关键词集,并且其中P(wm)表示D中相似于wm的关键词的前缀集。
24.权利要求23的方法,还包括:
基于R中每个记录r与该查询的相关度来对每个记录r进行排名,其中F(,)是取查询Q和记录r∈R的排名函数;
确定评分F(r,Q)作为该记录r与该查询Q的相关度;以及
给定一个正整数k,确定R中根据记录与Q的相关度基于评分F(r,Q)被排名的k个最好记录。
25.权利要求24的方法,其中确定评分F(r,Q)作为该记录r与该查询Q的相关度,包括:基于r中关键词以及查询中的那些关键词的相似度来确定相关度评分F(r,Q),给定记录中的关键词d具有与部分关键词wm不同相似度的不同前缀,通过取它们的最大值作为d和wm之间的整体相似度,其中记录r中的关键词具有关于r的权重,诸如记录中关键词的词频TF以及逆文档频率IDF。
26.权利要求23的方法,其中数据集D包括D中数据关键词的字典树,其中每个字典树节点具有一个字符标签,其中D中的每个关键词对应于字典树上从根部到叶节点的一个唯一路径,其中叶节点具有配对的倒排列表[rid,weight]i,其中rid是包含叶节点字符串的记录的ID,weight是记录中关键词的权重,还包括:通过两个步骤确定该查询Q的前k个应答,包括:
对于该查询中的每个关键词wi,确定字典树上的相似关键词Φ(wi)以及相似前缀P(wm);以及
访问这些相似数据关键词的倒排列表以确定对该查询的最好的k个应答。
27.权利要求26的方法,其中访问这些相似数据关键词的倒排列表以确定对该查询的最好的k个应答,包括:随机地访问该倒排列表,在每个随机访问中,给定记录r的ID,获得相关于查询Q中关键词的信息,以使用前向索引确定评分F(r,Q),在前向索引中每个记录具有其关键词ID及它们相应的权重的前向列表,其中每个关键词具有字典树上对应其叶节点的唯一ID,并且关键词的ID遵循它们的字母顺序。
28.权利要求27的方法,其中随机地访问该倒排列表,包括:
对于每个字典树节点n,维持一个关键词区间[ln,un],其中ln和un分别是其叶节点的最小和最大关键词ID;
验证记录r是否包含具有相似于wm的前缀的关键词,对于字典树上相似于wm的前缀p,检查在字典树节点p的关键词区间[lp,up]中的r的前向列表上是否有关键词ID,由于r的前向列表被排序,此检查使用下界lp来对r的前向列表进行二分法检索以得到不小于lp的最小ID°,如果γ存在,且不大于上界up,即γ≤up,则该记录具有相似于wm的关键词。
29.权利要求27的方法,其中随机地访问所述倒排列表,包括:
对于相似于wm的每个前缀p,遍历p的子字典树并识别其叶节点;
对于每个叶节点d,对于查询Q,这一关键词d具有相似于该查询中wm的前缀,存储
[查询ID,部分关键词wm,sim(p,wm)],从而在多个查询被同时应答的情况下使该查询与其他查询区分开;
存储wm和p之间的相似度;
确定这一关键词在候选记录中的评分,在叶节点具有几个相似于wm的前缀的情况下,存储这些前缀与wm的最大相似度;
对于该查询中的每个关键词wi,存储那些相似于wi的字典树节点的相同信息,定义叶节点的被存储条目作为相关查询关键词的总合;
使用相关查询关键词的总合通过扫描r的前向列表来高效地检查记录r是否包含具有相似于部分关键词wm的前缀的完整词语,对于每个其关键词ID,定位字典树上相应的叶节点,并测试相关查询关键词的总合是否包括这一查询和关键词wm,如果是,则使用被存储的字符串相似度来确定这一关键词在该查询中的评分。
30.权利要求24的方法,其中确定评分F(r,Q),包括:
对于该查询中的每个关键词w,确定所述关键词相对于该记录r和该查询的评分,表示为Score(r,w,Q);以及
通过对该查询中所有关键词w的Score(r,w,Q)应用单调函数来确定评分F(r,Q)。
31.权利要求30的方法,其中d是记录r中的关键词,使得d与查询关键词w相似,d∈Φ(w),其中Score(r,w,d)表示这个查询关键词w与记录关键词d的相关度,其中该记录中查询关键词w的相关度值Score(r,w,Q)是该记录中所有关键词d的Score(r,w,d)的最大值,其中确定该关键词相对于该记录r和该查询的评分,表示为Score(r,w,Q),包括:当计算该查询关键词与该记录的相关度时,寻找记录中与查询关键词最相关的关键词,作为显示这一记录对于该用户查询来说是如何重要的指示。
32.权利要求31的方法,其中F(r,Q)是
其中Score(r,wi,Q)=maxr中记录关键词d{Score(r,wi,d)},
以及
Score(r,wi,d)=Sim(d,wi)*Weight(d,r),
其中Sim(d,wi)是完整关键词wi和记录关键词d之间的相似度,以及Weight(d,r)是记录r中d的权重。
33.权利要求31的方法,包括基于它们相应的查询关键词将倒排列表分割成几个组,其中每个查询关键词w具有一组的倒排列表,产生以记录评分相对于这一关键词排序的记录ID的列表,并使用前k个算法寻找该查询的最好的k个记录。
34.权利要求33的方法,其中使用前k个算法寻找该查询的最好的k个记录,包括:对于查询关键词w的倒排列表的每个组,通过在倒排列表上建立最大的堆区获得w的下一个最相关的记录ID,包括:在组中每个倒排列表上维持一个指针,其中所述堆区由指针业已指向的记录ID组成,基于这些记录中的相似关键词的评分排序,由于每个倒排列表已基于所述记录中关键词的权重排序,并且这一列表上的所有记录都共享这一关键词和查询关键词w之间的相同相似度,该列表还基于这些记录中这一关键词的评分进行排序,通过从所述堆区弹出顶部元来获得这一组的下一个最好记录,将弹出元的列表的指针增加1,并将这一列表的新元推入至所述堆区,忽略可产生这一弹出记录的其他列表,因为它们相应的评分将不再影响这一记录相对于查询关键词w的评分。
35.权利要求34的方法,其中L1,......Lt分别是带有相似关键词d1,......dt的倒排列表,还包括:将这些倒排列表基于它们关键词与w的相似度进行排序,Sim(d1,w),......sim(dt,w),使用具有最高相似度值的列表构建最大的堆区。
36.权利要求26的方法,还包括:通过预计算和存储字典树上一些倒排列表的并集改进排序访问,其中v是字典树节点,并且∪(v)是v的叶节点的倒排列表的并集,根据它们记录的权重来排序,并且如果记录在这些列表上出现了多于一次,则选定其最大的权重作为其在列表∪(v)上的权重,其中∪(v)定义为节点v的并集列表。
37.权利要求36的方法,其中v是字典树节点,包括:具体化并集列表∪(v),并使用∪(v)来加速对前缀关键词wm的排序访问是基于其记录权重进行排序的,其中关键词di的列表上的记录r相对于wm的值Score(r,wm,di)是基于Weight(di,r)和Sim(di,wm)的,其中v的所有叶节点都具有与wm的相同相似度,其中v的所有叶节点都相似于wm,即它们与wm的相似度不小于阈值τ,使得并集列表∪(v)的排序顺序也是叶节点列表上记录相对于wm的评分的顺序。
38.权利要求37的方法,其中B是可用于具体化并集列表的存储空间的预算,包括:选定字典树节点,以将它们的并集列表具体化为使查询的性能最大化,其中如果节点的并集列表已被具体化,则节点被定义为“具体化”,其中对于具有前缀关键词wm的查询Q来说,一些字典树节点使它们的并集列表具体化,其中v是wm的最大堆区可用的最高的字典树节点,对于其∪(v)没有被具体化,其中对于v的每个非叶字典树的后代c,使得在从v到c(包括c)的路径上没有节点被具体化,包括:
进行基于成本的分析以量化基于遍历时间减少、堆区构建时间减少以及排序访问时间减少的在wm的最大堆区上具体化∪(c)的操作性能的收益,查询关键词查询wm的具体化v的整体收益Bv为:
Bv=B遍历时间减少+B堆区构建时间减少+Av*B排序访问时间减少,
其中Av是对于每个查询在∪(v)上排序访问的数量,以及
接着根据该查询发生的概率,将具体化其并集列表的收益相加至查询工作量中的所有查询或字典树,以及
在计算每个节点的收益之后,重新计算具体化其他受影响节点的收益Bv,直到实现存储空间的给定预算B。
41.权利要求5的方法,其中对于给定值t返回在RQ中根据记录与该查询的相关度而排名的前t个记录,包括:在列表上分配给每个记录一个评分,以及使用累加函数将不同列表上的记录的评分组合,以确定该记录与该查询的整体相关度,其中累加函数是单调函数,对于该查询中与关键词相似的每个数据关键词,提供基于记录中关键词的权重的排序的倒排列表,并访问该排序的倒排列表。
42.权利要求38的方法,其中选定字典树节点以具体化它们的并集列表,从而使查询的性能最大化,包括:随机地选定字典树节点,从字典树根部从上向下选定节点,或者从叶节点从下向上选定节点。
43.权利要求5的方法,其中数据表T被结构化为字典树,还包括:将字典树上对应于词语wi的每个节点链接至在字典树上对应于词语wi的同义词的每个节点,反之亦然,从而当获得词语wi时,使用该链接返回wi及其同义词。
44.一种软件产品,包括存储在有形介质上的指令,用于根据权利要求1-43中任一项所述的方法控制计算机。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US7808208P | 2008-07-03 | 2008-07-03 | |
US61/078,082 | 2008-07-03 | ||
US11252708P | 2008-11-07 | 2008-11-07 | |
US61/112,527 | 2008-11-07 | ||
US15217109P | 2009-02-12 | 2009-02-12 | |
US61/152,171 | 2009-02-12 | ||
PCT/US2009/049633 WO2010003129A2 (en) | 2008-07-03 | 2009-07-02 | A method for efficiently supporting interactive, fuzzy search on structured data |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102084363A true CN102084363A (zh) | 2011-06-01 |
CN102084363B CN102084363B (zh) | 2014-11-12 |
Family
ID=41466617
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980126026.8A Active CN102084363B (zh) | 2008-07-03 | 2009-07-02 | 一种用于在结构化数据上高效地支持交互式模糊搜索的方法 |
Country Status (3)
Country | Link |
---|---|
US (2) | US8073869B2 (zh) |
CN (1) | CN102084363B (zh) |
WO (1) | WO2010003129A2 (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103020054A (zh) * | 2011-09-20 | 2013-04-03 | 深圳市金蝶中间件有限公司 | 模糊查询方法及系统 |
CN103034675A (zh) * | 2011-10-07 | 2013-04-10 | 索尼公司 | 信息处理装置、服务器、方法、信息提取方法和程序 |
CN103309886A (zh) * | 2012-03-13 | 2013-09-18 | 阿里巴巴集团控股有限公司 | 一种基于交易平台的结构化信息搜索方法和装置 |
CN103377190A (zh) * | 2012-04-11 | 2013-10-30 | 阿里巴巴集团控股有限公司 | 一种基于交易平台的供应商信息搜索方法和装置 |
CN103608859A (zh) * | 2011-06-14 | 2014-02-26 | 微软公司 | 使用模糊模式搜索的拼写 |
CN103870493A (zh) * | 2012-12-14 | 2014-06-18 | 中国银联股份有限公司 | 对页面进行自动录入的系统和方法 |
CN103914569A (zh) * | 2014-04-24 | 2014-07-09 | 百度在线网络技术(北京)有限公司 | 输入提示方法、装置及字典树模型的创建方法、装置 |
CN105474214A (zh) * | 2013-08-21 | 2016-04-06 | 日本电气方案创新株式会社 | 文本字符串搜索设备、文本字符串搜索方法和文本字符串搜索程序 |
CN106156103A (zh) * | 2015-04-02 | 2016-11-23 | 广州爱九游信息技术有限公司 | 一种搜索处理方法及装置 |
CN106156238A (zh) * | 2015-04-27 | 2016-11-23 | 科大讯飞股份有限公司 | 本体信息查询方法及系统 |
CN106294636A (zh) * | 2016-08-01 | 2017-01-04 | 中国电子科技集团公司第二十八研究所 | 一种基于数据库数据的搜索排名算法 |
CN106777118A (zh) * | 2016-12-16 | 2017-05-31 | 武汉大学 | 一种基于模糊字典树的地理词汇快速抽取方法 |
CN107169114A (zh) * | 2017-05-12 | 2017-09-15 | 东北大学 | 一种海量数据多维排序搜索方法 |
CN108804542A (zh) * | 2018-05-16 | 2018-11-13 | 河北天翼科贸发展有限公司 | 一种基于内存运算的快速获取文件增量方法 |
CN110134758A (zh) * | 2019-04-26 | 2019-08-16 | 中国地质大学(武汉) | 一种面向连续空间-模糊关键字查询的索引方法 |
CN111368057A (zh) * | 2020-03-05 | 2020-07-03 | 腾讯科技(深圳)有限公司 | 词组查询方法、装置、计算机设备以及存储介质 |
WO2021077585A1 (zh) * | 2019-10-23 | 2021-04-29 | 深圳计算科学研究院 | 一种查询自动补全的方法和装置 |
CN113254589A (zh) * | 2021-06-07 | 2021-08-13 | 南京因由数字科技有限公司 | 一种检索相似专利的方法和装置 |
CN114925656A (zh) * | 2022-06-14 | 2022-08-19 | 北京新唐思创教育科技有限公司 | 富文本显示方法、装置、设备和存储介质 |
Families Citing this family (89)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8255382B2 (en) * | 2007-06-20 | 2012-08-28 | Boopsie, Inc. | Dynamic menus for multi-prefix interactive mobile searches |
US9251137B2 (en) * | 2007-06-21 | 2016-02-02 | International Business Machines Corporation | Method of text type-ahead |
US8316035B2 (en) | 2008-01-16 | 2012-11-20 | International Business Machines Corporation | Systems and arrangements of text type-ahead |
US7987177B2 (en) * | 2008-01-30 | 2011-07-26 | International Business Machines Corporation | Method for estimating the number of distinct values in a partitioned dataset |
US8359532B2 (en) * | 2008-04-28 | 2013-01-22 | International Business Machines Corporation | Text type-ahead |
US8576785B2 (en) * | 2008-12-19 | 2013-11-05 | Robert Bosch Gmbh | Method of wireless communication using authentication information |
US8738641B2 (en) * | 2009-03-31 | 2014-05-27 | Ebay Inc. | Ranking algorithm for search box auto-complete |
US8224839B2 (en) * | 2009-04-07 | 2012-07-17 | Microsoft Corporation | Search query extension |
GB0909844D0 (en) * | 2009-06-08 | 2009-07-22 | Codigital Ltd | Method and system for generating collaborative content |
US20100325136A1 (en) * | 2009-06-23 | 2010-12-23 | Microsoft Corporation | Error tolerant autocompletion |
US8533579B2 (en) * | 2009-10-21 | 2013-09-10 | Symantec Corporation | Data loss detection method for handling fuzziness in sensitive keywords |
US20110184940A1 (en) * | 2010-01-26 | 2011-07-28 | Yahoo! Inc. | System and method for detecting changes in the relevance of past search results |
US8296290B2 (en) * | 2010-02-05 | 2012-10-23 | Fti Consulting, Inc. | System and method for propagating classification decisions |
JP5083367B2 (ja) * | 2010-04-27 | 2012-11-28 | カシオ計算機株式会社 | 検索装置、検索方法、ならびに、コンピュータプログラム |
US20110289089A1 (en) * | 2010-05-18 | 2011-11-24 | Mariana Paul Thomas | Negative space finder |
US8364700B2 (en) * | 2010-05-21 | 2013-01-29 | Vonage Network Llc | Method and apparatus for rapid data access and distribution using structured identifiers |
US9158813B2 (en) | 2010-06-09 | 2015-10-13 | Microsoft Technology Licensing, Llc | Relaxation for structured queries |
JP5542017B2 (ja) * | 2010-09-15 | 2014-07-09 | アルパイン株式会社 | 名称検索装置 |
JP5812007B2 (ja) * | 2010-10-15 | 2015-11-11 | 日本電気株式会社 | インデックス作成装置、データ検索装置、インデックス作成方法、データ検索方法、インデックス作成プログラムおよびデータ検索プログラム |
US20130262485A1 (en) * | 2010-12-14 | 2013-10-03 | The Regents Of The University Of California | High Efficiency Prefix Search Algorithm Supporting Interactive, Fuzzy Search on Geographical Structured Data |
US8510324B2 (en) * | 2011-01-31 | 2013-08-13 | GM Global Technology Operations LLC | Efficient information exchange between encountering vehicles using approximate knowledge via hash functions |
US9070208B2 (en) * | 2011-05-27 | 2015-06-30 | Lucasfilm Entertainment Company Ltd. | Accelerated subsurface scattering determination for rendering 3D objects |
CN102236706B (zh) * | 2011-06-17 | 2012-12-05 | 浙江大学 | 一种海量中文文件名快速模糊拼音查询方法 |
US20130041878A1 (en) * | 2011-08-11 | 2013-02-14 | Microsoft Corporation | Autosuggesting an equivalent query |
US9262486B2 (en) * | 2011-12-08 | 2016-02-16 | Here Global B.V. | Fuzzy full text search |
US9495454B2 (en) * | 2012-03-08 | 2016-11-15 | Chih-Pin TANG | User apparatus, system and method for dynamically reclassifying and retrieving target information object |
CN103310343A (zh) * | 2012-03-15 | 2013-09-18 | 阿里巴巴集团控股有限公司 | 商品信息发布方法和装置 |
US9563669B2 (en) * | 2012-06-12 | 2017-02-07 | International Business Machines Corporation | Closed itemset mining using difference update |
US8577671B1 (en) | 2012-07-20 | 2013-11-05 | Veveo, Inc. | Method of and system for using conversation state information in a conversational interaction system |
US9118539B2 (en) * | 2012-07-30 | 2015-08-25 | Cisco Technology, Inc. | Managing grey zones of unreachable nodes in computer networks |
US9465833B2 (en) | 2012-07-31 | 2016-10-11 | Veveo, Inc. | Disambiguating user intent in conversational interaction system for large corpus information retrieval |
JP6299596B2 (ja) * | 2012-09-28 | 2018-03-28 | 日本電気株式会社 | クエリ類似度評価システム、評価方法、及びプログラム |
US9665615B2 (en) | 2012-10-24 | 2017-05-30 | Microsoft Technology Licensing, Llc | Search-as-you-type on a relational database |
EP2731023B1 (en) * | 2012-11-12 | 2015-03-25 | Software AG | Method and system for processing graph queries |
US9037598B1 (en) * | 2013-01-25 | 2015-05-19 | Google Inc. | Variable query generation |
US10032234B2 (en) * | 2013-01-29 | 2018-07-24 | Facebook, Inc. | Ranking search results using diversity groups |
US9098543B2 (en) | 2013-03-14 | 2015-08-04 | Wal-Mart Stores, Inc. | Attribute detection |
US9996502B2 (en) * | 2013-03-15 | 2018-06-12 | Locus Lp | High-dimensional systems databases for real-time prediction of interactions in a functional system |
US10515123B2 (en) | 2013-03-15 | 2019-12-24 | Locus Lp | Weighted analysis of stratified data entities in a database system |
HUE068918T2 (hu) * | 2013-05-07 | 2025-02-28 | Adeia Guides Inc | Inkrementális beszédbemeneti felület valós idejû visszajelzéssel |
US9430534B2 (en) | 2013-05-09 | 2016-08-30 | Wipro Limited | Systems and methods for improved security and precision in executing analytics using SDKS |
US9946757B2 (en) | 2013-05-10 | 2018-04-17 | Veveo, Inc. | Method and system for capturing and exploiting user intent in a conversational interaction based information retrieval system |
WO2014186745A1 (en) * | 2013-05-16 | 2014-11-20 | University Of Utah Research Foundation | Generating and implementing local search engines over large databases |
US9436681B1 (en) * | 2013-07-16 | 2016-09-06 | Amazon Technologies, Inc. | Natural language translation techniques |
KR101485940B1 (ko) * | 2013-08-23 | 2015-01-27 | 네이버 주식회사 | 시멘틱 뎁스 구조 기반의 검색어 제시 시스템 및 방법 |
US9898586B2 (en) | 2013-09-06 | 2018-02-20 | Mortara Instrument, Inc. | Medical reporting system and method |
US9355152B2 (en) | 2013-12-02 | 2016-05-31 | Qbase, LLC | Non-exclusionary search within in-memory databases |
US9208204B2 (en) * | 2013-12-02 | 2015-12-08 | Qbase, LLC | Search suggestions using fuzzy-score matching and entity co-occurrence |
US9230041B2 (en) | 2013-12-02 | 2016-01-05 | Qbase, LLC | Search suggestions of related entities based on co-occurrence and/or fuzzy-score matching |
US10152731B1 (en) * | 2013-12-06 | 2018-12-11 | Twitter, Inc. | Scalable native in-stream advertising for mobile applications and websites |
US9619581B2 (en) * | 2013-12-20 | 2017-04-11 | Microsoft Technology Licensing, Llc | Constructing queries for execution over multi-dimensional data structures |
US10311054B2 (en) * | 2014-01-08 | 2019-06-04 | Red Hat, Inc. | Query data splitting |
RU2640322C2 (ru) * | 2014-01-30 | 2017-12-27 | Общество с ограниченной ответственностью "Аби Девелопмент" | Способы и системы эффективного автоматического распознавания символов |
US10275576B2 (en) * | 2014-06-27 | 2019-04-30 | Passport Health Communications, Inc | Automatic medical coding system and method |
US9811559B2 (en) * | 2014-09-01 | 2017-11-07 | Mapquest, Inc. | Computerized systems and methods for identifying points-of-interest using customized query prediction |
US20160103858A1 (en) * | 2014-10-13 | 2016-04-14 | Freescale Semiconductor, Inc. | Data management system comprising a trie data structure, integrated circuits and methods therefor |
US9646061B2 (en) * | 2015-01-22 | 2017-05-09 | International Business Machines Corporation | Distributed fuzzy search and join with edit distance guarantees |
US10565195B2 (en) | 2015-02-03 | 2020-02-18 | Hewlett-Packard Development Company, L.P. | Records based on bit-shifting |
WO2016144367A1 (en) | 2015-03-12 | 2016-09-15 | Hewlett Packard Enterprise Development Lp | Database records associated with a trie |
US11080755B1 (en) * | 2015-04-14 | 2021-08-03 | Twitter, Inc. | Native advertisements |
US20170024657A1 (en) * | 2015-07-21 | 2017-01-26 | Yp Llc | Fuzzy autosuggestion for query processing services |
US10608879B2 (en) | 2015-10-16 | 2020-03-31 | Dell Products L.P. | Validation using natural language processing |
US10748116B2 (en) | 2015-10-16 | 2020-08-18 | Dell Products L.P. | Test vector generation from documentation |
US10725800B2 (en) * | 2015-10-16 | 2020-07-28 | Dell Products L.P. | User-specific customization for command interface |
CN106708858A (zh) * | 2015-11-13 | 2017-05-24 | 阿里巴巴集团控股有限公司 | 一种信息推荐方法及装置 |
US10216859B2 (en) * | 2016-03-22 | 2019-02-26 | Facebook, Inc. | Handling user interface components |
WO2018122238A1 (en) * | 2016-12-30 | 2018-07-05 | Robert Bosch Gmbh | Method and system for fuzzy keyword search over encrypted data |
US11030151B2 (en) * | 2017-03-29 | 2021-06-08 | AVAST Software s.r.o. | Constructing an inverted index |
US10956409B2 (en) | 2017-05-10 | 2021-03-23 | International Business Machines Corporation | Relevance model for session search |
CN109388690A (zh) * | 2017-08-10 | 2019-02-26 | 阿里巴巴集团控股有限公司 | 文本检索方法、用于文本检索的倒排表生成方法以及系统 |
US11016959B2 (en) * | 2018-01-31 | 2021-05-25 | Salesforce.Com, Inc. | Trie-based normalization of field values for matching |
CN109241137A (zh) * | 2018-08-27 | 2019-01-18 | 中国建设银行股份有限公司 | 一种联行号模糊查询方法及装置 |
WO2020061910A1 (zh) * | 2018-09-27 | 2020-04-02 | 北京字节跳动网络技术有限公司 | 用于生成信息的方法和装置 |
EP3542278A4 (en) * | 2018-11-07 | 2019-12-18 | Alibaba Group Holding Limited | CROSSING A DATABASE OF INTELLIGENT CONTRACTS THROUGH A LOGIC CARD |
US11514498B2 (en) | 2019-03-07 | 2022-11-29 | Beijing Jingdong Shangke Information Technology Co., Ltd. | System and method for intelligent guided shopping |
US11409805B2 (en) * | 2019-05-30 | 2022-08-09 | AdMarketplace | Computer implemented system and methods for implementing a search engine access point enhanced for suggested listing navigation |
US11386101B2 (en) | 2019-08-08 | 2022-07-12 | Cisco Technology, Inc. | Systems and methods for fuzzy search without full text |
US12001462B1 (en) * | 2023-05-04 | 2024-06-04 | Vijay Madisetti | Method and system for multi-level artificial intelligence supercomputer design |
CN110955827B (zh) * | 2019-11-18 | 2022-09-30 | 中南民族大学 | 采用AI3解决SKQwhy-not问题的方法及系统 |
US11327980B2 (en) * | 2020-04-21 | 2022-05-10 | International Business Machines Corporation | Cached updatable top-k index |
CN111597444B (zh) * | 2020-05-13 | 2024-03-05 | 北京达佳互联信息技术有限公司 | 一种搜索方法、装置、服务器、存储介质 |
CN115244539B (zh) * | 2020-05-18 | 2023-08-01 | 谷歌有限责任公司 | 单词或词段词元化的推断方法 |
CN112732796B (zh) * | 2021-01-23 | 2023-01-24 | 河北省科学院应用数学研究所 | 一种模糊查询匹配方法 |
KR20220129333A (ko) * | 2021-03-16 | 2022-09-23 | 삼성전자주식회사 | 비밀번호를 관리하는 전자 장치 및 이의 동작 방법 |
CN113176921B (zh) * | 2021-04-30 | 2023-09-19 | 上海云扩信息科技有限公司 | 一种桌面自动化定制化系统 |
CN114896480B (zh) * | 2022-04-06 | 2024-09-24 | 华南理工大学 | 基于路网索引的Top-K空间关键字查询方法 |
CN116501743B (zh) * | 2023-06-21 | 2023-11-24 | 中国电信股份有限公司 | 联表代价生成、重排方法和数据处理方法及装置、系统 |
CN116821436B (zh) * | 2023-08-24 | 2024-01-02 | 北京遥感设备研究所 | 一种面向模糊查询的字符串谓词准确选择估计方法 |
US12216645B1 (en) | 2023-11-08 | 2025-02-04 | Cribl, Inc. | Generating search query autocomplete suggestions based on metadata derived from event data |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1498379A (zh) * | 2001-03-21 | 2004-05-19 | 因特国风网络软件有限公司 | 个人及商业的网络名片系统及方法 |
CN1794233A (zh) * | 2005-12-28 | 2006-06-28 | 刘文印 | 一种网上用户交互问答方法及其系统 |
CN1889080A (zh) * | 2006-07-31 | 2007-01-03 | 浙江大学 | 一种用于检索字符串的方法 |
US20070260595A1 (en) * | 2006-05-02 | 2007-11-08 | Microsoft Corporation | Fuzzy string matching using tree data structure |
Family Cites Families (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5355473A (en) * | 1991-06-20 | 1994-10-11 | Lawrence Au | Indexed record locating and counting mechanism |
US6175835B1 (en) * | 1996-07-26 | 2001-01-16 | Ori Software Development, Ltd. | Layered index with a basic unbalanced partitioned index that allows a balanced structure of blocks |
US6684336B1 (en) * | 1999-04-30 | 2004-01-27 | Hewlett-Packard Development Company, L.P. | Verification by target end system of intended data transfer operation |
CA2279359C (en) * | 1999-07-30 | 2012-10-23 | Basantkumar John Oommen | A method of generating attribute cardinality maps |
US6560610B1 (en) * | 1999-08-10 | 2003-05-06 | Washington University | Data structure using a tree bitmap and method for rapid classification of data in a database |
US6636849B1 (en) * | 1999-11-23 | 2003-10-21 | Genmetrics, Inc. | Data search employing metric spaces, multigrid indexes, and B-grid trees |
US6614789B1 (en) * | 1999-12-29 | 2003-09-02 | Nasser Yazdani | Method of and apparatus for matching strings of different lengths |
US6829602B2 (en) * | 2002-12-12 | 2004-12-07 | Microsoft Corporation | System and method for using a compressed trie to estimate like predicates |
FI20030724A0 (fi) * | 2003-05-14 | 2003-05-14 | Nokia Corp | Tiedonsiirtomenetelmä, järjestelmä, tukiasema ja tilaaja-asema |
US7296011B2 (en) * | 2003-06-20 | 2007-11-13 | Microsoft Corporation | Efficient fuzzy match for evaluating data records |
US20050114331A1 (en) * | 2003-11-26 | 2005-05-26 | International Business Machines Corporation | Near-neighbor search in pattern distance spaces |
GB0400974D0 (en) * | 2004-01-16 | 2004-02-18 | Solexa Ltd | Multiple inexact matching |
US7603347B2 (en) * | 2004-04-09 | 2009-10-13 | Oracle International Corporation | Mechanism for efficiently evaluating operator trees |
GB0413743D0 (en) * | 2004-06-19 | 2004-07-21 | Ibm | Method and system for approximate string matching |
US7895218B2 (en) * | 2004-11-09 | 2011-02-22 | Veveo, Inc. | Method and system for performing searches for television content using reduced text input |
US8117540B2 (en) * | 2005-05-18 | 2012-02-14 | Neuer Wall Treuhand Gmbh | Method and device incorporating improved text input mechanism |
US8036878B2 (en) * | 2005-05-18 | 2011-10-11 | Never Wall Treuhand GmbH | Device incorporating improved text input mechanism |
US7321892B2 (en) * | 2005-08-11 | 2008-01-22 | Amazon Technologies, Inc. | Identifying alternative spellings of search strings by analyzing self-corrective searching behaviors of users |
US7512620B2 (en) * | 2005-08-19 | 2009-03-31 | Google Inc. | Data structure for incremental search |
KR100643801B1 (ko) * | 2005-10-26 | 2006-11-10 | 엔에이치엔(주) | 복수의 언어를 연동하는 자동완성 추천어 제공 시스템 및방법 |
US20070168335A1 (en) * | 2006-01-17 | 2007-07-19 | Moore Dennis B | Deep enterprise search |
US8463810B1 (en) * | 2006-06-01 | 2013-06-11 | Monster Worldwide, Inc. | Scoring concepts for contextual personalized information retrieval |
WO2008043582A1 (en) * | 2006-10-13 | 2008-04-17 | International Business Machines Corporation | Systems and methods for building an electronic dictionary of multi-word names and for performing fuzzy searches in said dictionary |
US7814086B2 (en) * | 2006-11-16 | 2010-10-12 | Yahoo! Inc. | System and method for determining semantically related terms based on sequences of search queries |
US7844608B2 (en) * | 2006-12-15 | 2010-11-30 | Yahoo! Inc. | Clustered query support for a database query engine |
US8255377B2 (en) * | 2007-01-07 | 2012-08-28 | Boopsie, Inc. | Multi-prefix interactive mobile search |
US7870151B2 (en) * | 2007-02-07 | 2011-01-11 | Fair Issac Corporation | Fast accurate fuzzy matching |
US7836060B1 (en) * | 2007-04-13 | 2010-11-16 | Monster Worldwide, Inc. | Multi-way nested searching |
US20090253112A1 (en) * | 2008-04-07 | 2009-10-08 | Microsoft Corporation | Recommending questions to users of community qiestion answering |
US8645417B2 (en) * | 2008-06-18 | 2014-02-04 | Microsoft Corporation | Name search using a ranking function |
US9104738B2 (en) * | 2008-06-19 | 2015-08-11 | Tropare, Inc. | Leveraging collaborative cloud services to build and share apps |
CN101872351B (zh) * | 2009-04-27 | 2012-10-10 | 阿里巴巴集团控股有限公司 | 识别同义词的方法、装置及利用其进行搜索的方法和装置 |
-
2009
- 2009-07-02 US US12/497,489 patent/US8073869B2/en active Active
- 2009-07-02 CN CN200980126026.8A patent/CN102084363B/zh active Active
- 2009-07-02 WO PCT/US2009/049633 patent/WO2010003129A2/en active Application Filing
-
2011
- 2011-11-14 US US13/295,767 patent/US8631035B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1498379A (zh) * | 2001-03-21 | 2004-05-19 | 因特国风网络软件有限公司 | 个人及商业的网络名片系统及方法 |
CN1794233A (zh) * | 2005-12-28 | 2006-06-28 | 刘文印 | 一种网上用户交互问答方法及其系统 |
US20070260595A1 (en) * | 2006-05-02 | 2007-11-08 | Microsoft Corporation | Fuzzy string matching using tree data structure |
CN1889080A (zh) * | 2006-07-31 | 2007-01-03 | 浙江大学 | 一种用于检索字符串的方法 |
Cited By (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103608859A (zh) * | 2011-06-14 | 2014-02-26 | 微软公司 | 使用模糊模式搜索的拼写 |
CN103020054A (zh) * | 2011-09-20 | 2013-04-03 | 深圳市金蝶中间件有限公司 | 模糊查询方法及系统 |
CN103020054B (zh) * | 2011-09-20 | 2016-04-13 | 深圳市金蝶中间件有限公司 | 模糊查询方法及系统 |
CN103034675A (zh) * | 2011-10-07 | 2013-04-10 | 索尼公司 | 信息处理装置、服务器、方法、信息提取方法和程序 |
CN103309886A (zh) * | 2012-03-13 | 2013-09-18 | 阿里巴巴集团控股有限公司 | 一种基于交易平台的结构化信息搜索方法和装置 |
CN103309886B (zh) * | 2012-03-13 | 2017-05-10 | 阿里巴巴集团控股有限公司 | 一种基于交易平台的结构化信息搜索方法和装置 |
CN103377190B (zh) * | 2012-04-11 | 2017-01-18 | 阿里巴巴集团控股有限公司 | 一种基于交易平台的供应商信息搜索方法和装置 |
CN103377190A (zh) * | 2012-04-11 | 2013-10-30 | 阿里巴巴集团控股有限公司 | 一种基于交易平台的供应商信息搜索方法和装置 |
CN103870493A (zh) * | 2012-12-14 | 2014-06-18 | 中国银联股份有限公司 | 对页面进行自动录入的系统和方法 |
CN105474214A (zh) * | 2013-08-21 | 2016-04-06 | 日本电气方案创新株式会社 | 文本字符串搜索设备、文本字符串搜索方法和文本字符串搜索程序 |
CN103914569A (zh) * | 2014-04-24 | 2014-07-09 | 百度在线网络技术(北京)有限公司 | 输入提示方法、装置及字典树模型的创建方法、装置 |
CN106156103A (zh) * | 2015-04-02 | 2016-11-23 | 广州爱九游信息技术有限公司 | 一种搜索处理方法及装置 |
CN106156103B (zh) * | 2015-04-02 | 2019-11-26 | 广州爱九游信息技术有限公司 | 一种搜索处理方法及装置 |
CN106156238A (zh) * | 2015-04-27 | 2016-11-23 | 科大讯飞股份有限公司 | 本体信息查询方法及系统 |
CN106294636B (zh) * | 2016-08-01 | 2019-03-19 | 中国电子科技集团公司第二十八研究所 | 一种基于数据库数据的搜索排名方法 |
CN106294636A (zh) * | 2016-08-01 | 2017-01-04 | 中国电子科技集团公司第二十八研究所 | 一种基于数据库数据的搜索排名算法 |
CN106777118A (zh) * | 2016-12-16 | 2017-05-31 | 武汉大学 | 一种基于模糊字典树的地理词汇快速抽取方法 |
CN106777118B (zh) * | 2016-12-16 | 2019-06-25 | 武汉大学 | 一种基于模糊字典树的地理词汇快速抽取方法 |
CN107169114A (zh) * | 2017-05-12 | 2017-09-15 | 东北大学 | 一种海量数据多维排序搜索方法 |
CN108804542B (zh) * | 2018-05-16 | 2021-12-07 | 河北天翼科贸发展有限公司 | 一种基于内存运算的快速获取文件增量方法 |
CN108804542A (zh) * | 2018-05-16 | 2018-11-13 | 河北天翼科贸发展有限公司 | 一种基于内存运算的快速获取文件增量方法 |
CN110134758A (zh) * | 2019-04-26 | 2019-08-16 | 中国地质大学(武汉) | 一种面向连续空间-模糊关键字查询的索引方法 |
WO2021077585A1 (zh) * | 2019-10-23 | 2021-04-29 | 深圳计算科学研究院 | 一种查询自动补全的方法和装置 |
CN111368057A (zh) * | 2020-03-05 | 2020-07-03 | 腾讯科技(深圳)有限公司 | 词组查询方法、装置、计算机设备以及存储介质 |
CN111368057B (zh) * | 2020-03-05 | 2023-08-22 | 腾讯科技(深圳)有限公司 | 词组查询方法、装置、计算机设备以及存储介质 |
CN113254589A (zh) * | 2021-06-07 | 2021-08-13 | 南京因由数字科技有限公司 | 一种检索相似专利的方法和装置 |
CN114925656A (zh) * | 2022-06-14 | 2022-08-19 | 北京新唐思创教育科技有限公司 | 富文本显示方法、装置、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US8631035B2 (en) | 2014-01-14 |
WO2010003129A2 (en) | 2010-01-07 |
US8073869B2 (en) | 2011-12-06 |
US20120059821A1 (en) | 2012-03-08 |
US20100010989A1 (en) | 2010-01-14 |
WO2010003129A3 (en) | 2010-04-01 |
CN102084363B (zh) | 2014-11-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102084363B (zh) | 一种用于在结构化数据上高效地支持交互式模糊搜索的方法 | |
US10671676B2 (en) | Multiple index based information retrieval system | |
Ji et al. | Efficient interactive fuzzy keyword search | |
Bhagavatula et al. | Methods for exploring and mining tables on wikipedia | |
KR101176079B1 (ko) | 문서 설명의 문구 기반 생성 | |
Coffman et al. | A framework for evaluating database keyword search strategies | |
KR101223172B1 (ko) | 정보 검색 시스템에서의 문구 기반 서치 | |
KR101223173B1 (ko) | 정보 검색 시스템에서의 문구 기반 인덱싱 | |
US7702618B1 (en) | Information retrieval system for archiving multiple document versions | |
US8073838B2 (en) | Pseudo-anchor text extraction | |
CN1728142B (zh) | 信息检索系统中的短语识别方法和设备 | |
US7711679B2 (en) | Phrase-based detection of duplicate documents in an information retrieval system | |
Liu et al. | Processing keyword search on XML: a survey | |
US9342582B2 (en) | Selection of atoms for search engine retrieval | |
US7822752B2 (en) | Efficient retrieval algorithm by query term discrimination | |
US8620907B2 (en) | Matching funnel for large document index | |
Li et al. | Supporting efficient top-k queries in type-ahead search | |
CN102254025B (zh) | 信息回忆检索方法 | |
König et al. | A data structure for sponsored search | |
Hold et al. | ECIR-A Lightweight Approach for Entity-Centric Information Retrieval. | |
Cheng | Toward entity-aware search | |
Elbassuoni et al. | Data Engineering | |
Bjørklund | Column Stores versus Search Engines and Applications to Search in Social Networks | |
Sabale et al. | Improved Fuzzy Technology for Efficient Searching | |
Löser | Beyond search: business analytics on text data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |