CN1326073C - 用于建立计算机文字信息的索引和进行检索的方法和*** - Google Patents

用于建立计算机文字信息的索引和进行检索的方法和*** Download PDF

Info

Publication number
CN1326073C
CN1326073C CNB011119993A CN01111999A CN1326073C CN 1326073 C CN1326073 C CN 1326073C CN B011119993 A CNB011119993 A CN B011119993A CN 01111999 A CN01111999 A CN 01111999A CN 1326073 C CN1326073 C CN 1326073C
Authority
CN
China
Prior art keywords
character
document
fritter
database
term
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.)
Expired - Fee Related
Application number
CNB011119993A
Other languages
English (en)
Other versions
CN1378157A (zh
Inventor
秦勇
李红
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to CNB011119993A priority Critical patent/CN1326073C/zh
Priority to JP2002100490A priority patent/JP3728264B2/ja
Publication of CN1378157A publication Critical patent/CN1378157A/zh
Application granted granted Critical
Publication of CN1326073C publication Critical patent/CN1326073C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种建立文字信息索引和进行检索的方法和***,其中按照作为检索对象的一组文献中所有字符的顺序确定每个字符在该组文献中的位置;将同一字符的位置数据按先后顺序存储在对应于该字符的一个或多个数据库块;将每个数据库块分为多个小块,每个小块包括多个字节的存储空间。基于这种索引结构进行检索。对于检索到的检索词位置,采用文献信息共享转换器确定检索词所在的文献。

Description

用于建立计算机文字信息的索引和进行检索的方法和***
技术领域
本发明涉及计算机信息处理中信息的索引生成及检索,具体涉及建立计算机文字信息的索引和进行检索的方法和***。
背景技术
在目前的计算机文字信息的全文检索中,有两种建立索引的方法:字表法和词表法。字表法按文献中出现的字作为一个索引单位生成索引。这种方法占用的空间大。而词表法是将文献中出现的关键词作为一个索引单位来建立索引。这种方法虽然节省了空间,提高了查询速度,但索引生成的速度慢,漏查率较高。
日本专利特许公开,特开平8-235212,特开平8-101848,特开平10-307841中公开了一种全文检索***采用字表法生成索引,利用文件***存储文献索引信息。它为字符集中的每个字符分别建立一个相应的文件,用来保存该字符在文献中出现的位置。为了节省字符位置数据的存储空间,在生成字符索引时,它将每个字符第一次出现的位置保存在该字符的索引文件中,并以第一次出现的位置为基础,采用差分算法把该字符在文献中第一次之后出现的位置与前一次出现的位置换算成差分序列(差分序列的定义请参见本文中的术语解释),顺序存放在第一次出现的位置后面。当进行全文检索时,用该字符保存在其索引文件中的第一次出现的位置以及它后面第一个的差分序列还原出第二次出现的位置,再由刚刚还原得到的该字符第二次出现的位置和它后面的一个差分序列还原得到第三次出现的位置,重复执行还原,直至找到检索词中该字符的匹配位置。对于一个频繁出现的字符,如:“の”,当匹配一个位于较后的字符位置,就必须从该字符在文献中第一次出现的位置开始逐个还原该字符每次出现的位置直到要匹配的位置。比如:一个字符在文献中一共出现了1千次,要得到该字符第999次出现的位置,需要从它的第1个差分序列开始执行998次还原才能获得第999次出现的位置。因此,该***在把字符的差分序列还原成文献中的位置时花费的时间比较长。
发明内容
随着计算机网络技术突飞猛进的发展,现有全文检索***已不能满足操作者对数据检索不断增长的需求。
因此本发明的目的是提供一种新的建立计算机文字信息的索引和进行检索的方法和***,对字符信息进行索引建立,支持海量数据的高速存贮及查询,多用户可共享数据。
本发明的目的是提供一种建立文献索引方法。它能缩小索引文件占据的空间,同时又能保证以较高的速度进行全文检索。
本发明的第二目的是提供一种利用上述索引进行全文检索的方法。
本发明的第三目的是提供一种通过指定的字符位置快速获得大量文献中与该字符位置相对应的文献信息的方法。
为了达到上述目的,发明人开发出了一种新的文字信息全文登录、检索方法和***。它采用Client/Server方式设计而成,利用SQL Server关系数据库的特性,建立字符信息索引,能够存储海量数据,提高了数据的共享性、一致性、安全性,使互联网和内部网上的Web服务器具有大容量、高速全文信息检索功能,实现信息资源的全球共享。
本发明提供了一种建立文字信息的索引的方法,包括下述步骤,在作为检索对象的一组文献中,按照所有文献中所有字符的顺序确定每个字符在该组文献中的位置;将同一字符的位置数据按先后顺序存储在对应于该字符的一个或多个数据库块,并且获得每个数据库块的中存储的最大位置和最小位置;将每个数据库块分为多个小块,每个小块包括多个字节的存储空间,并且获得每个小块中存储的最小位置。
本发明还提供了一种基于根据上述方法建立文字信息的索引,对文字信息进行检索的方法,包括以下步骤,获得检索词中每个字符的相对位置关系,用于检索检索词中每个字符的索引;分别判断该字符的每个数据库块中是否可能存在符合上述相对位置关系的位置;在可能存在符合上述相对位置关系的位置的数据库块中,分别判断其中每个小块是否可能存在符合上述相对位置关系的位置;在可能存在符合上述相对位置关系的位置的小块中,判断每个位置是否符合上述相对位置关系。
本发明还提供了一种建立文字信息索引和进行检索的方法,其特征在于建立文献信息共享转换器,该文献信息共享转换器开辟一块共享内存,把数据库中存储的作为检索对象的一组文献的文献信息的一部分字段缓存在共享内存中备份;在进行全文检索时,直接从共享内存中得到有关的文献信息。
本发明还提供了一种建立文字信息索引和进行检索的***,包括:
索引生成装置,该装置按照作为检索对象的一组文献中所有字符的顺序确定每个字符在该组文献中的位置;将同一字符的位置数据按先后顺序存储在对应于该字符的一个或多个数据库块,并且获得每个数据库块的中存储的最大位置和最小位置;将每个数据库块分为多个小块,每个小块包括多个字节的存储空间,并且获得每个小块中存储的最小位置;
全文检索装置,该装置获得检索词中每个字符的相对位置关系,用于检索检索词中每个字符的索引;分别判断该字符的每个数据库块中是否可能存在符合上述相对位置关系的位置;在可能存在符合上述相对位置关系的位置的数据库块中,分别判断其中每个小块是否可能存在符合上述相对位置关系的位置;在可能存在符合上述相对位置关系的位置的小块中,判断每个位置是否符合上述相对位置关系;
存储装置,用于存储文献,以及文献索引信息。
本发明还提供了一种建立文字信息索引和进行检索的***,其特征在于包括一个文献信息共享转换装置,该文献信息共享转换装置开辟一块共享内存,把数据库中存储的一组文献的文献信息在共享内存中备份;在进行全文检索时,直接从共享内存中得到有关文献的信息。
术语解释:
本说明书在后面涉及数据库结构时,发明人使用了一些数据库的常用术语,例如:表、记录和字段。表是数据库的结构组成部分,一个表包含多条记录,一条记录可以包含多个字段。本说明书的后面将会提到以下几个专用术语,在此先加以解释。
文档类:
按照文献的内容不同、作者不同、发表的时间不同或登录的操作者不同、登录的主机不同等各种因素,可以将登录的文献划分成多个文档类。每个文档类中可以包括多个文献。
文献:
文章、小说、新闻报道、专利说明书等文件。
字符:
本说明书中所提到的字符是指文献中的文字(包括单、双字节文字,如:西文字母,中、日文汉字,异体字、日文平假名,日文片假名)、标点符号、数字、特殊字符和制表符等单个字符。
字符的内部编码:
由于不同操作***使用的双字节文字的代码标准不同,如:WINDOW平台上的日文代码标准是Shift_JIS(Macintosh和DOS-V上的8位日语编码标准),UNIX平台上的日文代码标准是EUC(Extended Unix Code)。为了使来自各个不同平台的文献都能登录到本***中,发明人使用字符内部编码方法,将同一个字符的不同标准的代码例如JIS(Japanese Industrial Standard)、Shift_JIS(Macintosh和DOS-V上的8位日语编码标准)或EUC(ExtendedUnix Code)转换成与之对应的唯一的内部编码。
字符位置:
登录文献时,按其所属文档类中文献登录的先后顺序和文献里字符出现的先后顺序,为一文档类的文献里出现的每个字符分配一个在该文档类中的绝对位置。如,一文档类中第一个字符的位置为1,以后每个字符的位置一次为2,3...。
差分序列:
在同一文档类中,对于一个字符本次出现的字符位置与该字符前一次出现的字符位置,利用差分算法,计算得到该字符的字符位置差分值。
差分算法:
在同一文档类中,将一个字符本次出现的位置与该字符前一次在该文档类中出现的位置的低进制差值换算为高进制差值,例如将十进制的差值换算为127进制值。此外为了区分各个差分序列,把该127进制数中除了最后一位数(即个位数)以外的其它各位数的字节中的最高位的值设置为1,获得该字符位置的差分序列。比如:将十进制的2048383换算为127进制的值。
(2048383)10=( 0x01  0x00  0x00  0x00)127
换算得到的127进制数共有4位数,每一位数表示为一个16进制数,将这个数中除最后一个0以外的其它各位数的字节中的最高位的值设置为1(即:与0x80“或”运算),得到差分序列是(81808000)16
由于字符在文献中出现的位置是变化的,所以每个差分序列的大小也是变化的,所占用的字节数是不定的。请注意:这个字符的差分序列除最后一个字节中的高位(即字节的第8位)值是0之外,其前面字节的高位值均为1,由此可分辨出不同的差分序列。比如:字符“日”在一文档类中前后两次相继出现的位置是1390和1450,那么该字符的差分序列是((1450-1390)%127)10=(60)10=(3C)16(注:对于较小的数,本文中为易于表示而不换算成127进制数),这个差分序列只占用1个字节的存放空间。又如:字符“好”在一文档类中前后两次相继出现的位置是1308和9054,那么该字符的差分序列计算步骤是:
计算((9054-1308)/127)10,得到商是(60)10,余数为(126)10=(7E)16
计算(60/127)10,得到商是(0)10,余数为(60)10=(3C)16
由第1、2步计算出的127进制数,将低位数(7E)16的最高字节保留不变,高位数的最高字节置成1,即(3C)16→(BC)16。按由高向低的顺序排列便得到汉字“好”的差分序列为(BC7E)16,这个差分序列需要2个字节的存放空间。
还原:
在执行全文检索时,需要将字符的差分序列还原才能得到它在所属文档类中出现的字符位置。还原字符位置的差分序列的的算法就是差分算法的逆向算法。
小块:
是发明人自定义的一个存放数据的结构,它由一个存放字符位置的数据项和一个存放多个字符位置差分序列的数组构成。例如,它由一个长整型的数据项和一个BYTE类型的数组构成,用于存放同一字符的多个位置信息。其中长整型的数据项用来存放字符的一个字符位置;BYTE类型的数组存放的是自该字符位置之后该字符出现的多个字符位置的差分序列。
数据库块:
是数据库中用来存放数据的一块物理区域,反映在表结构中就是一个字段。一个数据库块可细分为许多的小块,用它可以保存字符的多个位置值。在表的每条存放着字符位置信息的记录中包含一个数据库块,并且包含两个字段分别对应于该条记录中数据库块里保存的该字符的最小位置和最大位置,以便在查询时能根据这两个字段的值快速判断出该条记录中是否可能有与其它字符相匹配的字符位置。如果可能有,再针对该条记录中的数据库块执行该字符的还原处理。如果没有,对该字符下一条记录进行判断、还原。
检索词:
由二个及二个以上的字符组成的字符串。它是操作者指定的一个要查找的字符串。
检索词匹配位置:
因为文献索引是以字符为单位存储的,所以指定检索词中某个字符的出现位置作为整个检索词的位置——检索词匹配位置,对数据库中存储的字符位置信息进行匹配处理。在后面的实施例中,检索词匹配位置设为检索词中出现第一个字符的位置。例如:检索词“米国アメリカ”中假设这6个字符各自的在文档类中的位置是:“米”的位置是10001,“国”的位置是10002,“ア”的位置是10003,“メ”的位置是10004,“リ”的位置是10005,“カ”的位置是10006,那么如果以检索词中出现的第一个字符作为它的匹配位置时,检索词“米国アメリカ”匹配位置就是“米”的位置10001。
位移量:
检索词中每个字符相对于检索词匹配位置的偏移量。例如:检索词“米国アメリカ”中假设以第1个出现的字符为起始点,这6个字符各自的位移量是:“米”的位移量0,“国”的位移量-1,“ア”的位移量-2,“メ”的位移量-3,“リ”的位移量-4,“カ”的位移是-5。也可以最后一个字符作起始点分别为这6个字符分配了各自的位移量。“カ”的位移量是0,“リ”的位移量是1,“メ”的位移量是2,“ア”的位移量是3,“国”的位移量是4,“米”的位移量是5。
本发明如上所述将所有文献分成多个文档类进行登录及存放,每个文档类中可以包含多个文献,每个文献按登录到数据库的先后顺序存放其中出现的字符。
我们从登录的文献中提取出文档类信息、文献信息、字符信息、字符位置信息存入数据库。下面将这四类信息一一详细解释。
文档类信息:
由每一个文献的内容可以人为地将其归纳为不同的文档类,如:政治、经济、体育、旅游……等;也可以根据不同的文献登录的操作者或其他各种原因建立不同的文档类。本发明为每个文档类指定了能够唯一标识该文档类的文档类编号。每个文档类中还包括了文档类名称和该文档类中字符最后位置等数据。其中:字符最后位置是指一文档类中当前最后登录的一个文献中最后一个字符在该文档类中的字符位置。即文档类信息包括文档类编号、文档类名称、和字符最后位置。
文献信息:
在每个文档类中可以有多个文献,因此对每个登录的文献都应指定一个文献编号。这个文献编号在每个文档类中是唯一的。它是长整数类型的数据值。它可以是从1开始的升序编号,也可以是不连续的整数值。
数据库中存储的文献信息除了每一个文献的唯一文献编号外,还有文献所属的文档类号、文献中出现的第一个字符和最后一个字符在所属文档类中的字符位置,在本说明书的后面我们称之为文献的起始位置和终止位置。
字符位置信息:
每个文档类可以包含多个文献,每一个文献可以由多个字符组成。所有不重复的字符组成一个字符集,该字符集中的每一个字符都有其对应的字符内部编码。由于每一个字符在该文档类的文献中会出现多次,因此在数据库中,保存了每个文档类中全部字符每次出现的位置信息。字符位置信息包括字符所属文档类编号、相对应的内部编码、存放字符位置数据(包括字符位置和差分序列)的数据库块、在数据库块中存放的该字符的第一个字符位置和最后一个字符位置等信息(在本说明书的后面我们称之为数据库块的最小位置和最大位置)。
字符信息:
为了提高全文检索的执行速度,在数据库中,发明人保存了每一文档类中每个字符的字符信息。字符信息包括字符所属文档类编号、相对应的字符内部编码、该字符在所属的文档类里出现的最大位置、该字符在其最后一个字符位置数据库块中的最小位置和其最后一个数据库块中已存放字符位置数据的长度等。
本发明将文档类中的所有字符以字符为单位建立字符的位置索引,也就是说将字符集内的每个字符每次出现在该文档类每个文献中的位置信息都存入数据库中。
由于有些常用字符如中文中“的”、日文中“の”出现的次数非常多,为了使存放该字符位置信息所占的空间较小,本发明的存放字符位置的方法是以该字符在所属文档类中第一次出现的位置及以后每次出现的位置表示每个字符每次出现在该文档类每个文献中的位置信息,并且用该字符在该文档类当前出现的位置与前一次出现的位置的差分序列来表示上述的以后每次出现的位置。也就是说在物理结构上在数据库块中存放的是该字符第一次出现的字符位置及以后每次出现的位置的差分序列。由于位置的差分序列相对于实际位置值所占的字节数较小,因此可以较大地减少字符位置索引所占的空间。
用差分序列表示每个字符以后每次出现的位置,虽然所占的空间较小,但是会影响检索速度。因为当存放一个出现频率非常高的常用字的每次出现位置信息时,与该字符对应的差分序列就很多。例如某一文档类中的一个字符出现了十万次,则利用该字符第一次出现的位置及以后每次出现的位置与前一次出现位置的差分序列还原出例如第九万次出现的具***置时就会浪费许多***时间。
为了解决这一问题,本发明对全文检索***JetSearch中使用一个***文件来保存一个字符的位置信息的方法作了改进。本发明将字符位置数据的存储化整为零。在数据库104中,每一条记录里有一个数据库块字段存放字符在所属文档类中的位置数据。同一个文档类中的一种字符可以有多个数据库块存放它的位置数据。
当存放一个出现频率非常高的常用字的位置数据时,与该字符对应的位置数据就会很多很多。在检索时为了能够迅速找到某个出现次数相当多的字符的符合匹配条件的位置信息(例如:在体育新闻中要查找出现NBA的文章,通过检索已知N第一次出现在文章的第一万字处,那么在第一万字之前出现的B和A是不符合匹配条件的),那么就要求***能够迅速准确地判断并找到相应的位置。如果用数据库块连续地存储字符的差分序列,那么在执行查询匹配时候,需要从数据库块中第1个差分序列开始逐个还原出字符本来的位置,直至符合检索字符串搭配条件的位置,这会浪费许多***时间,这不是一种好方法。
为此,本发明人将字符位置数据库块划分成许多的小块,每个小块含有一定的字节数,用于存放多个差分序列。其中每小块的前几个字节存放字符在该文档类里出现的位置。注意:此位置是字符在该文档类里按所有字符出现顺序确定的位置(以下称为小块的最小位置),而不是经过差分算法计算出的差分序列,也不同于数据库块的最大位置和最小位置。从每小块的这几个字节以后的字节存放的是利用差分算法计算出本次出现的该字符位置与前一次字符出现位置的差分序列。由于字符在文献中出现的位置是变化的,所以每个差分序列的大小也是变化的,所占用的字节数是不定的。当含有一定字节数的一个小块中所剩余的字节数放不下一个新的差分序列时,***便用0x00作为该小块的填充项将剩余的字节填满,然后再使用一个新的小块,把没有存入上一小块的字符在所属文档类中出现的位置作为新小块的最小位置保存在该小块的前几个字节里,接着再用差分序列来表示以后出现的位置。换一个角度说就是,一个字符以差分序列表示其出现位置一定次数(例如100-200次)之后,换一个小块存放,并为这个小块重新确定一个最小位置,接着再用差分序列表示以后出现的位置。当一个数据库块被多个小块数据填满时,需要为该字符再创建一条新的记录,在一个新的数据库块中进行存放。
如果小块的字节长度的值设定过长,则还原需要的时间就较长;而小块的字节长度值设定过短则占用的空间就较大,因此,以几百字节较为合适,也就是以该字符每出现100-200次换一个小块存放较为合适。
但是一个常用字在一文档类中也许会出现达到百万次以上,为此,本发明设定该字符出现例如40-80万次(例如填满4000个小块)之后重新另起一条记录,接着存放该字符的位置数据。为此在每条记录中还应有这条记录中的数据库块的最小位置及最大位置。
由上面的说明可以看出,在设计数据库的字符位置信息的结构时,发明人从尽量减少字符检索时间方面考虑,在一条存放字符位置数据的记录中增加了两个冗余字段——数据库块最小位置和数据库块最大位置,它们分别存放的是在一个数据库块中存储的该字符在所属文档类中出现位置的最小值和最大值。在全文检索进行检索词匹配过程中,要从数据库中将存放着检索词中所有字符位置信息的记录全部查找出来,这无疑是一大批记录。每条记录里有一个存放字符位置数据的数据库块,每个数据库块里又有数千个小块,每个小块里有几百个字节存放着该字符的位置数据(包括小块最小位置和差分序列)。如果一条字符位置记录中,没有数据库块的最小位置和最大位置,就需要从一大批记录的数据库块中,逐个比较每个小块中保存的小块最小位置,直到找出检索词中每个字符都匹配的位置,这样的操作仍然会耗费***时间。而在一条记录中,如果增加了这两个存放数据库块的最小位置和最大位置的字段后,当已经知道了检索词中一个字符在指定文档类中的位置,就可以用这个已知字符的位置与检索词中其它字符的位置数据库块的最小位置和最大位置的值进行比较,判断出某数据库块里是否可能存在所要找的字符位置。在确定要找的数据库块后,再由数据库块中每个小块的小块最小位置,便会很快判定在第几个小块里可能有要找的字符位置,从而相对于逐个还原每个字符的字符位置的节省了时间。
综上所述,本发明对字符的索引分为三个层次:
首先每一个字符可以有多条记录,每条记录中包括存放字符位置数据的数据库块,以及该数据库块中存放的该字符的最小位置及最大位置。
其次,每一个存放字符位置的数据库块又包含多达数千个存放字符位置的小块,每一个小块由两部分组成,第一部分存放在该小块的范围内该字符在该文档类中第一次出现的位置,即:小块最小位置;第二部分存放在该小块的范围内该字符在该文档类中以后每次出现的位置,即差分序列。
第三,字符在该文档类中以后每次出现的位置用该字符以后每次出现的位置与前一次出现位置的差分序列来表示。
下面结合附图来说明本发明的具体实施方案。但应当注意的是,本发明的范围并不局限于以下具体实施方案。本发明的下述的实施例中,实现本发明方法的硬件平台是以客户机/服务器网络结构为例进行说明的,即以客户机作为终端操作装置的示例,以服务器作为信息存储处理装置的示例。另外,以下实施例中所述的网络也应当被理解为连接装置的一个示例。从本发明以下的教导,可以理解对于本技术领域内的人员将本发明的方法在单机或浏览器/浏览服务器等其他计算机***上实现是显而易见的。
附图说明
图1A是索引建立与全文检索***的结构的一个示例;
图1B是图1A中的服务器的硬件框图;
图2是存放字符位置数据的数据库块和小块的结构图;
图3是文献索引生成器的处理流程图;
图4A和4B是全文检索引擎的处理流程图;
图5是文献信息共享转换器的处理过程示意图。
具体实施方式
下面参照图1A说明本发明的***结构。
客户机(终端操作装置)101——使用者的操作平台,由此向Server端发送文献登录、更新或检索的请求。
网络(连接装置)102——传送Client/Server的信息。
服务器(信息存储与处理装置)103——通过网络接收客户机101传送的文献登录、更新或检索的请求。经文献索引生成器105处理,将文献中所有字符位置信息存储到数据库104中;或经全文检索引擎106查找出满足使用者指定的检索要求的文献信息。
图1B表示服务器103的硬件框图。其中CPU1执行ROM2中存储的程序,对服务器实施各种控制;ROM2存储CPU的执行程序,用于实现其他流程图中所示的操作;RAM3为CPU1提供程序运行空间,并且为本发明提供共享内存空间;CRT4在CPU1的控制下执行各种显示;键盘5用于输入各种信息;外部存储装置6为硬盘或软盘,保存作为检索对象的文档,以及由这些文档生成的字符索引信息;总线7连接上述各个部分,以实现相互间的数据传输。
数据库104——设置于外部存储装置6中,用于存储各文档类的全文索引数据及各种文献信息数据。
文献索引生成器105——由CPU1运行,按字表法将文献登录在数据库104中。
全文检索引擎106——由CPU1运行,提供全文检索。
文献信息共享转换器107——由CPU1运行,在服务器内存RAM3中开辟一块共享内存,存放已登录文献的信息。在生成文献索引时,由文献索引生成器105即时更新共享内存中的文献信息。当进行全文检索时,全文检索引擎106直接从共享内存中获悉有关文献的信息。
在客户机/服务器(Client/Server)网络结构中,本***运行于服务器(Server)上,它主要由文献索引生成器105、全文检索引擎106和文献信息共享转换器107以及数据库104构成。
数据库104用来存储多个文档类。对指定的某一文档类,利用文献索引生成器105,可以将一个或多个文献进行登录到该文档类中,创建或更新该文档类的全文索引。进行文献登录时,文献索引生成器105把文献中出现的每个字符转变成相应的内部编码,并存放该字符在所属文档类中的位置信息。
在执行全文检索时,全文检索引擎106根据使用者输入(由键盘5等)的检索条件和模糊度(0是精确查询;大于0为模糊查询,模糊度越大,表示匹配精度越低,所得到的查询结果越多),检索数据库104中相关的记录,比较检索字符串中每一个字符的位置,匹配出满足查询条件的检索字符串,并返回含有检索字符串的全部文献的  和该检索字符串在每个文献中的位置。
由于数据库104中存储着的海量文字信息,进行全文检索需要较长的数据库处理时间,为了减少数据库104的输入/输出,缩短检索时间,提高***的运行性能,发明人设计了文献信息共享转换器107。文献信息共享转换器107的作用是,在内存RAM3中开辟了一块共享内存区,检索数据库104的文献信息表,并把指定文档类的文献信息中反映文献编号和文献位置范围的数据项(即:文献编号、文献起始位置、终止位置和删除标志四项数据),按登录的先后顺序读到共享内存中,并常驻内存中。在进行全文检索时,它利用二分查找算法,根据检索词的匹配位置确认所在文献的位置,快速地转换为相应的文献编号。当执行登录新文献时,将新文献的有关信息添加进去。当文献被删除时,将其中该文献的删除标志置成1(表示:已删除)。
本发明的重点在于以下三方面。
其一,在于数据库104中的字符位置信息的索引结构。由于同一个字符可能会在所属文档类中出现多次,因此需要存放该字符在文档类中所有出现过的位置。如果字符的每个位置使用数据库的整数型或长整数型字段存储(每个位置需占4个字节),将占用大量空间。为了尽量减少存储空间的浪费,同时又保证全文检索的速度,本发明人使用了差分算法,计算出在同一文档类中该字符本次出现位置与前一次出现位置的差分序列,用差分序列来表示该字符在该文档类中以后每次出现的位置信息,并采用数据库中的二进制数据类型(image类型)字段存储字符的位置。
发明人把存储字符在所属文档类中出现的多个位置的字段称为数据库块,将数据库块划分为4000个小块。每个小块含有260个字节,用于存放多个字符位置值。参见图2。其中:每小块的前4个字节存放字符在该文档类里出现的字符位置。从每小块的第5个字节起至该块以后的字节(含第5字节)存放的是调用差分算法计算出本次出现的该字符位置与前一次字符出现位置的差分序列。当一个小块中所剩余的字节数放不下一个新的差分序列时,***便用0x00作为该小块的填充项将剩余的字节填满,然后再使用一个新的小块,把该字符当前在所属文档类中出现的位置作为新小块的最小位置保存在该小块的前4个字节里,接着再用差分序列来表示以后出现的位置。换一个角度说就是,一个字符以差分序列表示其出现位置一定次数(例如100-200次)之后,换一个小块存放,并为这个小块重新确定一个最小位置,接着再用差分序列表示以后出现的位置,并存放在该新小块中。当一个数据库块的4000个小块全部被该字符的位置数据填满时,需要为该字符再创建一条新的记录。
其二,针对数据库104的字符索引结构中保存的字符位置信息,如何能够更快、更准确地获得全文检索的结果呢?为此,发明人设计了一种查询、匹配字符位置信息的算法。它通过数据库的查询语言,结合本发明的字符索引结构的特点,快速查找得到检索词的位置,再利用文献信息共享转换器,得出该检索结果所属文献的文献编号。
其三,海量数据的存储,在执行数据库的查询操作时,会增大数据库的I/O频率,降低数据库的运行性能,增加访问数据库的时间,影响全文检索的速度。为了尽量减少数据库的运行压力,缩短数据库的查询时间,提高全文检索的速度,发明人设计了一种把字符位置信息快速转换为文献信息的方法。利用高速缓冲存储器所具有的高速存取数据的特性,将数据库104的文献信息中反映文献编号和文献位置的数据项,即:文献编号、文献起始位置、文献终止位置、删除标志四项数据,按指定的文档类一次读入内存RAM3。对于指定的字符位置,根据每个文献的位置范围,利用二分查找算法,从内存RAM3中迅速找到匹配的文献数据,得到该文献编号。在执行文献登录或删除处理时,本转换器还提供了相应的接口实时更新有关文献的信息。
实施例:
首先,示例性地描述本发明的***在网络102上的运行过程。
在安装在服务器103上的全文检索***处理用户在客户机101提出的文字检索请求的过程中:
1.用户利用客户机101的键盘输入所要检索的文字或词,如果欲检索二个及二个以上的文字或词,应指定这些文字或词之间的逻辑关系。比如:与(OR)、或(AND)、非(NOT)关系。
2.经网络102将用户指定的检索词及其逻辑关系传送给服务器103上运行的全文检索***。
3.在服务器103上,全文检索***中的全文检索引擎106对接收到的检索请求进行处理。它从数据库104中按指定的检索词查找文献索引得到所有相关的匹配位置。
4.由文献信息共享转换器107把上一步骤中检索得到的所有匹配位置与存放在共享内存的文献信息(文献编号、文献起始位置和终止位置、删除标志)中的文献起始位置和终止位置逐个进行比较,获得匹配位置所在文献的文献编号及其删除标志,根据每个文献删除标志,进一步确认得到有效的文献编号,并将其生成一个结果集作为全文检索***的输出。
5.全文检索***将检索结果集通过网络102传送给客户机101,再由客户机101将其显示在屏幕上。
一.文献索引的生成处理
本发明提供了一种建立文献索引的方法,将每一文档类中同一字符在该文档类中前后二次出现的位置,利用差分算法计算得到差分序列,存储在数据库104的一种image类型数据库块中。这种数据库块是由例如4000个小块组成的,每一个小块又是由一个长整型数(long型,占4字节)和256个字节(byte)构成的。该数据库块的详细构造请参见图2。由此,可得出数据库104中,一个存放字符位置数据的数据库块最多可拥有1040000个字节((256+4)*4000=1040000)。
在定义该数据库块时,该数据库块中所包含小块的个数是可以改变的,每一个小块的大小也是可以改变的。
下面参照图3的流程图,说明利用文献索引生成器105为登录文献建立文献索引的处理。这种处理是在最初建立数据库104时,或者向数据库104追加文献或从数据库104中删除文献时,利用图1中文献索引生成器105进行的处理。
首先,根据每一个文献的内容、文献登录的操作者或其它因素,操作者事先将需要登录的文献进行分类,分入相应的文档类,并给每一文档类命名。在步骤402,显示,例如,具有输入框的对话框,对操作者提示要进行输入处理,操作者输入(例如,由键盘5)登录文献所属文档类的名称。
在步骤404,根据操作者在步骤402指定的文档类的名称,查找数据库104中文档类信息。若数据库104中不存在指定的文档类名称,***便为该文档类分配一个文档类号,为该文档类中所有字符的最后位置设置一个初始值。(比如:文档类号为1,字符的最后位置的初始值是0),将该文档类的有关信息***到数据库104中,并返回该文档类的类号和所有字符的最后位置;如果数据库中存在指定的文档类名称,从数据库104中得到该文档类号和所有字符的最后位置。由查找得到的文档类号检索数据库104中的字符信息,查出该文档类中每个字符在数据库104中的字符信息。如:在该文档类里某字符出现的最大位置、该字符在其最后一个数据库块中的最小位置和最后一个数据库块中已存放位置数据的长度等数据。
在步骤406中,利用高速缓冲存储器所具有的高速存取数据的特性,启动文献信息共享转换器107。判断共享内存中是否已保存了指定文档类的文献信息。若共享内存里没有所指定文档类的文献信息,在内存RAM3中申请一块共享内存,将指定文档类中每个文献的文献编号和文献位置数据项(即:文献编号、文献在该文档类中的起始位置、终止位置和删除标志等)从数据库104中读取到共享内存中,以备多用户同时查询该指定文档类。
在步骤408,向操作***申请内存RAM3预留空间,并对预留空间初始化。
在步骤410,判断是否有要登录的文献。如果有要登录的文献,继续执行步骤412;如果没有要登录的文献,执行步骤420、430和432,更新数据库104中的有关信息。
在步骤412,读入登录文献的信息,用该文献的编号查询数据库104的文献信息。若没有找到该文献编号,则将这个文献的信息存入数据库104的文献信息中。这些文献信息有:文献所属的文档类号、文献号、该文献的第一个字符和最后一个字符在所属文档类中的位置(文献起始位置和文献终止位置)等。如果在数据库104的文献信息中查找出该文献编号的记录,就说明数据库104的文献信息中已保存了该文献编号的文献,则返回错误编码。
在步骤414,检查登录的文献中是否还有未处理的字符。如果文献中还有未处理的字符,进行下一步骤416为一个字符生成索引的处理;如果已处理了最后一个字符,那么执行步骤426,用这个最后字符的位置更新数据库104的文献信息中这个文献的终止位置。
在步骤416,按顺序读入文献中一个字符,将它转换为对应的内部编码,(如:把在WINDOW***上使用的Shift_JIS码转换为***内部编码,例如:将アメリカ转换成***内部码,ア的内部码为283,メ的内部码为341,リ的内部码为347,カ的内部码为288),并由所属文档类的字符最后位置得到该字符在所属文档类中的位置,利用差分算法计算出该字符这次出现的位置与前一次出现位置的差分序列。
在步骤418的处理中,检查内存RAM3的预留空间里的剩余空间是否能够存放该字符的差分序列。若内存RAM3预留空间已满,执行步骤420、422和424,把内存RAM3预留空间里所有字符的数据全部写入数据库104的字符位置信息中;否则,继续进行下一步骤424。
步骤420,把内存RAM3预留空间中所有字符的位置信息保存到数据库104的字符位置信息中。如:字符所属文档类编号、相对应的内部编码、存放多个差分序列的数据库块、该字符相应数据库块中存储的最小位置(第一个位置)和最大位置(最后一个位置)等信息。
步骤422,在成功地把内存RAM3预留空间中所有字符的位置信息保存到数据库104的字符位置信息中之后,对内存RAM3预留空间重新进行初始化处理,以便继续保存登录文献中字符的位置信息。
步骤424,把经步骤416获得的字符位置存放在该字符的内存RAM3预留空间里。随后,返回步骤414从登录文献中取出下个字符。
步骤426,当处理完一个登录文献中的所有字符后,将这个文献中最后出现的字符在所属文档类中的字符位置保存到数据库104的文献信息中。即,用这个最后字符的位置更新数据库104的文献信息中这个文献的终止位置。
步骤428,调用文献信息共享转换器107,将所登录的文献的信息存储在共享内存中。
步骤430,用这次登录文献后每个字符的最新的字符信息更新数据库104的字符信息。包括:字符所属文档类编号、相对应的内部编码、在所属文档类里该字符出现的最大位置、该字符存放位置数据的最后一个数据库块中的最小位置和这个数据库块中已存放的字符位置数据的字节数等数据。
步骤432,用本次登录的最后一个文献中最后一个字符的位置,更新所属文档类在数据库104的文档类信息中字符的最后位置。
实施例1:
在windows平台上,利用文献索引生成器105将一个文献(文本文件)America1.txt登录到数据库104,并为其中的每个字符建立索引。这个文献的内容如下:
米国アメリカ  アメリカ合衆国
这个文献中共有14个字符,其中有5个汉字(由于有重复实际是4个汉字)及8个日文片假名(由于有重复实际是4个日文片假名)和1个空格。其中:“米”、“合”、“衆”三个汉字和空格在文献中只出现过一次,“国”、“ア”、“メ”、“リ”、“カ”五个字符(一个汉字和四个片假名)在文献中分别各出现过两次。
现假设这个文献所属文档类名称为新闻类,文档类编号是1,且该文档类是一个新建的类,还没有输入文献。在该文档类中上述文献的编号为1,文献名称是America1、发表时间是1999.8.10。将它作为新闻文档类的第一个文献提交给文献索引生成器105进行登录处理。
1.将登录文献的内容全部读入内存RAM3中,共读入14个字符,它们是:“米国アメリカアメリカ合衆国”。文献索引生成器105将这个文献的所属文档类号1、文献编号1、文献名称America1、发表时间1999.8.10和该文献在“新闻类”中的字符起始位置等信息存入数据库104“新闻类”的文献信息中。
2.逐字将文献America1.txt中的8个不重复字符分别由Shift_JIS代码转换为相应的***内部编码。对于文献中出现的空格,文献索引生成器105可根据预先设置的参数来确定是否对其进行处理。参数的缺省值是不为空格建立索引。文献America1.txt中,第7个字符就是空格。在实施例1中,假设***使用参数的缺省值,不为空格建立索引,因此,文献索引生成器105没有处理空格,将文献中第8个字符及其后面的字符顺序都分别提前了一个位置。请参见表1中第一、二栏。
表1:文献America1.txt中的字符与内部编码及其字符位置的对应关系
    字符     对应的内部编码     字符位置(每个字符在文档类中的位置)
    米     2909     1
    国     1369     2
    ア     283     3
    メ     341     4
    リ     347     5
    カ     288     6
    (空格)
    ア     283     7
    メ     341     8
    リ     347     9
    カ     288     10
    合     1359     11
    衆     1676     12
    国     1369     13
3.每一新文档类的起始位置都是从1开始,以1作为步长增量。字符位置是按字符在这一文档类中出现的总顺序来确定的。本例中,文献中所有字符在新闻类中的位置,请参见表1中第一、三栏。经过文献索引生成器105处理,字符与小块中前4字节的对应关系如表2所示。
表2:字符与小块中前4字节的对应关系
  字符     内部编码     最小位置   数据库块最大位置    小块的前4个字节中存储的字符位置
  米     2909     1   1    0x00000001
  国     1369     2   13    0x00000002
  ア     283     3   7    0x00000003
  メ     341     4   8    0x00000004
  リ     347     5   9    0x00000005
  カ     288     6   10    0x00000006
  合     1359     11   11    0x0000000B
  衆     1676     12   12    0x0000000C
4.如果一个字符在新闻文档类中第二次出现,利用差分算法,计算出该字符这次出现位置与上一次出现位置的差分序列,并将这个差分序列顺序地存入该字符的小块的第5个及其以后若干个字节。如:文献America1.txt中,第八、九、十和十一字符“アメリカ”就是重复出现的。下面,我们以文献America1.txt中字符“ア”为例作详细的说明。字符“ア”在文献中共出现了两次,其在新闻文档类中的位置分别是3、7。从表3第五栏可看到存储该字符的位置值是0x0000000304。
小块字节序号:     1   2   3   4   5
位置值:        0x00  00  00  03  04
其中:小块中前4个字节的值0x00000003是用十六进制值来表示的该字符在新闻文档类中第一次出现的位置,即(03)10=(03)16。小块中的第5个字节值是0x04,这是文献中字符“ア”第2次出现位置与该字符第一次出现位置的差分序列,即(07-03)10=(4)16。其它三个字符“メリカ”的差分序列计算与字符“ア”类似,它们分别与各自上一次出现的字符位置的差值也都是4。而汉字“国”在文献中第一次出现位置是2,第二次出现位置是13,经差分算法计算得出它的差分序列是(13-2)10=(11)10=(0B)16。四个片假名“アメリカ”和一个汉字“国”第二次出现的差分序列,请详见表3中第五栏的第5、6字节数据。请注意用黑体字标识了表3和表2不同之处。
如果同一字符在一次登录处理过程中频繁出现,其位置数据量超出了一个小块的大小,则需要多个小块来存放它的位置数据。由于本实施利所列举的文献中的字符个数较少,文献索引生成器105只为“米”、“国”、“ア”、“メ”、“リ”、“カ”、“合”、“衆”等八个字符各指定了一个小块,用来存放它们各自的位置数据(小块最小位置和差分序列)。
表3:字符与小块的对应关系
    字符     内部编码     最小位置     数据库块最大位置  小块中存储的位置数据
    米     2909     1     1  0x00000001
    国     1369     2     13  0x000000020B
    ア     283     3     7  0x0000000304
    メ     341     4     8  0x0000000404
    リ     347     5     9  0x0000000504
    カ     288     6     10  0x0000000604
    合     1359     11     11  0x0000000B
    衆     1676     12     12  0x0000000C
5.上述字符处理完后,逐字将所有字符的有关信息写入数据库104字符信息和字符位置信息中。数据库104的数据库块中保存着每个字符在新闻文档类中出现的位置。数据库块中存放数据的顺序是按小块的先后顺序向逐个小块填写数据。当一个小块装满数据之后,再写下一个小块,直至整个数据库块中的4000个小块全部填写满。
以字符“ア”为例,该字符所属文档类编号1、内部编码283、小块中存储的位置值是0x0000000304、数据库块中存放的位置数据的最小位置3和最大位置7等数据存入数据库104的字符位置信息中。而该字符所属文档类编号1、内部编码283、在新闻类中出现的最后位置7、在数据库块中所保存的字符最小位置3和最大位置7以及在小块中所保存的位置数据所占用的字节数5等项数据值存入到数据库104的字符信息中。
6.更新数据库104文档类信息中的字符的最后位置值和文献信息中该登录文献的终止位置。在实施例1中,数据库104文档类信息中的字符的最后位置值被更新为13,文献信息中文献America1.txt的终止位置是13。
7.在数据库104的文档类信息中保存了“新闻类”的有关信息,在文献信息中保存了文献America1.txt的信息,在字符位置信息中就保存了表3第二、三、四、五栏的数据,在字符信息中保存了表3第二、三、四栏的数据以及第5栏字符数据库块中实际存放位置数据的长度(以字节为单位)。
实施例2:
假设本实施例是在执行完实施例1及其继续登录了若干个文献之后进行的文献登录工作。
本实施例在windows平台上利用文献索引生成器105将一个文献(文本文件)America2.txt登录到数据库104中,并为其中的每个字符建立索引。这个文献的内容如下:
アメリカ合衆国  米国アメリカ
这个文献中共有14个字符,其中有5个汉字(由于有重复实际是4个汉字)及8个日文片假名(由于有重复实际是4个日文片假名)和1个空格。其中:“米”、“合”、“衆”三个汉字和空格在文献中只出现过一次,“国”、“ア”、“メ”、“リ”、“カ”五个字符(一个汉字和四个片假名)在文献中分别各出现过两次。
现假设该文献所属文档类名为新闻类,文档类编号是1,该文档类中已登录了多个文献,现在该文档类中字符的最后位置是30491,这个的文献编号为130011,文献名称是America2、发表时间是1999.8.11。在数据库104中,片假名“リ”在新闻类中的最大位置是8237,存放这个片假名的位置数据的最后一个数据库块里已保存了258个字节的位置数据;汉字“衆”在新闻类中的最大位置是1320,保存这个汉字的位置数据的最后一个数据库块里已保存了25个字节的位置数据。现将这个文献提交给文献索引生成器105进行登录处理。
1.文献索引生成器105在数据库104的文档类信息中进行信息查询处理,以便得到当前文档类中字符的最后位置和每个字符的最大位置。在实施例2中,查询数据库104获得“新闻类”里字符的最后位置是30491,其中片假名“リ”在该类中的最大位置是8237,最后一条字符位置记录里数据库块已存放了258个字节的位置数据,汉字“衆”在该类中的最大位置是1320,其最后一条记录中数据库块里已保存了25个字节的位置数据。
2.将登录文献的内容全部读入内存RAM3中,文献索引生成器105将这个文献的编号、名称、作者、发表时间等信息存入数据库104的文献信息中。在这个实施例中,***共读入14个字符,它们是:アメリカ合衆国  米国アメリカ。文献索引生成器105将这个文献的编号130011、文献名称America2、发表时间1999.8.11和该文献在“新闻类”中的起始位置30492等信息存入数据库104的文献信息中。
3.逐字将文献America2.txt中的13个字符分别由Shift_JIS代码转换为相应的***内部编码。对于文献中出现的空格,文献索引生成器105根据预先设置的参数来确定是否对其进行处理。参数的缺省值是不为空格建立索引。文献America2.txt中,第8个字符就是空格。文献索引生成器105不处理空格,将文献中第9个字符及其后面的字符的顺序都分别提前了一个位置。请参见表4中第一、二栏。
表4:文献America2.txt中字符与内部编码及其字符位置的对应关系
    字符     对应的内部编码     字符位置(每个字符在文档类中的位置)
    ア     283     30492
    メ     341     30493
    リ     347     30494
    カ     288     30495
    合     1359     30496
    衆     1676     30497
    国     1369     30498
    (空格)
    米     2909     30499
    国     1369     30500
    ア     283     30501
    メ     341     30502
    リ     347     30503
    カ     288     30504
4.将该文档类字符的最后位置值加1作为新登录文献的起始位置,并以1作为步长增量,按字符在这一文档类中出现的总顺序确定每个字符的位置。本例中,文献America2.txt的起始位置为30492。文献中所有字符在新闻类中的位置,请参见表4中第一、三栏。
5.用第1步查找得到某字符在登录新文献之前,在新闻类中的最大位置和当前该字符在该文档类中的位置,利用差分算法计算出该字符的差分序列。若一个字符当前的位置差分序列需要多个字节表示,而当前小块中的260个字节(4+256)剩余字节存放不下一个新的差分序列时,***便用0x00作为该小块的填充项将剩余字节填满,然后用另一新的小块,并且把该字符在所属文档类中本次出现的位置作为新的小块的最小位置保存在新小块的前4字节里。当以后出现该字符时,依次将其在所属文档类中出现的位置与前一次出现的位置的差分序列保存在新小块的第5个及其后面的字节里,并将本次出现的位置作为它在所属文档类中的最大位置保存下来。当一个小块装满数据后,再取出一个新的小块,把该字符出现的新位置作为这个小块的最小位置保存在其中。依此类推,直至将数据库块中的所有小块全部装满数据为止。在实施例2中,发明人以文献America2.txt中出现的片假名“リ”和汉字“衆”为例。前面已假设在数据库104中,片假名“リ”在新闻类中的最大位置是8237,存放这个片假名字符的最后一个数据库块里已保存了258个字节的位置数据。由表4可以看到登录文献America2.txt时,文献America2.txt中出现的第一个片假名“リ”在该文档类中的位置是30494,在数据库104的字符位置信息中保存的该片假名在新闻类中出现的最大位置是8237,利用差分算法计算30494与8237的差分序列是0x81B020,存放这个值需要3个字节的空间。为了保证数据库块中每一小块的完整性,因此在第1个小块的第259和260字节分别放置填充项0x00,而将这次登录的文献中该片假名出现的位置值放在第2个小块中。该片假名在新闻类中的位置30494(即0x771E)存放到第2小块的第1~4字节里作为第二小块中的最小位置。片假名“リ”在文献中第2次出现的位置是30503,差分序列是0x09,将该差分序列存放在第2小块的第5字节里。详情请参见表5中片假名“リ”一行黑体字处。前面假设了汉字“衆”在新闻类中的最大位置是1320,存放这个汉字的数据库块的第一小块里已保存了25个字节的位置数据。汉字“衆”在该文献中只出现了1次,在新闻类中的位置是30497。由该字符本次出现的位置30497和在第1步中从数据库104的字符位置信息中查找到的该汉字在新闻类出现的最大位置1320,可以计算得到差分序列是0x81 E65E,也需要3个字节。将该差分序列存放在汉字“衆”的小块中第26、27和28字节。请参见表5中汉字“衆”一行。其它字符的差分序列计算及存放方法与字符“リ”和汉字“衆”类似。在实施例2中8个字符的位置信息都各有变化,请参见表5。
表5:字符与小块的对应关系
    字符     内部编码  小块中存储的的位置数据
    ア     283  0x……
    メ     341  0x……
    リ     347  0x0000771E09
    カ     288  0x……
    合     1359  0x……
    衆     1676  0x……81E65E
    国     1369  0x……
    米     2909  0x……
6.上述字符处理完后,在数据库104中按字符内部编码顺序分别查找这几个字符的记录。如果能够找到指定字符的记录,就用本次登录的字符的信息更新数据库104字符信息和字符位置信息中的数据;否则将本次登录的该字符的信息存入数据库104字符信息和字符位置信息中。在实施例2中,仍以文献America2.txt中出现的片假名“リ”和汉字“衆”为例。在数据库104中分别查找到片假名“リ”和汉字“衆”的字符信息,并更新数据库的字符信息和字符位置信息。在更新数据库104字符位置信息时,文献索引生成器105将片假名“リ”在数据库104中的第1小块的最后2个字节和第2小块的第1~5字节更新,再将数据库104的字符信息中在新闻类中该字符出现的最大位置更新为30503。在将汉字“衆”位置信息写入数据库104时,文献索引生成器105更新在数据库的字符位置信息中存放字符位置的字段的第26、27和28字节共3个字节的数据;并且将它在数据库104的字符信息中在新闻类中出现的最大位置更新为30497。其余6个字符的数据更新操作与片假名“リ”和汉字“衆”相似。
表6:字符与数据库块的对应关系
字符 内部编码 数据库块中的最小位置  数据库块中的最大位置  数据库块中存储的位置数据
283 3  30501  0x0000000304……
341 4  30502  0x0000000404……
347 5  1320  0x0000000504……0000
347 30494  30503  0x0000771E09
288 6  30504  0x0000000604……
1359 11  30496  0x0000000B……
1676 12  30497  0x0000000C……81E65E
1369 2  30500  0x000000020B……
2909 1  30499  0x00000001……
7.更新数据库104文档类信息中的字符的最后位置值和文献信息中该登录文献的终止位置。在实施例2中,数据库104文档类信息中新闻类的所有字符的最后位置值被更新为30504,文献信息中文献America2.txt的终止位置是30504。
实施例3:
假设本实施例是在执行完实施例2及其继续登录了若干个文献之后进行的文献登录工作。
本实施例在windows平台上利用文献索引生成器105将一个文献America3.txt登录到数据库104中,并为其中的每个字符建立索引。这个文献中共有7个字符,包括4个日文片假名和3个汉字,其内容如下:
アメリカ合衆国
现假设这个文献所属文档类名为新闻类,文档类编号是1,该文档类中已登录了多个文献,现在该文档类的字符最后位置是303842975,这个的文献编号为290370,文献名称是America3、发表时间是2000.5.1。现将它提交给文献索引生成器105进行登录处理,步骤如下。在这个实施例中我们以片假名“リ”为例,假设它在新闻类中的最大位置是1016947,其位置数据存放在若干个数据库块中,在存放这个片假名的位置数据的最后一个数据库块里已保存了1039997字节的位置数据。
1.文献索引生成器105在数据库104的文档类信息中查找文档类名称是“新闻类”的记录,从中找到“新闻类”的记录,获得该文档类中字符的最后位置、每个字符的最大位置以及每个字符的相应最后一个数据库块中存放的位置数据的长度。在实施例3中,字符的最后位置是303842975,其中片假名“リ”在该类中的最大位置是1016947。
2.将登录文献的内容全部读入内存RAM3中。文献索引生成器105将这个文献的编号、名称、作者、发表时间等信息存入数据库104的文献信息中。在这个实施例中,***共读入7个字符,它们是:アメリカ合衆国。文献索引生成器105将这个文献的编号290370、文献名称America3、发表时间2000.5.1及文献起始位置303842976等信息存入数据库104有关文献的信息中。
3.逐字将将文献America3.txt中的7个字符分别由Shift_JIS代码转换为相应的***内部编码。请参见表7中第一、二栏。
表7:文献America3.txt中字符与内部编码及其位置的对应关系
字符 对应的内部编码  字符位置(每个字符在文档类中的位置)
283  303842976
341  303842977
347  303842978
288  303842979
1359  303842980
1676  303842981
1369  303842982
4.将新闻文档类里字符的最后位置值加1作为新登录文献的起始位置,并以1作为步长增量,按字符在这一文档类中出现的总顺序确定字符的位置。本例中,文献America3.txt的起始位置为303842976。文献中每个字符在新闻类中的位置,请参见表7中第一、三栏。
5.根据第1步查找得到每个字符在登录America3.txt之前在新闻类中的最大位置和第4步该字符在该文档类中的当前位置,利用差分算法计算出每个字符的差分序列。若一个字符当前位置的差分序列需要多个字节表示,而这个数据库块中某小块的260个字节(4+256)的剩余字节存放不下一个新的差分序列时,***便用0x00作为该小块的填充项将剩余字节填满,然后用另一块新的小块,将该字符在所属文档类中出现的位置作为新的小块的最小位置保存在该小块的前4字节里。当以后出现该字符时,***依次将前一次在所属文档类中的位置与本次位置的差分序列保存在新小块的第5个及其后面的字节里。当一小块装满数据后,***再用一个新的小块,保存该字符的新位置。依此类推,直至将数据库块中全部小块装满为止。在实施例3中,发明人以文献America3.txt中出现的片假名“リ”为例。前面已假设在数据库104中,片假名“リ”在新闻类中的最大位置是1016947,存放这个片假名的位置数据的最后一个数据库块里已保存了1039997个字节的位置数据。由1039997/260得出该片假名在该数据库块中已装满的小块个数为3999,由1039997%260得到该片假名在该数据库块的第4000块中已存放了257个字节数据,即数据库块的第4000小块中还只剩余3个字节。文献America3.txt中片假名“リ”在新闻文档类中的位置是303842978,在数据库104的字符位置信息中保存的该片假名在登录America3.txt前在新闻类中出现的最大位置是1016947,利用差分算法计算303842978与1016947的差分序列是0x8194EA9F77,存放这个值需要5个字节的空间。为了保证数据库块每一小块的完整性,因此在数据库块中第4000个小块的第258~260字节分别放置填充项0x00。然后再用一个新的数据库块,将该片假名出现的位置值0x121C46A2放在新的数据库块的第1个小块中。
6.全部处理完文献中的字符后,在数据库104中按字符内部编码顺序分别查找相应的记录。如果能够找到指定字符的记录,就用本次登录的字符的信息更新数据库104字符信息和字符位置信息中的数据;否则将本次登录的该字符的信息存入数据库104字符信息和字符位置信息中。在实施例3中,仍以文献America3.txt中出现的片假名“リ”为例。在数据库104中查找到片假名“リ”的字符信息,并更新数据库的字符信息和字符位置信息。在登录文献America3.txt之前,片假名“リ”在数据库104的最后一条字符位置记录中的数据库块已有1039997字节存放了该字符的差分序列。当更新数据库104字符位置信息时,文献索引生成器105更新该字符最后一条字符位置记录中的数据库块。再将上一步中新增的数据库块作为该字符在数据库104的字符位置信息中的一条新记录存入数据库104中,这条新记录成为该字符在数据库104的字符位置信息中的最后一条字符位置记录。
表8:字符与数据库块的对应关系
字符 内部编码  最小位置  最大位置  数据库块中存储的位置数据
283  3  303842976  0x0000000304……
341  4  303842977  0x0000000404……
347  5  1320  0x0000000504……0000
347  30494  1016947  0x0000771E09……000000
347  303842978  303842978  0x121C46A2
288  6  303842979  0x0000000604……
1359  11  303842980  0x0000000B……
1676  12  303842981  0x0000000C……
1369  2  303842982  0x000000020B……
7.更新数据库104文档类信息中的字符的最后位置值和文献信息中该登录文献的终止位置。在实施例3中,数据库104文档类信息中新闻类的字符最后位置值被更新为303842982,文献信息中文献America3.txt的终止位置是303842982。
二、全文检索引擎的处理
本发明,还提供了一种全文检索的方法。该方法利用本发明建立的文献索引中的字符位置信息,对操作者指定的检索词进行全文检索。
下面参照图4的流程图,说明利用已生成的文献索引进行全文检索的处理过程。
步骤502,输入文档类名。例如,显示具有输入框的对话框,提示操作者输入(例如,由键盘5)文档类名。
步骤504,全文检索引擎106根据输入的文档类名对数据库104中的文档类信息进行查询,查找出操作者指定的文档类名的文档类信息,从中得到该文档类相应的文档类编号。
步骤506,输入检索词。例如,显示具有输入框的对话框,提示操作者输入(例如,由键盘5)检索词。
步骤508,进行全文检索之前的数据初始化处理。包括以下几项处理:
定义检索词匹配位置。比如:设置它的初始值是1,即假设操作者要查询的检索词中的第一个字符在指定文档类中第一次出现的位置是1;
获得输入的检索词中所含字符的个数;
把输入的检索词中的每个字符逐字转换为内部编码;
根据每个字符在检索词中出现的顺序,为每个字符分配一个位移量。比如:检索词“米国アメリカ”中以第1个出现的字符为起始点,分别为这6个字符分配了各自的位移量。“米”的位移量是0,“国”的位移量是-1,“ア”的位移量是-2,“メ”的位移量是-3,“リ”的位移量是-4,“カ”的位移量是-5;
拼写出数据库的查询语句;
初始化结果集。
步骤510,将在步骤506拼写出的数据库查询语句提交给数据库104进行数据库查询,获得检索词中每个字符的位置信息的全部记录。形成一个记录集。这个记录集包含了检索词中每个字符的在数据库104中存储的位置信息记录,其中每条记录中又含有一个存放字符位置数据的数据库块字段。
步骤512,判断记录集中是否有检索词中每个字符的的记录。如果记录集中没有某个字符的记录,则结束检索。否则,进行步骤514。
步骤514,将查询到的检索词中每个字符的记录按照数据库块的最小位置分别进行排序。并将每个字符的第一条记录中的数据库块、该数据库块中第一小块和该小块中第一个字符位置分别设置为该字符的当前数据库块、当前小块和当前字符位置。
步骤516,设定一个计数器(I)用来表示正在进行检索词中的第I个字符的还原匹配。在步骤518中,它作为一个循环控制变量,控制着对检索词中的第I个字符进行字符位置还原、匹配处理。它的初始值设为1,表示从检索词的第一个字符开始还原匹配。
步骤518,如果I小于等于检索词中的字符个数,则前进到步骤520,进行第I个字符的还原匹配处理。否则,表示获得了检索结果,应保存该结果,然后前进到步骤544。
步骤520,将检索词匹配位置与检索词中第I个字符的当前记录中的数据库块的最大位置与第I个字符的位移量之和进行比较。1、如果大于,说明该数据库块中不存在与检索词匹配位置相匹配的字符位置,进行步骤538,判断记录集中是否还有第I个字符的记录,如果有,进行步骤540,取第I个字符的下一条记录,并将该记录中的数据库块设定为该字符的当前数据库块,其中的第一为当前小块,小块中的最小位置为当前位置;如果没有,结束当前检索词的检索。2、如果小于,说明当前记录的数据库块中的某个小块可能存放有匹配的字符位置,进行步骤522对当前数据库块的当前小块进行进一步判断。3、如果等于,说明当前数据库块的最大位置就是一个匹配的字符位置,然后进行步骤542,将I加1,进一步判断下一个字符是否与当前匹配位置匹配。
针对步骤522,首先进行一些说明。在本发明的字符位置数据库块中可以包含有多个小块,而一个小块中又是由一个最小位置和多个差分序列构成的,并且这些位置是按从小到大的顺序存放的,那么可以把两个连续的小块中后面的小块的最小位置看作前面小块里存放的最大位置。如:假设字符“日”在某一个数据库块的第5小块的最小位置是1000,第6小块的最小位置是1500,那么就可以确认在这个数据库块的第4小块中存放的最大位置应该小于1000,第5小块存放的最大位置应该小于1500。对于数据库块中的最后一个小块里的字符最大位置可用它所在的数据库块的最大位置来确定。
步骤522,将检索词匹配位置与检索词中第I个字符的当前小块的最大位置与第I个字符的位移量之和进行比较。1、如果大于,说明当前小块中不存在与检索词匹配位置相匹配的字符位置,进行到步骤534,判断当前记录的数据库块中是否还有下一个小块,如果有,进行步骤536,取下一个小块,并设定该小块为该字符的当前小块,该小块的最小位置为该字符的当前位置;如果没有,进行到步骤538。2、如果小于,说明当前小块中可能存放有匹配的字符位置,进行步骤524对当前小块中的位置数据进行进一步判断。3、如果等于,说明当前小块的最大位置就是一个匹配的字符位置,然后进行步骤542,将I加1,进一步判断下一个字符是否与当前检索词匹配位置匹配。
步骤524,将检索词匹配位置与检索词中第I个字符的当前还原的位置与第I个字符的位移量之和进行比较。1、如果大于,进行到步骤530,判断当前小块中是否还有下一个差分序列,如果有,进行步骤532,取下一个差分序列,用这个差分序列和该字符的当前位置,通过还原算法得到该字符在所属文档类中的当前还原位置;如果没有,进行到步骤534。2、如果小于,进行步骤526,用检索词中第I个字符的当前还原位置与第I个字符的位移量之和重置检索词匹配位置,然后在步骤528将I设置为1,返回步骤518,从检索词的第一个字符开始查找与新的检索词匹配位置匹配的字符位置。3、如果等于,说明当前还原的字符位置就是一个匹配的字符位置,然后进行步骤542,将I加1,进一步判断下一个字符是否与当前检索词位置相匹配。
步骤544,如果步骤518判断I大于检索词中的字符个数,说明查找到检索词中每个字符当前还原位置都与当前检索词匹配位置相匹配,即在当前文档类中查找到一个检索词的匹配。然后通过文献信息共享转换器107,根据当前检索词匹配位置确定所在文献,由该文献的删除标志知道它是否已被删除的。如果该文献已被删除,那么在该文献中出现的检索词不能作为检索结果;如果该文献未删除,得到该文献的文献号。
步骤546,将获得的文献号保存在检索结果集中。
步骤548,更新检索词匹配位置。将当前检索词匹配位置加1,作为新的检索词匹配位置。然后返回步骤516,将I设置为1,再到步骤518,从检索词的第一个字符开始查找与新的检索词匹配位置匹配的字符位置。
实施例4:
通过全文检索引擎106对存储在数据库104中的文献进行全文检索。假设准备查询“新闻类”文档1类中的一个词“米国アメリカ”。
步骤502,输入文档类名。例如,显示具有输入框的对话框,提示操作者输入文档类名“新闻类”。
步骤504,全文检索引擎106根据输入的文档类名对数据库104中的文档类信息进行查询,查找出“新闻类”文档类名的文档类信息,并从中得到“新闻类”的文档类编号为1。
步骤506,输入检索词。例如,显示具有输入框的对话框,操作者输入(例如,由键盘5)检索词“米国アメリカ”。
步骤508,进行全文检索之前的数据初始化处理。包括以下几项处理:
定义检索词匹配位置的初始值是1,即假设操作者要查询的检索词的第一个字符在“新闻”文档类中第一次出现的位置是1;
统计获得检索词“米国アメ リカ”中所含字符的个数是6;
逐字将该检索词中的字符转换成内部代码,如:把6个字符分别由Shift_JIS代码转换为相应的***内部编码,请参见表9第1,2栏数据;
根据每个字符在检索词中出现的顺序,为每个字符分配一个位移量。检索词“米国アメリカ”中以第1个出现的字符为起始点,分别为这6个字符分配了各自的位移量。“米”的位移量是0,“国”的位移量是-1,“ア”的位移量是-2,“メ”的位移量是-3,“リ”的位移量是-4,“カ”的位移量是-5,请参见表9第1,3栏数据;
把操作者输入的文档类名“新闻类”和检索词中6个字符的内部编码拼写在数据库的SQL查询语句中;
清空结果集。
步骤510,将在步骤506拼写出的数据库查询语句提交给数据库104进行数据库查询,获得检索词中每个字符的全部位置信息,形成多条记录。每条记录包括多个字段,一条记录中包含一个字符位置数据库块作为一个字段,即一条记录对应一个数据库块。获得一个记录集。这个记录集包含检索词中每个字符的在数据库104中存储的位置信息。在表9中,列出了“新闻类”文档类中检索词中出现的6个字符“米国アメリカ”在数据库104的字符位置信息中的部分记录。
表9:“新闻类”文档类中检索词是“米国アメリカ”的记录中的信息
字符 内部编码 位移量  最小位置  最大位置 数据库块中的位置数据
2909 0  1  30499  0x00000001816E……
1369 -1  2  303842982  0x000000020B……
283 -2  3  303842976  0x0000000304……
341 -3  4  303842977  0x0000000404……
347 -4  5  1320  0x0000000504……0000
288 -5  6  303842979  0x0000000604……
 …… …… ……  ……  ……  ……
347 -4  30494  1016947  0x0000771E09……000000
…… …… ……  ……  ……  ……
347 -4  303842978  303842978  0x121C46A2
步骤512,判断记录集中是否有检索词中每个字符的的记录。如果某个字符没有记录,则结束检索。否则,进行步骤514。
步骤514,将查询到的检索词中每个字符的记录按照数据库块的最小位置分别进行排序。例如リ的三条字符位置记录中数据库块的最小位置分别是5、30494和303842978。
步骤516,设定计数器(I)的初始值为1,表示从检索词的第一个字符“米”开始还原匹配。
在步骤518,I=1<6,则进行到步骤520。用已赋值为1的检索词匹配位置与“米”在数据库块中最大位置30499与“米”的位移量0之和(请参见表10第1,4,5栏)作比较,1<30499+0,说明该数据库块中可能存在与当前检索词匹配位置1匹配的“米”的字符位置,即该字符位置与位移量0之和等于当前检索词匹配位置1。假设该数据库块中第2小块的最小位置是X。将检索词匹配位置1与该数据库块第1小块的最大位置X(就是第2小块的最小位置)与“米”的位移量0之和进行比较,判定第1个小块中可能存在与当前检索词匹配位置1相等的“米”的字符位置,然后比较检索词匹配位置1与第1小块的最小位置1与“米”的位移量0之和,发现二者相等。计数器执行加1运算,即I=2,返回步骤518,查找字符“国”的数据库块中是否存在这样的字符位置,即其与“国”的位移量之和等于当前检索词匹配位置1。
此时I=2,字符“国”的位移量是-1,其第一条记录中的数据库块中的最大位置是303842982(参见表10第1,4,5栏),第1小块的最小位置是2,最大位置假设是Y。先算出这条记录中数据库块的最大位置与字符“国”位移量的和303842981(303842982-1=303842981),用这个和303842981与当前检索词匹配位置1比较大小,判定在该数据库块中可能存在与当前检索词匹配位置匹配的字符位置。将检索词匹配位置1与该数据库块第1小块的最大位置(即第2小块的最小位置)与位移量之和Y-1进行比较,判定该数据库块的第1小块里可能存在与当前检索词匹配位置匹配的字符位置。比较检索词匹配位置1与第1小块的最小位置2与位移量-1之和1(2-1=1),二者相等。即找到了与当前检索词匹配位置1匹配的检索词的第2个字符“国”。然后将计数器加1。
检索词中第3个字符及其之后3个字符“アメリカ”的匹配过程与上述对字符“米国”的匹配过程类似,只是“アメリカ”中每个字符的位移量各自不同。当匹配完字符“カ”,计数器的值为7,计数器的值大于检索词中字符的个数6,得到了这个检索词第一个检索结果,它的匹配位置是1。然后进行到步骤544。
在步骤544-548,利用文献信息共享转换器107,用上面获得的匹配位置1查找到相应的文献号为1。将检索结果存入结果集里。将检索词的匹配位置1加1,得到一个新的检索词匹配位置2作为当前检索词匹配位置。将计数器的值重置为1。从每个字符的当前数据库块中当前小块中当前位置开始查找与新检索词匹配位置匹配的结果。
在开始查找下一个检索结果时,首先,从字符“米”当前数据库块第1小块的第5、6字节取到一个差分序列是0x816E,将该差分序列除最后一位数(即个位数)外其它各位数的字节的最高位还原成0,变成了(016E)16=(366)10,用字符“米”前次出现的位置1与该值求和,还原得到字符位置值是367(1+366=367),再加上位移量0。这个值大于当前检索词匹配位置2,因此该还原的字符位置与检索词匹配位置2不匹配。用该字符的当前位置367与位移量0之和367重新设置检索词匹配位置,计数器也被重置为1。从每个字符的当前数据库块中当前小块中当前位置开始查找与新检索词匹配位置367匹配的结果,直至该检索词中某个字符不再有字符位置信息为止,便结束这次对“米国アメ リカ”的检索处理。
实施例5:
通过全文检索引擎106对存储在数据库104中的文献进行全文检索。假设准备查询“新闻类”文档中的一个词“アメリカ”。
步骤502,输入文档类名。例如,显示具有输入框的对话框,提示操作者输入(例如,由键盘5)文档类名“新闻类”。
步骤504,全文检索引擎106根据输入的文档类名对数据库104中的文档类信息进行查询,查找出“新闻类”文档类名的文档类信息,并从中得到“新闻类”的文档类编号为1。
步骤506,输入检索词。例如,显示具有输入框的对话框,操作者输入检索词“アメリカ”。
步骤508,进行全文检索之前的数据初始化处理。包括以下几项处理:
定义检索词匹配位置的初始值是1,即假设操作者要查询的检索词的第一个字符在“新闻”文档类中第一次出现的位置是1;
统计获得检索词“アメリカ”中所含字符的个数是4;
逐字将该检索词中的字符转换成内部代码,如:把4个字符分别由Shift_JIS代码转换为相应的***内部编码,请参见表11第1,2栏数据;
根据每个字符在检索词中出现的顺序,为每个字符分配一个位移量。检索词“アメリカ”中以第1个出现的字符为起始点,分别为这4个字符分配了各自的位移量。“ア”的位移量是0,“メ”的位移量是-1,“リ”的位移量是-2,“カ”的位移量是-3,请参见表11第1,3栏数据;
把操作者输入的文档类名“新闻类”和检索词中4个字符的内部编码拼写在数据库的SQL查询语句中;
清空结果集。
步骤510,将在步骤506拼写出的数据库查询语句提交给数据库104进行数据库查询,获得检索词中每个字符的全部位置信息,形成多条记录。每条记录包括多个字段,一条记录中包含一个字符位置数据库块作为一个字段,即一条记录对应一个数据库块。获得一个记录集。这个记录集包含检索词中每个字符的在数据库104中存储的位置信息。在表10中,列出了“新闻类”文档类中检索词中出现的4个字符“アメリカ”在数据库104的字符位置信息中的部分记录。
表10:“新闻类”文档类中检索词是“アメリカ”的查询结果
字符 内部编码 位移量  最小位置  最大位置  数据库块中的位置数据
283 0  1003  303842976  0x000003EB04……
341 -1  1004  303842977  0x000003EC04……
347 -2  1005  1320  0x000003ED04……0000
288 -3  1006  303842979  0x000003EE04……
…… …… ……  ……  ……  ……
347 -2  30494  1016947  0x0000771E09……000000
…… …… ……  ……  ……  ……
347 -2  303842978  303842978  0x121C46A2
步骤512,判断记录集中是否有检索词中每个字符的的记录。如果某个字符没有记录,则结束检索。否则,进行步骤514。
步骤514,将查询到的检索词中每个字符的记录按照数据库块的最小位置分别进行排序。例如リ的三个数据库块的最小位置分别是1005、30494和303842978。
步骤516,设定计数器(I)的初始值为1,表示从检索词的第一个字符“ア”开始还原匹配。
在步骤518,I=1<4,则进行到步骤520。用已赋值为1的检索词匹配位置与“ア”在数据库块中最大位置303842976与“ア”的位移量0之和(请参见表11第1,4,5栏)作比较,1<303842976+0,说明该数据库块中可能存在与当前检索词匹配位置1匹配的“ア”的字符位置,即该字符位置与位移量0之和等于当前检索词匹配位置1。假设该数据库块中第2小块的最小位置是X1。将检索词匹配位置1与该数据库块第1小块的最大位置X1(就是第2小块的最小位置)与“ア”的位移量0之和进行比较,判定第1个小块中可能存在与当前检索词匹配位置1相等的“ア”的字符位置,然后比较检索词匹配位置1与第1小块的最小位置1003与“ア”的位移量0之和,结果该数据库块第1小块的最小位置1003与位移量之和大于当前检索词匹配位置1。此时,字符“ア”当前位置是1003。在步骤526,将检索词匹配位置设置成字符“ア”当前位置1003与位移量0之和,计数器的值设为1。返回步骤518,用新的检索词匹配位置1003对第一个字符“ア”当前位置再一次进行匹配处理,确认检索词匹配位置1003与该字符的当前位置1003与位移量之和相等后,将I加1。
此时I=2,第2个字符“メ”的位移量是-1,其第一条记录中的数据库块中的最大位置是303842977(参见表11第1,4,5栏),第1小块的最小位置是1004,最大位置假设是Y2。先算出这条记录中数据库块的最大位置与字符“メ”位移量-1的和303842976(303842977-1=303842976),用这个和303842976与当前检索词匹配位置1003比较,判定在该数据库块中可能存在与当前检索词匹配位置匹配的字符位置。将检索词匹配位置1003与该数据库块第1小块的最大位置(即第2小块的最小位置)与位移量之和Y2-1进行比较,判定该数据库块的第1小块里可能存在与当前检索词匹配位置1003匹配的字符位置。求第1小块的最小位置1004与位移量-1的和1003,将该和与检索词匹配位置1003进行比较,二者相等。即找到了与当前检索词匹配位置1003匹配的检索词的第2个字符“メ”。然后将计数器加1。
此时I=3,查找第3个字符“リ”与检索词匹配位置1003匹配的字符位置。字符“リ”的位移量是-2,在数据库块中最大位置是1320(请参见表11第1,4,5栏),第1小块的最小位置是1005,最大位置假设是X3。先算出这条记录中数据库块的最大位置与这个字符位移量的和1318(1320-2=1318),用这个和1318与检索词匹配位置1003比较,判定在该数据库块中可能存在与当前检索词匹配位置1003匹配的字符位置。将检索词匹配位置1003与该数据库块第1小块的最大位置(即第2小块的最小位置)与位移量-2之和X3-2进行比较,判定该数据库块的第1小块里可能存在与当前检索词匹配位置匹配的字符位置。求出第1小块的最小位置1005与位移量-2的和是1003,将该和与检索词匹配位置1003进行比较,二者相等。即找到了与当前检索词匹配位置1003匹配的检索词的第3个字符“リ”。然后将计数器加1。
此时,I=4。查找第4个字符“カ”与检索词匹配位置1003匹配的字符位置。字符“カ”的位移量是-3,在数据库块中最大位置是303842979(请参见表11第1,4,5栏),第1小块的最小位置是1006,最大位置假设是X4。先算出这条记录中数据库块的最大位置与这个字符位移量的和303842976(303842979-3=303842976),用这个和303842976与检索词匹配位置1003比较,判定在该数据库块中可能存在与当前检索词匹配位置1003匹配的字符位置。将检索词匹配位置1003与该数据库块第1小块的最大位置(即第2小块的最小位置)与位移量-3之和X4-3进行比较,判定该数据库块的第1小块里可能存在与当前检索词匹配位置匹配的字符位置。求出第1小块的最小位置1006与位移量-3的和是1003,将该和与检索词匹配位置1003进行比较,二者相等。即找到了与当前检索词匹配位置1003匹配的检索词的第4个字符“カ”。然后将I加1。
此时,I=5。在步骤518计数器的值I大于检索词所含的字符个数4,所以可以判断找到了一个检索结果,匹配位置是1003。在步骤544-548,利用文献信息共享转换器107,用上面获得的匹配位置1003查找到相应的文献号。把检索结果存入结果集里。将检索词的匹配位置1003加1,得到一个新的检索词匹配位置1004。将计数器的值重置为1。此时,检索词4个字符的当前位置是:字符“ア”是1003,字符“メ”是1004,字符“リ”是1005,字符“カ”是1006。由每个字符的当前数据库块的当前小块的当前位置开始查找一个新的检索结果。
在开始查找下一个检索结果时,首先,从字符“ア”当前数据库块第1小块的第5字节取到一个差分序列是04。因为这个差分序列只有1位数,所以直接将该差分序列值与前一次出现的位置1003相加得到位置值是1007(1003+4=1007)。经比较,检索词匹配位置1004小于字符“ア”的当前位置1007与位移量0之和。因此没有与检索词匹配位置1004匹配的结果。用该字符的当前位置1007与位移量0之和1007重新设置检索词匹配位置,计数器也被重置为1。重新开始查找字符“ア”的匹配位置。结果检索词匹配位置1007与字符“ア”当前位置相等,I由1变为2。
而后,分别查找其余3个字符“メリカ”与当前检索词匹配位置1007匹配的字符位置。如果全部匹配,在步骤544-548利用文献信息共享转换器107,用上面获得的匹配位置查找到相应的文献号,将又一个检索结果存入了结果集。然后从步骤516重复上述过程,直到检索词中某个字符不再有字符位置信息为止,便结束这次对“アメリカ”检索工作。
三、文献信息共享转换器
本发明,还提供了一种由指定的字符位置快速获得相对应的文献信息的方法。这种方法利用高速缓冲存储器所具有的高速存取数据的特性,把数据库104的文献信息的部分信息在共享内存中保存一个备份。在执行全文检索的过程中,它可以从全文检索处理得到的一个或多个匹配位置,通过二分查找算法,快速、准确地得到相对应的文献编号。每当执行登录或删除文献处理时,启动文献信息共享转换器107,可以实时更新这个备份的文献信息。
下面参照图5,说明文献信息共享转换器的处理过程。
1.输入602文档类号,文献信息共享转换器107先检查共享内存604中是否已保存了指定文档类的文献信息。若共享内存604里没有所指定文档类的文献信息,向***申请一块共享内存604。检索数据库104的文献信息,把指定文档类的所有文献信息中有关反映文献编号和文献位置的数据项,如:文献编号和文献起始位置、终止位置、删除标志等四项数据,按文献登录的先后顺序读到共享内存604中并常驻内存,以备多用户同时查询该指定文档类。数据库104的文献信息中其他数据项,比如:作者、文献标题等,则只作为存档数据保存在数据库104。若共享内存604里已保存了所指定文档类文献的信息,那么可以从共享内存604中直接读取文献信息,而不必访问数据库104。这样做,可减少数据库1 04的I/O频率,节省访问数据库的时间,提高数据查询的速度。
2.在进行全文检索时,将位置信息606,一个用来存放一个或多个匹配位置的一维数组,作为输入参数提交给文献信息共享转换器107。文献信息共享转换器107采用二分查找算法,将每个匹配位置与共享内存604中文献的范围(文献的起始位置和终止位置)进行比较,确定匹配位置所在的文献,并检查所确定文献的删除标志。如果这个文献已被删除,即删除标志为1,则这个文献对应的返回值是-1。否则,文献信息共享转换器107输出查获的相应的文献编号。最后将所有由匹配位置转换得到的文献号存放在文献信息608——一个存放一个或多个文献号的一维数组。文献信息608中文献号的存放顺序与位置信息606中检索词匹配位置的存放顺序是一一对应的。
3.当登录新文献、生成字符索引时,文献索引生成器105提供接口,可以实时地将新文献的有关信息添加进共享内存604中。
4.当文献被删除时,文献索引生成器105提供接口,可以实时地将共享内存604里这个被删除文献的删除标志置成1(表示:已删除)。
实施例7:
本实施例是对一个存放了多个匹配位置的一维数组中的数据进行文献信息的转换,以便得到这些位置所对应的文献编号。
1.输入文档类号为1,参见图5中602。文献信息共享转换器107检查共享内存604中是否已保存了文档类号为1的文献信息。若共享内存604里没有所指定文档类的文献信息,向***申请一块共享内存604。在数据库104的文献信息中查找出文档类号是1的所有文献信息,获取每个文献的文献编号和文献起始位置、终止位置、删除标志等四项数据,按文献登录的先后顺序读到共享内存604中并常驻内存中,以备多用户同时查询该指定文档类。请详见图5得604。
2.把存放一组(多个)匹配位置的数组,位置信息606,送入文献信息共享转换器107。
3.文献信息共享转换器107采用二分查找算法,自该数组的第一个数据开始逐个将每个匹配位置与共享内存604中文献的范围(文献的起始位置和终止位置)进行比较,确定匹配位置所在的文献,并检查所确定文献的删除标志。如果这个文献已被删除,即删除标志为1,则这个文献对应的返回值是-1。否则,文献信息共享转换器107输出查获的相应的文献编号。实施例7中,对于位置信息606中的第1个匹配位置为1001,文献信息共享转换器107用二分查找法,在共享内存604中很快便找到一个相应的文献,该文献的起始位置是998,终止位置是1100,文献号是21,删除标志为0表示未删除。文献信息共享转换器107将匹配位置1001所对应文献的文献号21存放在文献信息608中第1个,完成了一个将匹配位置转换成相应的文献号的过程。在处理位置信息606中匹配位置值3001时,文献信息共享转换器107经查找、比较,确定匹配位置值3001在一个起始位置是2890,终止位置是3005,文献号是41的文献中。再检查这个文献的删除标志是1,表示这个文献已被删除,文献信息共享转换器107返回-1,表示匹配位置3001没有对应的文献。文献信息共享转换器107对位置信息606中保存的其它匹配位置的转换处理与上述的处理步骤完全相同。
4.文献信息共享转换器107将位置信息606中所有由检索词位置转换得到的文献号存放在文献信息608中。文献信息608中文献号的存放顺序与位置信息606中检索词匹配位置的存放顺序是一一对应的。

Claims (4)

1、一种建立文献中的字符信息索引和进行检索的***,其特征在于包括:
(a)文献索引生成器,具有
确定单元,用于确定每一个字符在要检索的文献中的位置;
存储单元,用于针对每一个相同的字符,顺序存储在数据库块中、表明相同字符首次出现的最小位置以及表明所述相同字符最后出现的最大位置,其中所述数据库块包括多个小块;以及
生成单元,用于生成多个小块中的第一和第二存储字段,每一个小块的第一存储字段存储表明相同字符在每一个小块中首次出现的最小位置,每一个小块的第二存储字段存储字符的位置和相同字符的前一位置之间的差值;
(b)全文检索引擎,具有
获取单元,用于获取检索词中字符间的相对位置关系,以检索在检索词中每个字符的索引;和
确定单元,用于分别确定每一个字符的数据库块中是否具有符合所述相对位置关系的位置,并用于确定在具有符合所述相对位置关系的位置的数据库块的小块中是否具有符合所述相对位置关系的位置;
(c)数据库,具有用于存储文献以及文献索引信息的单元;以及
(d)文献信息共享转换器,用于开辟一块共享内存,将数据库中存储的作为检索对象的一组文献的文献信息的一部分字段缓存在共享内存中备份,在进行全文检索时,直接从共享内存中得到有关的文献信息。
2、一种建立文献中的字符信息的索引的装置,其特征在于包括:
确定单元,用于确定每一个字符在要检索的文献中的位置;
存储单元,用于针对每一个相同的字符,顺序存储在数据库块中、表明相同字符首次出现的最小位置以及表明所述相同字符最后出现的最大位置,其中所述数据库块包括多个小块;以及
生成单元,用于生成多个小块中的第一和第二存储字段,每一个小块的第一存储字段存储表明相同字符在每一个小块中首次出现的最小位置,每一个小块的第二存储字段存储字符的位置和相同字符的前一位置之间的差值。
3、根据权利要求2所述的装置,其特征在于,在为该组文献中的一个字符建立索引时,如果该字符的当前小块中的剩余字节放不下一个新的差分序列时,使用0x00填充每个所述剩余字节,然后使用一个新小块,把该字符在该组文献中的当前位置作为该新小块的最小位置存储在该新小块的开始的几个字节中。
4、根据权利要求2所述的装置,其特征在于,对字符信息进行检索时,获得检索词中字符间的相对位置关系,用于检索在检索词中每个字符的索引;分别判断每一个字符的数据库块中是否具有符合所述相对位置关系的位置;在具有符合所述相对位置关系的位置的数据库块中,分别判断其中每个小块是否具有符合所述相对位置关系的位置;在具有符合所述相对位置关系的位置的小块中,判断该小块的每个位置是否符合所述相对位置关系。
CNB011119993A 2001-04-02 2001-04-02 用于建立计算机文字信息的索引和进行检索的方法和*** Expired - Fee Related CN1326073C (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CNB011119993A CN1326073C (zh) 2001-04-02 2001-04-02 用于建立计算机文字信息的索引和进行检索的方法和***
JP2002100490A JP3728264B2 (ja) 2001-04-02 2002-04-02 インデックス作成装置、検索システム、及び制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB011119993A CN1326073C (zh) 2001-04-02 2001-04-02 用于建立计算机文字信息的索引和进行检索的方法和***

Publications (2)

Publication Number Publication Date
CN1378157A CN1378157A (zh) 2002-11-06
CN1326073C true CN1326073C (zh) 2007-07-11

Family

ID=4659179

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB011119993A Expired - Fee Related CN1326073C (zh) 2001-04-02 2001-04-02 用于建立计算机文字信息的索引和进行检索的方法和***

Country Status (2)

Country Link
JP (1) JP3728264B2 (zh)
CN (1) CN1326073C (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9009655B2 (en) 2008-09-28 2015-04-14 KOUSOKUYA, Inc. Code string search apparatus, search method, and program
CN102567421B (zh) * 2010-12-27 2014-04-02 北大方正集团有限公司 文档检索方法和装置
JP6028392B2 (ja) * 2012-05-24 2016-11-16 富士通株式会社 生成プログラム、生成方法、生成装置、検索プログラム、検索方法および検索装置
CN111651580B (zh) * 2020-06-04 2024-05-03 天启黑马信息科技(北京)有限公司 一种用于文献检索的方法与设备
CN112650893A (zh) * 2020-12-18 2021-04-13 浙江诺诺网络科技有限公司 一种字符串检索方法、***、设备及计算机可读存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1197955A (zh) * 1997-04-17 1998-11-04 阿尔卡塔尔-阿尔斯托姆通用电气公司 管理共享内存的方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3333549B2 (ja) * 1992-03-24 2002-10-15 株式会社リコー 文書検索方式

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1197955A (zh) * 1997-04-17 1998-11-04 阿尔卡塔尔-阿尔斯托姆通用电气公司 管理共享内存的方法

Also Published As

Publication number Publication date
JP2003006231A (ja) 2003-01-10
CN1378157A (zh) 2002-11-06
JP3728264B2 (ja) 2005-12-21

Similar Documents

Publication Publication Date Title
US8620900B2 (en) Method for using dual indices to support query expansion, relevance/non-relevance models, blind/relevance feedback and an intelligent search interface
US6643640B1 (en) Method for performing a data query
US7047242B1 (en) Weighted term ranking for on-line query tool
US6493721B1 (en) Techniques for performing incremental data updates
EP2924594B1 (en) Data encoding and corresponding data structure in a column-store database
US6374241B1 (en) Data merging techniques
US6421683B1 (en) Method and product for performing data transfer in a computer system
US6408294B1 (en) Common term optimization
US6826559B1 (en) Hybrid category mapping for on-line query tool
US6484161B1 (en) Method and system for performing online data queries in a distributed computer system
US6496843B1 (en) Generic object for rapid integration of data changes
CN110134714B (zh) 适用于大数据迭代计算的分布式计算框架缓存索引方法
CN107103032B (zh) 一种分布式环境下避免全局排序的海量数据分页查询方法
WO2002039320A1 (en) Method for structuring and searching information
JP2003016089A (ja) 情報検索システム及びサーバ
WO2016209962A2 (en) Storage and retrieval of data from a bit vector search index
WO2016209964A1 (en) Bit vector search index using shards
CN115391495B (zh) 在中文语境中检索关键词的方法、装置及设备
US8275661B1 (en) Targeted banner advertisements
CN103186607A (zh) 分布式语音检索***
US20050065947A1 (en) Thesaurus maintaining system and method
CN1326073C (zh) 用于建立计算机文字信息的索引和进行检索的方法和***
CN101944086A (zh) 全字索引词典
CN116842076A (zh) 一种数据分析方法、装置、分析设备及可读存储介质
JPH09305622A (ja) 文書検索機能を有するデータベース管理方法およびシステム

Legal Events

Date Code Title Description
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C06 Publication
PB01 Publication
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20070711

Termination date: 20170402