一种建立倒排索引的方法及倒排索引装置的制作方法

文档序号:6584664阅读:97来源:国知局
专利名称:一种建立倒排索引的方法及倒排索引装置的制作方法
技术领域
本发明涉及数据信息索引技术,特别涉及一种建立倒排索引的方法及倒排索引装置。
背景技术
目前,数据搜索技术即搜索引擎技术已成为数据信息处理的一个热门技术,而索 引是数据搜索技术的最重要的组成部分,通过构建结构简单、有效、性能优良的索引,可以 帮助用户快捷地获取查询所需的信息,因而,索引的性能直接影响查询效率。目前数据搜索技术的索引一般采用倒排索引,常用的创建、查询方式包括二分法、 字典树(Trie树)法和哈希法,其中,二分法是将用于创建索引的词条按照一定的顺序排 列,例如,按照字典顺序或者汉字内码顺序有序排列,并存储词条对应的数据,然后根据用 户输入的搜索关键词,采用二分法从顺序排列中的词条中查找该搜索关键词对应的词条, 再根据查询得到的词条获取相应的数据,将数据信息向用户显示输出;Trie树法是将用于 创建索引的词汇表中的关键词以Trie树的形式组织起来,然后采用Trie树查找方式进行 查询;哈希法是将用于建立索引的词条散列成一个哈希值,将该哈希值作为词条的访问地 址,例如,根据词条首字构造二维数组,数组索引值根据词条首字的汉字编码确定,数组元 素值指向与索引值相对应的汉字为首字的哈希表,该哈希表用于存储首字相同的词条除去 首字后的后缀信息,根据词条后缀汉字编码,由哈希函数计算的哈希值确定词条在哈希表 中的位置,通过词条首字的汉字编码确定数组索引值,在数组中找到相应的数组元素,确定 该词条首字对应的哈希表,再根据词条后缀的汉字编码用哈希函数计算哈希值,确定该词 条在哈希表中的位置。上述二分法索引构建及查找、Trie树法索引构建及查找和哈希法索 引构建及查找的具体流程可参见相关技术文献,在此不再赘述。由上述可见,目前采用的二分法,由于需要对词条或词汇表按字典顺序排列,对于 插入的文档需要反复地调用排序算法和查找算法,索引合并时还需要通过堆排序等方法 合并多个有序的词汇表,造成构建的索引结构较为复杂、查找效率一般,查找时间复杂度 高;对于trie树法,由于索引的构建以词汇表中的关键词以Trie树的形式进行组织,在 词汇表较大时,所需的存储空间大、实现也较为复杂,其查找时间与关键词的长度相关,与 词汇表中关键词的个数无关,因而,在词汇表较大时,具有较大的速度优势,时间复杂度为 Log(词汇表长度),构建的索引查找效率一般好于二分查找,但词汇表较大时所需存储空 间大、实现复杂;而对于哈希法,由于采用数组和哈希表相结合的词库构造方法,哈希表和 词条都可以根据构成词条的首个汉字编码直接找到,索引构建简单、查找效率较高,但现有 的构建哈希法倒排索引及查找方式的哈希函数只能适用于中文索引及搜索,搜索范围小、 且哈希冲突的概率较高,针对首字计算哈希值进行查询,需要多次查询才能获取所需信息, 查询时间较长,从而使得构建的搜索引擎倒排索引可靠性较差,查询效率较低。

发明内容
有鉴于此,本发明的主要目的在于提出一种建立倒排索引的方法,扩大索引及搜 索范围、降低哈希冲突的概率、提高查询效率。本发明的另一目的在于提出一种建立倒排索引的装置,扩大索引及搜索范围、降 低哈希冲突的概率、提高查询效率。为达到上述目的,本发明提供了一种建立倒排索引的方法,该方法包括A、提取待建立倒排索引的文档的域名信息以及该域名包含的词条对应的数据信息;B、获取域名对应的汉字编码或ASC码,根据获取的GBK码或ASC码以及预先设定 的中英文哈希函数计算域名哈希值;C、查询哈希域表中是否存储有该域名哈希值,如果未存储有,执行步骤D,否则,执 行步骤E;D、将获取的该域名哈希值存储在哈希域表中,执行步骤E ;E、判断数据信息表中是否存储有提取的词条对应的数据信息,如果没有,将提取 的词条对应的数据信息存储在数据信息表中。所述预先设定的哈希函数为Hash (x) = H0 ;χ = 0(1)Hash (χ) = (w ο r d G B K [ χ ] [ 0 ] * k J w ο r d G B K [ χ ] [ 1 ] * k 丄 + χ 彡 1 (2)Hash (χ-1) *k2) Λ (Hash(x_l) << k3) Λ (Hash(x_l) >> k4);Hash(x) = (wordASC [x] ^ki+Hash (χ-1) *k2) Λ (Hash(x_l) << k3) ;χ 彡 1(3)Λ (Hash(x-l) >> k4)
χHash(X)^YjHash(X)(4)
χ=Ι式中,Λ为位“异或”运算符,<<为位“左移”运算符,>>为位“右移”运算符,χ 表示进行哈希运算的字符在字符串中的位置,字符串的长度为x(0 < χ < X);如果字符串对应的第χ个位置为中文,则使用公式⑵;如果字符串对应的第χ个位置为英文,则使用公式(3);wordGBK[x]
为字符串中第χ个中文字汉字编码中的GBK码的高位;wordGBK[x] [1]为字符串中第χ个中文字的GBK码的低位;wordASC [χ]为字符串中第χ个英文字母的ASC码;H0为设置的字符串的初始哈希值;Ic1为GBK码或ASC码系数,k2为第x_l个字符哈希值系数,k3、k4为移位运算符系数。所述H。= 166777619 ;^ = 1777 ;k2 = 311 ;k3 = 4 ;k4 =洲。倒排索引包括非指定域结构、和/或,指定域结构,域结构包括用于按照预先设定 的哈希函数对域信息中包含的域名进行哈希计算、存储计算得到的域名哈希值的哈希域 表,以及用于存放域名对应的数据或者对应数据的索引的数据信息表。所述域结构为非指定域结构,所述数据信息表包括用于存储词条哈希值的词条哈 希表,以及用于存储包含词条信息的域名以及该词条对应的数据信息的词条属性表。
所述步骤B之前进一步包括利用预先设置的哈希函数计算词条的哈希值,根据计算获取的词条哈希值查找词 条哈希表,如果词条哈希表中未存在该词条哈希值,将计算获取的词条哈希值存储至词条 哈希表中,将该词条对应的域名以及该词条对应的数据信息存储至词条属性表中,然后执 行步骤B,否则,直接执行步骤B。所述步骤A进一步包括判断提取的域名或词条是否需要进行分词处理,如果需 要,使用预先设置的中文分词程序进行分词。进一步包括如果词条哈希表中存储的词条哈希值与输入的词条哈希值相同,则 判断存储的词条哈希值对应的词条是否与输入的词条哈希值对应的词条相同,如果不相 同,则将输入的词条哈希值加一后再判断词条哈希表中是否存在相同的哈希值,如果不存 在,则存储输入的加一后的词条哈希值并修改原存储的词条哈希值。所述步骤E后进一步包括F11、利用预先设置的哈希函数计算用户输入的搜索关键词的哈希值;F12、查找词条哈希表中是否有与该搜索关键词的哈希值匹配的哈希值,如果没 有,执行步骤F13,如果有,执行步骤F14 ;F13、将该搜索关键词的哈希值加1,判断将该搜索关键词的哈希值加1的次数是 否超过预先设定的次数,如果否,返回执行步骤F12,如果是,结束流程;F14、将词条属性表中该搜索关键词对应的数据信息返回给用户。所述步骤Fl 1进一步包括判断用户输入的搜索关键词是否需要进行分词处理,如果需要,使用预先设置的 中文分词程序进行分词,获取分词处理的搜索关键词对应的GBK码或ASC码,根据获取的 GBK码或ASC码以及预先设置的哈希函数计算哈希值。所述域结构为指定域结构,所述数据信息表包括用于存储词条哈希值的词条哈希 表,以及用于存储域名下的所有词条对应的数据信息的哈希表的词条属性表。所述步骤E包括利用预先设置的哈希函数计算域名包含的词条的哈希值,根据计算获取的词条哈 希值查找词条哈希表,如果词条哈希表中未存在该词条哈希值,将该词条对应的数据信息 存储至词条属性表中,将该词条哈希值存储至词条哈希表中,否则,结束流程。所述词条属性表进一步用于存储词条所属文档标识、以及词条出现的频率信息。所述步骤E后进一步包括F21、利用预先设置的哈希函数计算用户输入的搜索关键词的哈希值;F22、查找哈希域表中是否存在该搜索关键词的哈希值,如果不存在,执行步骤 F23,如果存在,执行步骤F24 ;F23、将该搜索关键词的哈希值加1,判断将该搜索关键词的哈希值加1的次数是 否超过预先设定的次数,如果否,返回执行步骤F22,如果是,执行步骤F27 ;F24、查找词条哈希表中是否存在该搜索关键词的哈希值,如果不存在,执行步骤 F25,如果存在,执行步骤F26 ;F25、将该搜索关键词的哈希值加1,判断将该搜索关键词的哈希值加1的次数是 否超过预先设定的次数,如果否,返回执行步骤F24,如果是,执行步骤F27 ;
步骤F26,将词条属性表中该搜索关键词对应的数据信息返回给用户;步骤F27,返回搜索该搜索关键词失败信息。所述方法进一步包括根据用户输入的需要删除的域名,计算域名的哈希值,从指定域结构的哈希域表 中获取与该域名的哈希值相同的哈希值;返回该相同哈希值对应的所有词条;删除所有词条对应的数据信息;从非指定域结构的哈希词条表中查找所述返回的所有词条,从词条属性表中将所 述返回的所有词条对应的域名删除。所述方法进一步包括根据用户输入的需要删除的词条,获取词条对应的哈希值,从非指定域结构的哈 希词条表中获取匹配的哈希值;返回该词条对应的所有域名;删除该词条对应的所有域名中的数据信息;从指定域结构的哈希域表中查找所述返回的所有域名,从词条属性表中将所述返 回的所有域名对应的词条删除。一种倒排索引装置,该倒排索引系统包括域名及数据信息获取单元、域名编码单 元、哈希值计算单元、哈希域表单元以及数据信息表单元,其中,域名及数据信息获取单元,用于提取待建立倒排索引的文档的域名信息以及该域 名包含的词条对应的数据信息,将域名输出至域名编码单元,将数据信息输出至数据信息 表单元;域名编码单元,用于存储中文字符对应的汉字编码以及英文字符对应的ASC码, 根据接收的域名,查询并获取该域名对应的汉字编码或ASC码,输出至哈希值计算单元;哈希值计算单元,用于存储中英文哈希函数,根据域名编码单元输出的汉字编码 或ASC码、以及存储的哈希函数,计算哈希值,输出至哈希域表单元;哈希域表单元,用于接收哈希值计算单元输出的哈希值,更新存储的哈希值;数据信息表单元,用于接收域名及数据信息获取单元输出的数据信息,更新存储 的数据信息。所述哈希值计算单元存储的哈希函数为Hash (χ) = 166777619 ;χ = 0Hash (χ) = (wordGBK [χ]
* 1 777+wordGBK [χ] [ 1 ] * 1 777 + χ 彡 1 (5)Hash (χ-1) *311) Λ (Hash (χ-1) << 4) Λ (Hash (χ-1) >>28);Hash (χ) = (wordASC [χ] *1777+Hash (χ-1) 1) Λ (Hash (χ-1) << 4) ;χ 彡 1(6)Λ (Hash(x-l) >> 28)
χHash(X) = ^Hash(x)
χ=1式中,Λ为位“异或”运算符,<<为位“左移”运算符,>>为位“右移”运算符,χ 表示进行哈希运算的字符在字符串中的位置,字符串的长度为x(0 < χ < X);
如果字符串对应的第χ个位置为中文,则使用公式(5);如果字符串对应的第χ个位置为英文,则使用公式(6);wordGBK[x]
为字符串中第χ个中文字汉字编码中的GBK码的高位;wordGBK[x] [1]为字符串中第χ个中文字的GBK码的低位;wordASC[x]为字符串中第χ个英文字母的ASC码;Hash (χ) = 166777619为设置的字符串的初始哈希值。由上述的技术方案可见,本发明提供的一种建立倒排索引的方法及装置,A、提取 待建立倒排索引的文档的域名信息以及该域名包含的词条对应的数据信息;B、获取域名对 应的汉字编码或ASC码,根据获取的GBK码或ASC码以及预先设定的中英文哈希函数计算 域名哈希值;C、查询哈希域表中是否存储有该域名哈希值,如果未存储有,执行步骤D,否 则,执行步骤E ;D、将获取的该域名哈希值存储在哈希域表中,执行步骤E ;E、判断数据信息 表中是否存储有提取的词条对应的数据信息,如果没有,将提取的词条对应的数据信息存 储在数据信息表中。这样,中英文哈希函数可以适用于计算中英文的哈希值,扩大了索引及 搜索范围;以中英文哈希函数按照词条包含的字符串对应的编码进行哈希计算,哈希冲突 的概率小、匹配的精确度较高,从而减少了查询所需的时间,提高了查询时的搜索效率,从 而提高搜索引擎的整体性能。


图1为本发明倒排索引结构示意图。
图2为本发明实施例的非指定域结构示意图。
图3为本发明指定域名结构示意图。
图4为本发明实施例建立倒排索引的方法流程示意图。
图5为本发明实施例在非指定域结构中建立倒排索引的方法流程示意图。
图6为本发明实施例在指定域结构中建立倒排索引的方法流程示意图。
图7为本发明实施例在非指定域结构中进行搜索的流程示意图。
图8为本发明实施例在指定域结构中进行搜索的流程示意图。
图9为本发明实施例删除域名的流程示意图。
图10为本发明实施例删除词条的流程示意图。
图11为本发明实施例在非指定域结构中合并数据的流程示意图。
图12为本发明实施例在指定域结构中合并数据的流程示意图。
图13为本发明实施例倒排索引装置结构示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对 本发明作进一步地详细描述。现有以哈希法构建的倒排索引,涉及的哈希函数只能适用于中文索引、且数组索 引值根据词条首字的汉字编码计算哈希值确定,使得哈希冲突较多,哈希值分布不均勻,从 而使得构建的搜索引擎倒排索引可靠性较差,影响查询的准确性。本发明实施例中,考虑一个中文字的汉字编码,例如,汉字内码扩展规范(GBK,Chinese Internal Code Specification)码或GB2312码是唯一的,一个英文字母的ASC码 也是唯一的,如果以词条包含的所有中文字的汉字编码和英文字母的ASC码计算哈希值并 进行累加,则当用户输入搜索关键词时,索引通过哈希函数计算搜索关键词累加的哈希值, 而不是计算搜索关键词首字的哈希值,匹配的精确度较高,从而减少查询所需的时间,提高 查询时的搜索效率;同时,可以针对中英文进行查询,扩大了查询范围,方便了用户获取所 需的信息。实际应用中,由于将词条包含的所有中文字的汉字编码和英文字母的ASC码计算 哈希值并进行累加可能使不同词条计算得到的哈希值出现哈希冲突,本发明进一步考虑将 词条中包含的每个中文字的汉字编码以及每个英文字母的ASC码分别乘以一个较大的质 数,这样,就可以保障通过词条得到的哈希值的唯一性;同时,通过将哈希函数的初始化哈 希值初始化为一个较大的质数、以及通过对哈希值进行移位运算来保证词条对应的哈希值 的均勻性。基于上述分析,本发明提出的适合中英文的哈希函数参见式(1)至式G),该哈希 函数用于对一个字符串计算哈希值,所述的字符串包括中文文字、和/或,英文字母。Hash (x) = H0 ;χ = 0(1)Hash (χ) = (w ο r d G B K [ χ ] [ 0 ] * k J w ο r d G B K [ χ ] [ 1 ] * k 丄 + χ 彡 1 (2)Hash (χ-1) *k2) Λ (Hash(x_l) << k3) Λ (Hash(x-l) >> k4);Hash(x) = (wordASC [x] ^k^Hash (χ-1) *k2) Λ (Hash (χ-1) < < k3) ;x 彡 1 (3)Λ (Hash (X-I) >> k4)Hash(X) = YjHash(X)(4)
x=l式中,Λ为位“异或”运算符,<<为位“左移”运算符,>>为位“右移”运算符,X 表示进行哈希运算的字符在字符串中的位置,字符串的长度为X (0 < χ < X),一个中文汉字 为一个长度单位,一个英文字母也为一个长度单位。如果字符串对应的第χ个位置为中文,则使用公式(2);如果字符串对应的第χ个位置为英文,则使用公式(3)。wordGBK[x]
为字符串中第χ个中文字的GBK码的高位;wordGBK[x] [1]为字符串中第χ个中文字的GBK码的低位;wordASC [χ]为字符串中第χ个英文字母的ASC码;H0为设置的字符串的初始哈希值;Ic1为GBK码或ASC码系数,k2为第x_l个字符哈希值系数,k3、k4为移位运算符系 数。当然,实际应用中,也可以用中文字的GB2312码代替GBK码,较佳地,由于GBK码 包含的中文字字数比GB2312码包含的中文字字数要多,因而,本发明实施例哈希函数中使 用中文字的GBK码。较佳地,H0为大质数,例如,H0 = 166777619,或其他大质数;
Ic1为较大质数,例如,Ii1 = 1777,或其他较大质数;k2为质数,例如,k2 = 311,或其他质数;k3 = 4、k4 = 28,或其他整数。由式(4)可见,词条对应的字符串哈希值等于字符串中各字符的哈希值之和,经 测试,该哈希函数计算得到的哈希值中,平均15万个词条出现一次冲突,因而,本发明设计 的哈希函数是比较高效的;而且,由于本发明设计的哈希函数主要是位、加法、乘法运算,相 对现有哈希函数中的除法等运算方式更快,因而计算速度比较快。以下基于本发明提出的哈希函数,对本发明建立倒排索引的方法及系统从内存结 构和建立流程上进行描述。倒排索引是搜索引擎中很重要的一个组成部分,搜索引擎就是通过为多个文件建 立的倒排索引来反向查询搜索关键词所在的文件和文件中的位置,并将搜索结果进行整理 后展现给用户。实际应用中,一个或多个物理文件构成一个文档,每个文档包含多个属性,每个属 性称为一个域(field)。例如,由多篇文章(物理文件)构成的一本书,包括书名属性、出版 日期属性以及作者属性等,也就是说,一本书的域名包括书名、出版日期、作者等,并将域名 对应的数据进行存储,则构成本发明实施例的倒排索引,当用户输入搜索关键词时,通过搜 索关键词匹配域,然后将匹配的域对应的数据信息显示给用户。所应说明的是,在本发明提出哈希函数算法后,倒排索引结构以及根据哈希函数 建立倒排索引,与现有技术相类似,具体可参见相关技术文献,下面的描述中,对于相同的 部分不再赘述。图1为本发明倒排索引结构示意图,参见图1,该倒排索引用来存放所有域及域对 应的数据信息,包括哈希域(HashField)表以及数据信息(data)表,其中,HashField表用于存储按照域信息中包含的域名以及预先设定的哈希函数计算得 到的域名哈希值;data表用于存放域名对应的数据或者对应数据的索引。每个data与相应的HashField对应。本实施例中,域信息包括域名,同时,可以根据实际需要进行扩展,例如,还包括 域名对应数据的条数、是否分词、是否存储等内容。哈希值通过本发明提出的哈希函数根据域名计算得到。举例来说,HashField表包括域l(field 1) 域n,域1的域名为书名,则域1存 储有“书名”的哈希值,相应data表中的datal存储有多个文档的书名数据或书名数据索 引,例如,红楼梦、水浒、三国演义;域2的域名为出版日期,则域2存储有“出版日期”的哈 希值,相应data表中的data 2存储有多个文档的出版日期数据或出版日期数据索引,例
如,2000. 08. 08,2008. 09. 01,2009. 01. 01 ;......,以此类推,域η的域名为作者,则域η存
储有“作者”的哈希值,相应data表中的data η存储有多个文档的作者数据或作者数据索 弓丨,例如,曹雪芹、施耐庵、罗贯中。上述示例中,如果域名对应的数据信息较多,则data表包括数据索引,例如,对于 datal存储的红楼梦,如果还有有关红楼梦的介绍信息,则可以将该介绍信息存储在其它存 储区中,将datal存储的红楼梦作为指针,指向介绍信息存储的存储区位置。
针对用户进行查询的方式的不同,本发明实施例中,倒排索引结构可以分为非指 定域结构和指定域结构。非指定域结构用于查询所有域中包含所查搜索关键词的数据信 息,指定域结构用于对指定域的搜索关键词进行查询,从指定域中获取搜索关键词的数据 fn息ο图2为本发明实施例的非指定域结构示意图,参见图2,该非指定域结构包括 词条哈希表、词条属性表以及HashField表,词条哈希表和词条属性表组成data表, HashField表与图1的HashField表相同,其中,词条(word)哈希表,用于存储词条哈希值;词条属性(atts)表,用于存储包含词条信息的域名以及该词条对应的数据信息。一个域名包含多个词条,例如,对于“书名”域名,红楼梦、水浒、三国演义为域名包 含的词条。同前所述,哈希表中的哈希值是通过本发明设计的哈希函数计算得到的。实际应用中,如果词条哈希表中存储的词条哈希值与输入的词条哈希值相同,则 可以进一步判断存储的词条哈希值对应的词条是否与输入的词条哈希值对应的词条相同, 如果不相同,则将输入的词条哈希值加一后再判断是否存在相同的哈希值,如果不存在,则 存储输入的加一后的词条哈希值并修改原存储的词条哈希值以避免哈希冲突。图3为本发明指定域名结构示意图,参见图3,该指定域名结构包括=HashField 表、词条属性表以及词条哈希表,其中,HasMndex表与图1的HashField表相同,词条属性 表用来存放该域名下的所有词条对应的数据信息的哈希表,词条哈希表与图2的词条哈希 表相同。其中哈希值通过本发明设计的哈希函数计算得到。上面对本发明实施例倒排索引在内存中的结构进行了说明,下面对本发明实施例 倒排索引在磁盘上的结构进行描述。本实施倒排索引在磁盘上的结构包括域文件、域数据文件、倒排索引文件以及倒 排索引属性文件,其中,域文件,用于存放文档对象包含的域和对应的属性信息;域数据文件,用于存放文档域的对应数据或者数据的索引;索引文件,用于存放词条内容及其相关属性索引信息;索引属性文件,用于存放词条属性信息。图4为本发明实施例建立倒排索引的方法流程示意图,参见图4,该流程包括步骤401,提取待建立倒排索引的文档的域名(属性)信息以及该域名包含的词条 对应的数据信息;本步骤中,该文档对象文件包含多个域名,例如,书名域、出版日期域以及作者域。 域名可以是中文,也可以是英文,还可以是中英文混合。步骤402,获取域名对应的GBK码或ASC码,根据获取的GBK码或ASC码以及预先 设定的哈希函数计算域名哈希值;本步骤中,获取域名对应的GBK码或ASC码可以通过查询GBK码表或ASC码表得 到。预先设定的哈希函数为Hash (χ) = 166777619 ;χ = 0Hash(χ) = (wordGBK[x]
*1777+wordGBK[x][l]*1777+x 彡 1
Hash (x-1) *311) Λ (Hash (χ-1) << 4) Λ (Hash (χ-1) >>28);Hash (χ) = (wordASC [χ] *1777+Hash (χ-1) 1) Λ (Hash (χ-1) << 4) ;χ 彡 1Λ (Hash (χ-1) >> 28)
χHash(X) 二 ^Hashipc)
x=l步骤403,查询哈希域表中是否存储有该域名哈希值,如果未存储有,执行步骤 404,否则,执行步骤405 ;步骤404,将获取的该域名哈希值存储在哈希域表中,执行步骤406 ;步骤405,判断数据信息表中是否存储有提取的词条对应的数据信息,如果有,结 束本流程,否则,执行步骤406 ;步骤406,将提取的词条对应的数据信息存储在数据信息表中。本步骤中,存储在数据信息表中的词条对应的数据信息包括词条对应的数据或 者词条对应的数据索引。图5为本发明实施例在非指定域结构中建立倒排索引的方法流程示意图。参见图 5,该流程包括步骤501,从待建立倒排索引的文档中顺序获取文档域名包含的词条;本步骤中,从文档中顺序获取文档域名,例如,书名域、出版日期域、摘要域以及作 者域,并获取每个域名包含的词条,例如,书名域包含的词条为红楼梦;作者域包含的词条 为曹雪芹;出版日期域包含的词条为2005. 05. 06。实际应用中,根据建立倒排索引的实际需要,还可以进一步判断该词条是否需要 进行分词处理,如果需要,使用预先设置的中文分词程序进行分词,如果不需要,则对词条 不作处理。例如,对于出版日期域不需要进行分词处理,而对于书名域则需要进行分词处 理。中文分词程序属于现有技术,可从目前使用的分词程序选取较优秀的中文分词程序进 行判断并确定是否需要对词条分词。有关中文分词程序的描述,可参见相关技术文献,在此 不再赘述。步骤502,利用预先设置的哈希函数计算词条的哈希值,根据计算获取的词条哈希 值查找词条哈希表,如果词条哈希表中未存在该词条哈希值,执行步骤503,否则,执行步骤 504 ;本步骤中,预先设置的哈希函数为上述式(1) 式0)。如前所述,对于进行分词处理的词条,将计算分词后的词条中各分词词条的哈希 值,例如,对于词条我爱中国,经过分词处理为为“我爱”和“中国,,两个分词词条,则根据哈 希函数分别计算两个分词词条哈希值。步骤503,将计算获取的词条哈希值存储至词条哈希表中,将该词条对应的域名以 及该词条对应的数据信息存储至词条属性表中;本步骤中,因为一个词条可能会包含于很多域名中,例如,词条红楼梦可能在书名 域中出现,也可能在摘要域中出现,这里使用哈希表存储。实际应用中,考虑到对词条属性表的扩展,词条属性表可以进一步存储该词条所 属文档标识等属性信息、以及词条出现的频率等信息。步骤504,利用预先设置的哈希函数计算域名的哈希值,查找哈希域表中是否存储有该域名哈希值,如果未存储有,则将该域名哈希值存储至该词条对应的哈希域表中,如果 存储有,结束流程。至此,在非指定域结构中建立倒排索引的流程结束。实际应用中,如前所述,建立的倒排索引中,可能存在哈希冲突,针对该非指定域 结构,本发明实施例中,哈希词条表采用再哈希的方式,也就是说,如果发生哈希冲突,将当 前计算得到的哈希值加1组成一个新的哈希值后再进行重试,直到找到无冲突的哈希值为 止,经实验验证,本发明实施例的解决哈希词条表哈希冲突的再哈希的次数最多为3次。而 对于哈希属性表,采用链表的方式来处理哈希冲突,关于采用链表的方式来处理哈希冲突 的技术,属于现有技术,具体可参见相关技术文献,在此不再赘述。图6为本发明实施例在指定域结构中建立倒排索引的方法流程示意图。参见图6, 该流程包括步骤601,从待建立倒排索引的文档中顺序获取文档域名;本步骤中,从文档中顺序获取文档域名,判断域名是否需要进行分词处理,如果需 要,使用预先设置的中文分词程序进行分词,如果不需要,则对域名不作处理。步骤602,利用预先设置的哈希函数计算域名的哈希值,根据计算获取的域名哈 希值查找哈希域表,如果哈希域表中未存在该域名哈希值,执行步骤603,否则,执行步骤 604 ;步骤603,将该域名哈希值存储至哈希域表中;步骤604,利用预先设置的哈希函数计算域名包含的词条的哈希值,根据计算获取 的词条哈希值查找词条哈希表,如果词条哈希表中未存在该词条哈希值,执行步骤605,否 则,结束该流程;步骤605,将该词条对应的数据信息存储至词条属性表中,将该词条哈希值存储至 词条哈希表中。实际应用中,考虑到对词条属性表的扩展,词条属性表可以进一步存储该词条所 属文档标识等属性信息、以及词条出现的频率等信息。本发明实施例中,可以使用java中的Hashmap类,利用本发明设计的哈希函数重 写hashcodeO方法和equals ()方法来复用Hashmap类,以实现高效的哈希查找。关于利 用哈希函数重写hashcodeO方法和equalsO方法来复用Hashmap类的技术,属于现有技 术,具体可参见相关技术文献,在此不再赘述。对于可能存在的哈希冲突,本发明实施例中,对于指定域结构包括两种哈希表,都 采用再哈希的方式来处理哈希冲突,也就是说,如果发生哈希冲突,将当前计算得到的哈希 值加1组成一个新的哈希值后再进行重试,直到找到无冲突的哈希值为止,经实验验证,解 决哈希冲突的再哈希的次数最多为3次。在建立本发明实施例的倒排索引后,就可以利用该建立的倒排索引进行相关搜 索,相应地,根据倒排索引在内存中的结构不同而分为两种搜索方案,下面进行说明。图7为本发明实施例在非指定域结构中进行搜索的流程示意图。参见图7,该流程 包括步骤701,利用预先设置的哈希函数计算用户输入的搜索关键词的哈希值;本步骤中,用户可以选择在非指定域结构中进行搜索还是在指定域结构中进行搜索。用户输入搜索关键词,搜索引擎判断是否需要进行分词处理,如果需要,使用预先 设置的中文分词程序进行分词,如果不需要,则对搜索关键词不作处理。获取分词处理的搜 索关键词对应的GBK码或ASC码,根据获取的GBK码或ASC码以及预先设置的哈希函数计 算哈希值。步骤702,查找词条哈希表中是否有与该搜索关键词的哈希值匹配的哈希值,如果 没有,执行步骤703,如果有,执行步骤704 ;步骤703,将该搜索关键词的哈希值加1,判断将该搜索关键词的哈希值加1的次 数是否超过预先设定的次数,如果否,返回执行步骤702,如果是,执行步骤705 ;本步骤中,预先设定的次数为三次,当然,也可以根据实际需要进行设置,例如,设 置为两次或四次。步骤704,将词条属性表中该搜索关键词对应的数据信息返回给用户;步骤705,搜索该搜索关键词失败。图8为本发明实施例在指定域结构中进行搜索的流程示意图。参见图8,该流程包 括步骤801,利用预先设置的哈希函数计算用户输入的搜索关键词的哈希值;本步骤中,用户选择在指定域结构中进行搜索。步骤802,查找哈希域表中是否存在该搜索关键词的哈希值,如果不存在,执行步 骤803,如果存在,执行步骤804 ;步骤803,将该搜索关键词的哈希值加1,判断将该搜索关键词的哈希值加1的次 数是否超过预先设定的次数,如果否,返回执行步骤802,如果是,执行步骤807 ;步骤804,查找词条哈希表中是否存在该搜索关键词的哈希值,如果不存在,执行 步骤805,如果存在,执行步骤806 ;步骤805,将该搜索关键词的哈希值加1,判断将该搜索关键词的哈希值加1的次 数是否超过预先设定的次数,如果否,返回执行步骤804,如果是,执行步骤807 ;步骤806,将词条属性表中该搜索关键词对应的数据信息返回给用户;步骤807,搜索该搜索关键词失败。实际应用中,还可以对倒排索引进行删除、更新及合并的操作。本实施例中,对于删除操作,以删除域名和词条为例进行说明。图9为本发明实施例删除域名的流程示意图。参见图9,该流程包括步骤901,根据获取的域名,计算域名的哈希值,从指定域结构的哈希域表中获取 与该域名的哈希值相同的哈希值;步骤902,返回该相同哈希值对应的所有词条;步骤903,删除词条对应的数据信息;步骤904,从非指定域结构的哈希词条表中查找所述返回的所有词条,从词条属性 表中将所述返回的所有词条对应的域名删除。图10为本发明实施例删除词条的流程示意图。参见图10,该流程包括步骤1001,根据获取的词条对应的哈希值从非指定域结构的哈希词条表中获取匹 配的哈希值;
步骤1002,返回该词条对应的所有域名;步骤1003,删除该词条对应的所有域名中的数据信息;步骤1004,从指定域结构的哈希域表中查找所述返回的所有域名,从词条属性表 中将所述返回的所有域名对应的词条删除。对倒排索引进行更新的流程包括增加对象和修改对象的属性操作,通过查找得到 要更新的项之后,对该对象进行对应的操作即可,由于操作比较简单,具体可参见相关技术 文献,这里不再详细描述。对索引进行合并,指的是内存结构中的合并,以要合并的两个数据内容为数据内 容1和数据内容2,将数据内容2的合并到数据内容1上为例进行说明。图11为本发明实施例在非指定域结构中合并数据的流程示意图。参见图11,该流 程包括步骤1101,以数据内容2中包含的词条作为查询条件到数据内容1上进行查询;步骤1102,如果查询到该数据内容2上的词条,则更新对应信息,如果未查询到, 则增加一个该数据内容2上的词条项。图12为本发明实施例在指定域结构中合并数据的流程示意图。参见图12,该流程 包括步骤1201,以数据内容2中包含的域名作为查询条件到数据内容1上查询;步骤1201,如果查询到该数据内容2上的域名,则更新对应信息,如果未查询到, 则增加一个该数据内容2上的域项。下面对本发明实施例倒排索弓丨系统进行说明。图13为本发明实施例倒排索引装置结构示意图,参见图13,该倒排索引装置包 括域名及数据信息获取单元、域名编码单元、哈希值计算单元、哈希域表单元以及数据信 息表单元,其中,域名及数据信息获取单元,用于提取待建立倒排索引的文档的域名信息以及该域 名包含的词条对应的数据信息,将域名输出至域名编码单元,将数据信息输出至数据信息 表单元;域名编码单元,用于存储中文字符对应的汉字编码以及英文字符对应的ASC码, 根据接收的域名,查询并获取该域名对应的汉字编码或ASC码,输出至哈希值计算单元;汉字编码包括GBK码以及GB2312码。哈希值计算单元,用于存储哈希函数,根据域名编码单元输出的汉字编码或ASC 码、以及存储的哈希函数,计算哈希值,输出至哈希域表单元;该哈希函数为Hash (χ) = 166777619 ;χ = 0Hash(χ) = (wordGBK[x]
*1777+wordGBK[x][l]*1777+x 彡 1Hash (x-1) *311) Λ (Hash (χ-l) << 4) Λ (Hash (χ-1) >>28);Hash (χ) = (wordASC [χ] *1777+Hash (x_l) *311) Λ (Hash (χ-1) << 4) ;χ 彡 1Λ (Hash (χ-1) >> 28)
χHash{X) = YjHashix)
输出至哈希域表单元的哈希值为域名中每个字符对应的哈希值的累加值。哈希域表单元,用于接收哈希值计算单元输出的哈希值,更新存储的哈希值;本实施例中,将接收的哈希值与预先存储的哈希值进行匹配,如果未能匹配上,将 接收的哈希值存储在哈希域表单元中,如果匹配上,则不作处理。数据信息表单元,用于接收域名及数据信息获取单元输出的数据信息,更新存储 的数据信息。本实施例中,将接收的数据信息与预先存储的数据信息进行匹配,如果未能匹配 上,将接收的数据信息存储在数据信息表单元中,如果匹配上,则不作处理。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在 本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保 护范围之内。
权利要求
1.一种建立倒排索引的方法,其特征在于,该方法包括A、提取待建立倒排索引的文档的域名信息以及该域名包含的词条对应的数据信息;B、获取域名对应的汉字编码或ASC码,根据获取的GBK码或ASC码以及预先设定的中 英文哈希函数计算域名哈希值;C、查询哈希域表中是否存储有该域名哈希值,如果未存储有,执行步骤D,否则,执行步 骤E;D、将获取的该域名哈希值存储在哈希域表中,执行步骤E;E、判断数据信息表中是否存储有提取的词条对应的数据信息,如果没有,将提取的词 条对应的数据信息存储在数据信息表中。
2.如权利要求1所述的方法,其特征在于,所述预先设定的哈希函数为
3.如权利要求2所述的方法,其特征在于,所述Htl= 166777619 = 1777 ;k2 = 311 ; k3 = 4 ;k4 = 28。
4.如权利要求3所述的方法,其特征在于,倒排索引包括非指定域结构、和/或,指定域 结构,域结构包括用于按照预先设定的哈希函数对域信息中包含的域名进行哈希计算、存 储计算得到的域名哈希值的哈希域表,以及用于存放域名对应的数据或者对应数据的索引 的数据信息表。
5.如权利要求4所述的方法,其特征在于,所述域结构为非指定域结构,所述数据信息 表包括用于存储词条哈希值的词条哈希表,以及用于存储包含词条信息的域名以及该词条 对应的数据信息的词条属性表。
6.如权利要求5所述的方法,其特征在于,所述步骤B之前进一步包括利用预先设置的哈希函数计算词条的哈希值,根据计算获取的词条哈希值查找词条哈希表,如果词条哈希表中未存在该词条哈希值,将计算获取的词条哈希值存储至词条哈希 表中,将该词条对应的域名以及该词条对应的数据信息存储至词条属性表中,然后执行步 骤B,否则,直接执行步骤B。
7.如权利要求6所述的方法,其特征在于,所述步骤A进一步包括判断提取的域名或 词条是否需要进行分词处理,如果需要,使用预先设置的中文分词程序进行分词。
8.如权利要求6所述的方法,其特征在于,进一步包括如果词条哈希表中存储的词条 哈希值与输入的词条哈希值相同,则判断存储的词条哈希值对应的词条是否与输入的词条 哈希值对应的词条相同,如果不相同,则将输入的词条哈希值加一后再判断词条哈希表中 是否存在相同的哈希值,如果不存在,则存储输入的加一后的词条哈希值并修改原存储的 词条哈希值。
9.如权利要求8所述的方法,其特征在于,所述步骤E后进一步包括F11、利用预先设置的哈希函数计算用户输入的搜索关键词的哈希值;F12、查找词条哈希表中是否有与该搜索关键词的哈希值匹配的哈希值,如果没有,执 行步骤F13,如果有,执行步骤F14 ;F13、将该搜索关键词的哈希值加1,判断将该搜索关键词的哈希值加1的次数是否超 过预先设定的次数,如果否,返回执行步骤F12,如果是,结束流程;F14、将词条属性表中该搜索关键词对应的数据信息返回给用户。
10.如权利要求9所述的方法,其特征在于,所述步骤Fll进一步包括判断用户输入的搜索关键词是否需要进行分词处理,如果需要,使用预先设置的中文 分词程序进行分词,获取分词处理的搜索关键词对应的GBK码或ASC码,根据获取的GBK码 或ASC码以及预先设置的哈希函数计算哈希值。
11.如权利要求4所述的方法,其特征在于,所述域结构为指定域结构,所述数据信息 表包括用于存储词条哈希值的词条哈希表,以及用于存储域名下的所有词条对应的数据信 息的哈希表的词条属性表。
12.如权利要求11所述的方法,其特征在于,所述步骤E包括利用预先设置的哈希函数计算域名包含的词条的哈希值,根据计算获取的词条哈希值 查找词条哈希表,如果词条哈希表中未存在该词条哈希值,将该词条对应的数据信息存储 至词条属性表中,将该词条哈希值存储至词条哈希表中,否则,结束流程。
13.如权利要求12所述的方法,其特征在于,所述词条属性表进一步用于存储词条所 属文档标识、以及词条出现的频率信息。
14.如权利要求12所述的方法,其特征在于,所述步骤E后进一步包括F21、利用预先设置的哈希函数计算用户输入的搜索关键词的哈希值;F22、查找哈希域表中是否存在该搜索关键词的哈希值,如果不存在,执行步骤F23,如 果存在,执行步骤F24;F23、将该搜索关键词的哈希值加1,判断将该搜索关键词的哈希值加1的次数是否超 过预先设定的次数,如果否,返回执行步骤F22,如果是,执行步骤F27 ;F24、查找词条哈希表中是否存在该搜索关键词的哈希值,如果不存在,执行步骤F25, 如果存在,执行步骤F26;F25、将该搜索关键词的哈希值加1,判断将该搜索关键词的哈希值加1的次数是否超过预先设定的次数,如果否,返回执行步骤F24,如果是,执行步骤F27 ; 步骤F26,将词条属性表中该搜索关键词对应的数据信息返回给用户; 步骤F27,返回搜索该搜索关键词失败信息。
15.如权利要求4所述的方法,其特征在于,所述方法进一步包括根据用户输入的需要删除的域名,计算域名的哈希值,从指定域结构的哈希域表中获 取与该域名的哈希值相同的哈希值; 返回该相同哈希值对应的所有词条; 删除所有词条对应的数据信息;从非指定域结构的哈希词条表中查找所述返回的所有词条,从词条属性表中将所述返 回的所有词条对应的域名删除。
16.如权利要求4所述的方法,其特征在于,所述方法进一步包括根据用户输入的需要删除的词条,获取词条对应的哈希值,从非指定域结构的哈希词 条表中获取匹配的哈希值;返回该词条对应的所有域名;删除该词条对应的所有域名中的数据信息;从指定域结构的哈希域表中查找所述返回的所有域名,从词条属性表中将所述返回的 所有域名对应的词条删除。
17.一种倒排索引装置,其特征在于,该倒排索引系统包括域名及数据信息获取单 元、域名编码单元、哈希值计算单元、哈希域表单元以及数据信息表单元,其中,域名及数据信息获取单元,用于提取待建立倒排索引的文档的域名信息以及该域名包 含的词条对应的数据信息,将域名输出至域名编码单元,将数据信息输出至数据信息表单 元;域名编码单元,用于存储中文字符对应的汉字编码以及英文字符对应的ASC码,根据 接收的域名,查询并获取该域名对应的汉字编码或ASC码,输出至哈希值计算单元;哈希值计算单元,用于存储中英文哈希函数,根据域名编码单元输出的汉字编码或ASC 码、以及存储的哈希函数,计算哈希值,输出至哈希域表单元;哈希域表单元,用于接收哈希值计算单元输出的哈希值,更新存储的哈希值; 数据信息表单元,用于接收域名及数据信息获取单元输出的数据信息,更新存储的数 据信息。
18.如权利要求17所述的倒排索引装置,其特征在于,所述哈希值计算单元存储的哈 希函数为Hash (χ) = 166777619 ;χ = 0Hash(χ) = (wordGBK[χ]
*1777+wordGBK[χ][1]*1777+χ 彡 1(5)Hash (χ-1) *311) Λ (Hash (χ-1) << 4) Λ (Hash (χ-1) >>28);Hash (χ) = (wordASC[x]*1777+Hash(x-l)*311) Λ (Hash (χ-1) < < 4) ;χ 彡 1(6)Λ (Hash(χ-1) >> 28)
全文摘要
本发明公开了一种建立倒排索引的方法。A、提取待建立倒排索引的文档的域名信息以及该域名包含的词条对应的数据信息;B、获取域名对应的汉字编码或ASC码,根据获取的GBK码或ASC码以及预先设定的中英文哈希函数计算域名哈希值;C、查询哈希域表中是否存储有该域名哈希值,如果未存储有,执行步骤D,否则,执行步骤E;D、将获取的该域名哈希值存储在哈希域表中,执行步骤E;E、判断数据信息表中是否存储有提取的词条对应的数据信息,如果没有,将提取的词条对应的数据信息存储在数据信息表中。本发明还公开了一种倒排索引装置。应用本发明,能够扩大索引及搜索范围、降低哈希冲突的概率、提高查询效率。
文档编号G06F17/30GK102063446SQ20091023767
公开日2011年5月18日 申请日期2009年11月13日 优先权日2009年11月13日
发明者方亮, 景亚光, 王全礼, 肖巍, 邱爽 申请人:中国移动通信集团四川有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1