一种在全文检索系统中快速更新数据域的方法
技术领域
本发明属于智能信息处理技术,具体涉及的是一种在全文检索系统中快速更新数据域的方法。
背景技术
随着计算机技术及网络技术的迅速发展,电子文档数目急剧增长。如何在这海量的信息里面快速、全面、准确地查找所需要的资料信息已经成为人们普遍关注的问题,也成了研究领域内的一个热门课题。大部分电子文档是用自然语言写成的非结构化的文本数据,全文检索技术是目前处理文本数据的重要手段。
全文检索有多种实现方式,包括倒排索引,后缀数组和签名文件等。
一般索引的对应关系是从“文档号”到“文档中所有的词”的对应。倒排索引把这种关系倒转过来,变成从“词”到“出现该词的所有文档号”,从而能快速地通过词检索到出现这些词的所有文档。实际应用中,倒排索引中通常还会包括词在文档中出现的次数以及具体位置等信息。为了方便检索,倒排表通常是有序的。
以下是倒排索引的举例:
设有两篇文章1和2:
文章1的内容为:Tom lives in Guangzhou,I live in Guangzhou too。
文章2的内容为:He once lived in shanghai。
1)首先我们要取得这两篇文章的关键词,通常我们需要如下处理措施:
a.我们现在有的是文章内容,即一个字符串,我们先要找出字符串中的所有单词,即分词。英文单词由于用空格分隔,比较好处理。中文单词间是连在一起的需要特殊的分词处理。
b.文章中的”in”,“once”“too”等词没有什么实际意义,中文中的“的”“是”等字通常也无具体含义,这些不代表概念的词可以过滤掉。
c.用户通常希望查“He”时能把含“he”,“HE”的文章也找出来,所以所有单词需要统一大小写。
d.用户通常希望查“live”时能把含“lives”,“lived”的文章也找出来,所以需要把“lives”,“lived”还原成“live”。
e.文章中的标点符号通常不表示某种概念,也可以过滤掉。
经过上面处理后,文章1的所有关键词为:[tom][live][guangzhou][i][live][guangzhou]。
文章2的所有关键词为:[he][live][shanghai]。
2)有了关键词后,我们就可以建立倒排索引了。上面的对应关系是:“文章号”对“文章中所有关键词”。倒排索引把这个关系倒过来,变成:“关键词”对“拥有该关键词的所有文章号”。文章1,2经过倒排后变成:
关键词文章号
guangzhou 1
he 2
i1
live 1,2
shanghai 2
tom 1
通常仅知道关键词在哪些文章中出现还不够,我们还需要知道关键词在文章中出现次数和出现的位置,通常有两种位置:a)字符位置,即记录该词是文章中第几个字符(优点是关键词亮显时定位快);b)关键词位置,即记录该词是文章中第几个关键词(优点是节约索引空间、词组(phase)查询快)。
加上“出现频率”和“出现位置”信息后,我们的索引结构变为:
关键词文章号[出现频率]出现位置:
guangzhou 1[2] 3,6
he 2[1]1
i1[1]4
live 1[2],2[1]2,5,2
shanghai 2[1]3
tom 1[1]1
以live这行为例我们说明一下该结构:live在文章1中出现了2次,文章2中出现了一次,它的出现位置为“2,5,2”这表示什么呢?我们需要结合文章号和出现频率来分析,文章1中出现了2次,那么“2,5”就表示live在文章1中出现的两个位置,文章2中出现了一次,剩下的“2”就表示live是文章2中第2个关键字。
后缀数组索引是由Manber和Myers在1993年提出的一个空间效率非常高的文本索引结构,这种结构记录了文本中各后缀的字典序索引,它把文本中的所有后缀按照词典序存放其在文本中起始位置的一个列表。
签名文档是指把文档中的关键词散列成F位的位串,顺序访问原文档的关键词,把散列所得的位串依次存入文件。
以下是其匹配思想:假设我们现在要判断字符串A和字符串B是否匹配,首先把A和B分别散列成数字hash(A)和hash(B),如果hash(A)!=hash(B)则A!=B;然而hash(A)=hash(B)不能说明A=B。
下面是具体的匹配例子:
关键词x[0..5]:AACTCTHash(x[0..5])=17579;
文本y[0..9]:GCAACTCTCA Hash(y[0..5])=17819;
文本y[0..9]:GCAACTCTCA Hash(y[1..6])=17533;
文本y[0..9]:GCAACTCTCAHash(y[2..7])=17579。
签名文件具有以下优点:
1)文件组织简单,基本和原文档顺序一致;
2)维护容易,生成,插入,删除都很方便;
3)所需空间小,特别是采用重叠编码之后。
其中倒排索引是应用最广泛的方式,它对于以单词为基础的查询具有很好的性能。
随着全文检索系统被广泛采用,各种应用系统越来越多地依赖于全文检索系统,从而对全文检索系统提出了越来越高的要求。全文检索系统的优势在于可快速地实现非结构信息的检索,但在信息更新方面存在很大限制,特别是在传统的全文检索系统中不支持部分数据域的快速更新,只能进行完整数据项的增加与删除。这对应用系统很不方便,当只需更新某条数据项的部分数据域时,不得不删除整个原数据项并将该数据项的全部数据域提交给全文检索系统。
发明内容
本发明的目的是为全文检索系统提供一种快速更新数据域的方法,以便全文检索系统可对部分数据域进行快速更新,从而提高全文检索系统的信息处理能力,使得基于全文检索的应用系统更加简洁高效。
为达到上述目的,本发明采用以下方案:在建索引时,首先判断待建索引内容的数据域是否需要支持快速更新,如支持,则采用非倒排结构对数据域进行索引,否则,采用倒排结构进行索引;
在检索时,进行以下操作:
1)读取检索条件;
2)将检索条件分解成检索单元,并分别进行以下操作:
A:对支持快速更新的数据域的相关检索单元,通过非倒排索引获得检索单元的结果集;
B:对不支持快速更新的数据域的相关检索单元,采用倒排索引结构进行检索,获得检索单元的结果集;
3)将上述结果进行合并形成检索结果集;
在更新时,采用非倒排索引更新该数据域的内容。
进一步,所述非倒排索引为动态索引结构,如B树或者B+树。
进一步,所述非倒排索引为线性索引,在对线性索引的操作中,分别采取增加、查询、修改操作。
进一步,所述非倒排索引为动态索引和倒排索引的组合,利用倒排索引结构实现从内容到包含该内容的文档集合的索引,并对文档集合的标识采用动态索引进行组织,具体操作为:
在建索引时:首先利用倒排索引从数据域内容定位到相应的动态索引结构,该动态索引结构保存所有包含该内容的文档标识,然后将当前文档标识加入到动态索引结构中;
在检索时:对支持快速更新的数据域的相关检索单元,通过倒排索引获得相关的动态索引结构,通过动态索引结构获得检索单元的结果集;
在更新时,采用以下步骤:
4.1:在倒排索引中找到相应的动态索引结构;
4.2:从该动态索引结构删除该文档标识;
4.3:在倒排索引中根据数据域的新内容定位找到相应的动态索引结构;
4.4:将当前文档标识加入到该动态索引结构中。
进一步,所述非倒排索引为线性索引、动态索引及倒排索引的组合,通过将动态索引结构和倒排索引结构相结合,在全文检索系统中实现对数据域的快速更新,并通过线性索引辅助从文档标识快速找到数据域的原内容并进行删除,具体操作为:
在建索引时:首先利用倒排索引从数据域内容定位到相应的动态索引结构,该动态索引结构保存着所有包含该内容的文档标识,然后将当前文档标识加入到该动态索引结构中,并在线性索引中加入该文档标识与内容的索引关系;
在检索时,对支持快速更新的数据域的相关检索单元,通过倒排索引获得相关的动态索引结构,通过动态索引结构获得检索单元的结果集;
在更新时,采取以下步骤:
5.1:线性索引中根据文档标识找到待更新域的原内容,并替换成新的内容;
5.2:在倒排索引中根据数据域的原内容定位找到相应的动态索引结构;
5.3:从该动态索引结构删除该文档标识;
5.4:在倒排索引中根据数据域的新内容定位找到相应的动态索引结构;
5.5:将当前文档标识加入到该动态索引结构中。
本发明的效果在于:本发明通过将动态索引结构与倒排索引结构相结合,实现对数据域的快速更新,并通过线性索引,辅助从文档标识快速找到数据域的原内容并进行删除,从而解决了全文检索系统支持部分数据域的快速更新问题。实验表明,在普通PC环境下(CPU为P42.0G,内存为1.0GB),本发明实现的全文检索系统可支持部分数据域的更新。进一步的实验表明,该发明方法在略微降低建索引和检索的效率情况下,对部分数据域的更新具有很好的效率,通常在秒内就能完成一次数据域的更新。
附图说明
图1是本发明所述方法建索引的流程图;
图2是本发明所述方法检索的流程图;
图3是本发明所述方法数据域更新的流程图。
具休实施方式
下面结合附图对本发明的一种具体实施方式描述。
目前广泛使用的全文检索系统是基于倒排索引结构的,倒排索引结构可以快速从内容(字词或数值等)找到出现该内容的文档,从而实现信息的快速检索。但是倒排索引不能进行局部修改除非重写整个索引结构,而且在倒排索引中难以通过文档标识找到文档内容除非遍历整个索引结构。
为在全文检索系统中实现数据域快速更新,本发明在传统的基于倒排索引的全文检索系统基础上,提出了采用了动态索引与倒排索引相结合的技术方法。对不需要进行快速更新的数据域采用倒排索引;而对需要进行快速更新的数据域,将其与其它数据域分开单独索引,利用倒排索引结构实现从内容到包含该内容的文档集合的索引,并对文档集合的标识采用动态索引结构进行组织。这种动态索引结构与倒排索引相结合的方法虽然在检索速度上略低于倒排索引结构,但在数据更新方面具有较好的效率。
本发明在普通PC环境下(CPU为P42.0G,内存为1.0GB)进行实验,按照本发明的方法实现支持数据域快速更新的全文检索系统,具体包括以下操作:
在建索引时,如图1所示,首先读取待建索引的内容;
判断待建索引内容的各数据域是否需要支持快速更新,对支持快速更新的,采用非倒排结构对数据域进行索引,否则,采用倒排结构进行索引;
在检索时,如图2所示,进行以下操作:
1)读取检索条件;
2)将检索条件分解成检索单元,并分别进行以下操作:
A:对支持快速更新的数据域的相关检索单元,通过非倒排索引获得检索单元的结果集;
B:对不支持快速更新的数据域的相关检索单元,采用倒排索引结构进行检索,获得检索单元的结果集;
3)将上述结果进行合并形成检索结果集;
在更新时,采用非倒排索引更新该数据域的内容。
判断待建索引是否支持快速更新,由上层应用指定哪些数据域需要支持更新。
上述非倒排索引可以为动态索引结构,如:B树或者B+树。
分别利用动态索引的插入关键词方法、删除方法和查找方法实现建索引、检索及更新操作,是现有技术中比较成熟的方法,可以参见以下链接:http://student.aiak.cn/course ware/data structure/web/chazhao/chazhao9.3. 2.3.htm。
上述非倒排索引也可以为线性索引,在对线性索引的操作中,分别采取增加、查询、修改操作。
上面所述的非倒排索引还可以为动态索引和倒排索引的组合,利用倒排索引结构实现从内容到包含该内容的文档集合的索引,并对文档集合的标识采用动态索引进行组织,此时具体操作为:
在建索引时:首先利用倒排索引从数据域内容定位到相应的动态索引结构,该动态索引结构保存所有包含该内容的文档标识,然后将当前文档标识加入到动态索引结构中;
在检索时:对支持快速更新的数据域的相关检索单元,通过倒排索引获得相关的动态索引结构,通过动态索引结构获得检索单元的结果集;
在更新时,如图3所示,采用以下步骤:
1)在倒排索引中找到相应的动态索引结构;
2)从该动态索引结构删除该文档标识;
3)在倒排索引中根据数据域的新内容定位找到相应的动态索引结构;
4)将当前文档标识加入到该动态索引结构中。
上面所述的非倒排索引还可以为线性索引、动态索引及倒排索引的组合,此时具体操作为:通过将动态索引结构和倒排索引结构相结合,在全文检索系统中实现对数据域的快速更新,并通过线性索引辅助从文档标识快速找到数据域的原内容并进行删除,具体为:
在建索引时:首先利用倒排索引从数据域内容定位到相应的动态索引结构,该动态索引结构保存着所有包含该内容的文档标识,然后将当前文档标识加入到该动态索引结构中,并在线性索引中加入该文档标识与内容的索引关系;
在检索时,对支持快速更新的数据域的相关检索单元,通过倒排索引获得相关的动态索引结构,通过动态索引结构获得检索单元的结果集;
在更新时,采取以下步骤:
a:线性索引中根据文档标识找到待更新域的原内容,并替换成新的内容;
b:在倒排索引中根据数据域的原内容定位找到相应的动态索引结构;
c:从该动态索引结构删除该文档标识;
d:在倒排索引中根据数据域的新内容定位找到相应的动态索引结构;
e:将当前文档标识加入到该动态索引结构中。
实验选用的数据是从因特网上抓取的新闻类中文网页,提取出网页的新闻内容作为文本文件,每个文件为一篇新闻稿件,共100万篇,共2.68GB。对这些文件的文件名、文件来源和文件正文建索引、检索和更新实验,其中文件来源为需要快速更新的数据域。
对这些文档建索引总共耗时4小时22分钟,作为对比,实验中不采用本发明方法建索引,总共耗时4小时16分钟。实验结果表明,采用本发明方法的全文检索系统建索引的时间开销只有少量的增加。
为了验证采用本发明方法的对全文检索系统检索效率的影响,实验中我们进行了检索实验,部分实验结果如下表所示。实验表明,检索效率略微有所降低。
检索条件 |
检索时间(秒) |
不使用本发明的系统 |
使用本发明的系统 |
文件正文中包含“计算机” |
0.12 |
0.12 |
文件来源是“新浪网” |
0.08 |
0.10 |
文件正文中包含“计算机”并且文件来源是“新浪网” |
0.51 |
0.53 |
为了验证采用本发明方法的对全文检索系统的数据域更新效率,实验中我们进行了更新实验,实验结果如下表所示。实验表明,本发明的方法的数据域更新具有很好的效率,而不采用本发明的传统全文检索系统不支持对单个域的更新,只能采用先删除后新增整个数据项的方法进行更新,该方法不仅速度慢而且应用系统使用不方便。
|
更新时间(秒) |
不使用本发明的系统 |
使用本发明的系统 |
带完整数据项的更新 |
2.1 |
0.16 |
不带完整数据项的单个域更新 |
(不支持) |
0.13 |
以上实验结果可以看出,采用本发明方法的全文检索系统虽然在建索引和检索方面的效率略有下降,但可对数据域进行单个更新并具有很好的效率。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。