一种搜索方法和装置的制作方法

xiaoxiao2020-7-23  4

专利名称:一种搜索方法和装置的制作方法
技术领域
本发明涉及数据业务技术领域,尤其涉及一种搜索方法和装置。
背景技术
现有的搜索引擎一般都是单方面基于文本相似度进行排序,索引的存储一般是基于键值对〈KEY,DocList>的形式。其中,KEY表示关键字,DocList表示包含关键字KEY的文档列表。DocList中的每个元素是一个文档对象,用于存放一个文档的基本信息,例如:该文档的ID、该关键字KEY在该文档中出现的次数以及出现的位置等信息。当用户输入一个关键字之后,将先根据该关键字进行检索;当检索到相对应的关键字后,再整体计算与该关键字相对应的DocList中所有文档在此关键字下的得分;然后,依据上述得分对所有的搜索结果整体进行排序,再在排序后的搜索结果中读取用户所需条数的搜索结果,将读取的搜索结果返回给用户。例如,现有技术中存在一种综合搜索结果的排序方法,在该方法中,将采用排序算法计算垂直搜索引擎的综合值,并根据综合直对该垂直搜索引擎进行排序,汇总所有垂直搜索引擎排序结果,生成最终的搜索结果。但是,上述排序方法是将搜索结果得分的计算过程放在搜索过程中进行,且每次都是进行全量排序,从而对CPU和内存资源的占用量较大,搜索复杂度较高,搜索速度较慢,且没有考虑信息的附加价值属性,因而无法保证价值高的信息排序一定靠前。同时,由于该方法中需要存储得分计算依据的因子以及综合得分计算因子,从而对存储空间也有较高的要求。此外,现有技术中还存在一种基于搜索引擎的搜索结果排序方法。在该方法中,主要是根据事先配置的网络资源权重,同时根据用户输入的关键字在资源中的文本权重,综合计算每条相关资源得分,然后进行全量排序,以生成搜索结果。但是,在该方法中,虽然考虑到信息的附加价值属性,但是在搜索过程中需要计算各文档得分,同时还需要对搜索的结果进行全量排序,从而对CPU和内存资源的占用量也较大,搜索复杂度也较高,搜索速度也较慢。同时,由于该方法中也需要存储得分计算依据的因子以及综合得分计算因子,从而对存储空间也有较高的要求综上可知,在现有技术中的搜索方法中,由于文档得分的计算和排序都是放在搜索过程中完成,且是针对全量进行排序;而且,索引组织的结构也没有考虑用户的搜索习惯,造成存储的信息量较大;另外,每次搜索均需针对全量进行,从而大大增加了内存和CPU等系统稀缺资源的负担。同时,现有技术中的搜索方法的搜索复杂度一般都较高,搜索响应速度也较慢。此外,现有技术中的搜索方法中进行排序的依据是文本相关度,而并未考虑能表达信息价值的关键属性,因此导致排序方式单一、用户友好性不足等问题。

发明内容
有鉴于此,本发明提供了一种搜索方法和装置,从而可提高搜索速度,降低系统资源的占用。本发明采用的技术方案具体是这样实现的:一种搜索方法,该方法包括:A、为同一类文档设置至少一个关键属性及相应的关键属性权重,并根据所述关键属性和关键属性权重计算各个文档的关键属性分值KFScore ; B、将全部待检索文档以词源Term为关键字进行索引,建立以Term为关键字索引、以包含该Term的文档的总数TotalCount和包含该Term的文档列表DocList为值的索引倒排表;所述文档列表中的每条记录中均包括一个文档的文档编号和关键属性分值;所述文档列表由有序列表和无序列表组成,所述有序列表中包括η个关键属性分值最大、且按关键属性分值从大到小顺序排列的记录;其中,所述η为预先确定的值;C、根据用户输入的检索字符串生成相应的词源,根据所生成的词源对所述索引倒排表进行检索,并根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果和相关结果总数。本发明中还提供了一种搜索装置,该搜索装置包括:倒排表生成模块、存储模块、词源生成模块和检索模块;所述倒排表生成模块,用于将全部待检索文档以词源Term为关键字进行索引,建立以Term为关键字索引、以包含该Term的文档的总数TotalCount和包含该Term的文档列表DocList为值的索引倒排表;所述文档列表中的每条记录中均包括一个文档的文档编号和关键属性分值;所述文档列表由有序列表和无序列表组成,所述有序列表中包括η个关键属性分值最大、且按关键属性分值从大到小顺序排列的记录;其中,所述η为预先确定的值;将所述索引倒排表发送给存储模块;所述存储模块,用于存储所述索引倒排表;所述词源生成模块,用于根据用户输入的检索字符串生成相应的词源;将所述词源以及用户输入的搜索结果范围发送给检索模块;所述检索模块,用于根据所生成的词源对存储模块中存储的索引倒排表进行检索,并根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果和相关结果总数;将所述搜索结果和相关结果总数发送给用户。由上述技术方案可见,本发明中由于为文档设置了关键属性和关键属性权重,因此可计算各个文档的KFScore,并根据各个文档的KFScore建立一个索引倒排表,使得该索引倒排表中的文档列表由有序列表和无序列表组成。当用户输入的检索字符串时,可生成相应的词源,并根据所生成的词源对索引倒排表进行检索,根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果和相关结果总数,从而可在保证搜索结果的相关性(即有效性)的前提下,多方面衡量各种信息的价值,以使得有价值的信息的排名靠前,因而可大大提高搜索速度,提高搜索引擎的搜索响应时间;同时,还可降低CPU和内存等系统资源的占用,从而节约了大量的硬、软件资源。


图1是本发明中的搜索方法的流程图。图2为本发明中文档的信息结构图。
图3为本发明中索引倒排表的结构示意图。图4为本发明中单Term搜索方法的流程图。图5为本发明具体实例中的索引倒排表的结构示意图。图6为本发明中多Term搜索方法的流程图。图7为本发明中多层搜索方法的流程图。图8为本发明中步骤702的一种实现方法的流程图。图9为本发明中的搜索装置的结构示意图。
具体实施例方式为使本发明的目的、技术方案和优点表达得更加清楚明白,下面结合附图及具体实施例对本发明再作进一步详细的说明。图1是本发明中的搜索方法·的流程图。如图1所示,该方法包括:步骤101,为同一类文档设置至少一个关键属性(KeyField)并预先设置各个关键属性的关键属性权重。在数据业务领域中,可将描述一个事物的信息集合称之为一个文档(Document)。图2为本发明中文档的信息结构图。如图2所示,在本发明的技术方案中,每个文档中都包括多个词源(Term)和多个属性(Field);其中,所述属性可以由一个或多个Term组成。例如,一个文档中可以包括“标题”、“内容”等属性,其中的“标题”属性可以由一个或多个Term组成。再例如,图2中的属性I由N个词源组成,属性J由M个词源组成等。另外,在本发明的技术方案中,还将为每个文档设置一个或多个用于标识该文档的重要信息的关键属性,且同一类文档具有相同的关键属性。如下的表I为本发明中关键属性的示例说明。
权利要求
1.一种搜索方法,其特征在于,该方法包括: A、为同一类文档设置至少一个关键属性及相应的关键属性权重,并根据所述关键属性和关键属性权重计算各个文档的关键属性分值KFScore ; B、将全部待检索文档以词源Term为关键字进行索引,建立以Term为关键字索引、以包含该Term的文档的总数TotalCount和包含该Term的文档列表DocList为值的索引倒排表;所述文档列表中的每条记录中均包括一个文档的文档编号和关键属性分值;所述文档列表由有序列表和无序列表组成,所述有序列表中包括η个关键属性分值最大、且按关键属性分值从大到小顺序排列的记录;其中,所述η为预先确定的值; C、根据用户输入的检索字符串生成相应的词源,根据所生成的词源对所述索引倒排表进行检索,并根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果和相关结果总数。
2.根据权利要求1所述的方法,其特征在于,计算文档的KFScore的公式为:KFScore = KeyFieId^W^KeyFieICi2^W2+......+KeyFieldx^Wx ; 其中,W1+W2+......+Wx = I ;所述KeyFieldx表示所述文档第X个KeyField的取值,所述Wx表示与所述文档第X个KeyField相对应的Weight的取值。
3.根据权利要求1所述的方法,其特征在于, 所述搜索结果范围包括:起始位置InitialPositon和条数Count ; 所述搜索结果范围的最大值为:(InitialPositon+Count)-l。
4.根据权利要求3所述的方法,其特征在于,所述据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果包括: 当所述搜索结果范围的最大值小于或等于所生成的词源对应的有序列表的长度η时,从所述有序列表中的第InitialPositon条记录开始,读取Count条记录作为搜索结果;当所述搜索结果范围的起始位置位于所生成的词源对应的有序列表中,且所述搜索结果范围的最大值大于所述有序列表的长度η时,从所述有序列表中的第InitialPositon条记录开始,读取(n-1nitialPositon+Ι)条记录;将所生成的词源对应的无序列表中的记录按KFScore的大小顺序排列,并从所述无序列表中的第I条记录开始,读取[Count- (n-1nitialPositon+1)]条记录;将所读取的Count条记录作为搜索结果; 当所述搜索结果范围的起始位置位于所生成的词源对应的无序列表中时,将所述无序列表中的记录按KFScore的大小顺序排列,然后从排序后的无序列表中的第(InitialPositon-n)条记录开始,读取Count条记录作为搜索结果。
5.根据权利要求3所述的方法,其特征在于,步骤C中还进一步包括: 当所述索引倒排表中未存储根据用户输入的检索字符串所生成的词源时,将空集作为搜索结果。
6.根据权利要求1所述的方法,其特征在于,所述步骤C包括: Cl、根据用户输 入的检索字符串生成一个相应的词源; c2、根据所生成的词源检索索引倒排表,判断所述索引倒排表中是否存储有该词源;如果是,则执行步骤c3 ;否则,执行步骤cl5 ; c3、从所述索引倒排表中读取与所述词源相对应的文档列表; c4、对用户输入的搜索结果范围进行解析,获得起始位置InitialPositon和条数Count ; c5、判断(InitialPositon+Count)-l > n是否成立,如果是,则执行步骤c6 ;否则,执行步骤cl2 ;其中,所述η为有序列表的长度; c6、判断InitialPositon > η是否成立,如果是,则执行步骤clO ;否则,执行步骤c7 ;c7、从有序列表中的第InitialPositon条记录开始,读取(n-1nitialPositon+Ι)条记录加入到搜索结果列表ResultList中; c8、将所述无序列表中的记录按KFScore的大小顺序排列; c9、从所述无序列表中读取[Count- (n-1nitialPositon+1)]条记录加入到ResultList中,执行步骤cl3 ; clO、将所述无序列表中的记录按KFScore的大小顺序排列; ell、从排序后的无序列表中的第(InitialPositon-n)条记录开始,读取Count条记录加入到ResultList中,执行步骤cl3 ; cl2、从有序列表中的第InitialPositon条记录开始,读取Count条记录加入到ResultList中,执行步骤cl3 ; cl3、将所述ResultList作为搜 索结果,并将从所述索引倒排表中读取的与所述词源相对应的文档列表的文档总数TotalCount作为相关结果总数;cl4、将所述搜索结果和相关结果总数返回给用户。结束流程;cl5、将空集作为搜索结果,设相关结果总数等于O,将所述空集和相关结果总数返回给用户,结束流程。
7.根据权利要求1所述的方法,其特征在于,所述步骤C包括: Cl、在索引倒排表的文档列表中设置Y段读取范围;其中,Y > 2 ; C2、根据用户输入的检索字符串生成一个词源队列TermArray和查询逻辑序列SetOperators ; C3、对用户输入的搜索结果范围进行解析,获得起始位置InitialPositon和条数Count ; C4、当TermArray的长度大于I时,读取TermArray中的前两个词源,并设置初始值为2的变量i和初始值为I的变量j ; C5、根据所读取的两个词源分别检索索引倒排表,从所述索引倒排表中分别读取与所述两个词源相对应的文档列表中第j段读取范围内的记录,将所读取的记录分别存储于第一检索结果列表ResultListl和第二检索结果列表ResultList2中; C6、读取SetOperators中的第(1-Ι)个逻辑符号; C7、判断所读取的逻辑符号的取值;当所述逻辑符号的取值为AND时,执行步骤CS ;当所述逻辑符号的取值为OR时,执行步骤C9 ;当所述逻辑符号的取值为SUB时,执行步骤ClO ; C8、使用与逻辑合并ResultListl和ResultList2,合并结果加入到搜索结果列表ResultList中;执行步骤Cll ; C9、使用或逻辑合并ResultListl和ResultList2,合并结果加入到ResultList中;执行步骤Cll ; C10、使用差逻辑合并ResultListl和ResultList2,合并结果加入到ResultList中;执行步骤Cll ; CU、判断TermArray中是否还有词源未使用;如果是,则执行步骤C12 ;否则,执行步骤C13 ; C12、设 i = i+1,读取 TermArray 中的第 i 个词源;清空 ResultListl 和 ResultList2,并将ResultList中的记录复制到ResultList2中;根据所读取的词源检索所述索引倒排表,从所述索引倒排表中读取与所读取的词源相对应的文档列表中第j段读取范围内的记录,将所读取的记录存储于ResultListl中;返回执行步骤C6 ; C13、判断是否满足结束条件;如果是,则执行步骤C16 ;否则,执行步骤C14 ; C14、清空ResultListl和ResultList2 ;读取TermArray中的前两个词源,并设置i = 2且j = j+1 ;根据上述所读取的两个词源分别检索索引倒排表,从所述索引倒排表中分别读取与所述两个词源相对应的文档列表中第j段读取范围内的记录,分别存储于ResultListl 和 ResultList2 中; C15、分别将所述ResultListl和ResultList2中的记录按KFScore的大小顺序排列;返回执行步骤C6; C16、将总检索结果集合中所存储的记录的数目作为相关结果总数; C17、向用户返回搜索结果和相关结果总数。
8.根据权利要求7所述的方法,其特征在于, 当Y = 2时,将文档列表的有序列表作为第I段读取范围,将整个文档列表作为第2段读取范围。
9.根据权利要求7所述的方法,其特征在于, 当Y = 3时,将文档列表的有序列表作为第I段读取范围,将文档列表的无序列表作为第2段读取范围,将整个文档列表作为第3段读取范围。
10.根据权利要求7所述的方法,其特征在于,步骤C5中还进一步包括: 如果索引倒排表中未存储所述两个词源中的任意一个词源,则将未存储的词源所对应的检索结果列表设置为空集。
11.根据权利要求7所述的方法,其特征在于,所述使用与逻辑合并ResultListl和ResultList2,并将合并结果加入到ResultList中包括: 逐一比较ResultListl和ResultList2中的各条记录,将两个检索结果列表中KFScore和Did相同的两条记录作为一个搜索结果加入到ResultList中。
12.根据权利要求7所述的方法,其特征在于,所述使用或逻辑合并ResultListl和ResultList2,并将合并结果加入到ResultList中可以包括: 将所述ResultListl和ResultList2中的各条记录加入到ResultList中,如果有两条记录的KFScore和Did均相同,贝U在ResultList中删除其中的一条记录。
13.根据权利要求7所述的方法,其特征在于,所述使用差逻辑合并ResultListl和ResultList2,并将合并结果加入到ResultList中可以包括: 从所述ResultListl中去除ResultList2中存储的各条记录,将进行去除操作后的ResultListl中的记录加入到ResultList中。
14.根据权利要求7所述的方法,其特征在于,所述步骤C12中还进一步包括: 如果索引倒排表中未存储上述所读取的第i个词源,则将所述ResultListl设置为空集,再返回执行步骤C6。
15.根据权利要求7所述的方法,其特征在于,所述结束条件为: ResultList中所存储的记录的数目大于搜索结果范围的最大值;或者,j等于Y。
16.根据权利要求7所述的方法,其特征在于,所述从所述ResultList中读取所需的记录作为搜索结果包括: 当 SumCount ^ (InitialPositon+Count)-1 时,从所述 ResultList 中的第InitialPositon条记录开始,读取Count条记录作为搜索结果;当 InitialPositon ^ SumCount < (InitialPositon+Count) -1 时,从所述 ResultList中的第InitialPositon条记录开始,读取(SumCount-1nitialPositon+l)条记录作为搜索结果; 当SumCount < InitialPositon时,将空集作为搜索结果。
17.根据权利要求1所述的方法,其特征在于,所述步骤C包括: 根据预先设定的搜索排序规则预先设置多层搜索过程,并设置各层搜索过程的优先级以及各层搜索过程的分层搜索分值范围; 当用户输入检索字符串时,按照优先级的高低顺序进行各层搜索。
18.根据权利 要求17所述的方法,其特征在于,所述根据预先设定的搜索排序规则预先设置多层搜索过程,并设置各层搜索过程的优先级包括: 在音乐搜索领域,设置如下的三层搜索过程:精确层搜索过程、全拼层搜索过程和分词层搜索过程;且各层搜索过程的优先级按从高到低的顺序为:精确层搜索过程、全拼层搜索过程、分词层搜索过程;
19.根据权利要求18所述的方法,其特征在于,该方法还进一步包括: 将每层搜索过程分为多个子层搜索过程,并设定各个子层搜索过程的优先级。
20.根据权利要求17所述的方法,其特征在于,所述设置各层搜索过程的分层搜索分值范围包括: 当设置有3层搜索过程,且各层搜索过程的优先级按从高到低的顺序为:第一层搜索过程、第二层搜索过程、第三层搜索过程时, 将第一层搜索过程的分层搜索分值范围设为:[A1,A2];将第二层搜索过程的分层搜索分值范围设为:[B1,B2];将第三层搜索过程的分层搜索分值范围设为:[Cl,C2];其中,Al > A2 > BI > B2 > Cl > C2。
21.根据权利要求17所述的方法,其特征在于,所述当用户输入检索字符串时,按照优先级的高低顺序进行各层搜索包括: Z1、根据预先设置的各层搜索过程对用户输入的检索字符串进行解析,分别生成与各层搜索过程相对应的词源队列和查询逻辑序列 Z2、对用户输入的搜索结果范围进行解析,获得起始位置和条数; Z3、根据预先设定的优先级,将当前未执行的且优先级最高的搜索过程确定为当前搜索过程; Z4、根据与当前搜索过程相对应的词源队列和查询逻辑序列对索引倒排表进行检索,将检索结果存储在分层检索结果集合中并得到当前分层检索结果总数 Z5、根据各个检索结果的KFScore以及当前搜索过程的分层搜索分值范围,计算分层检索结果集合中各个检索结果的分层搜索分值。
Z6、将分层检索结果集合中的检索结果按照分层搜索分值的大小加入到总检索结果集合中,并删除重复的检索结果;计算得到当前的总检索结果总数,并清空所述分层检索结果集合; Z7、判断是否满足结束条件;如果是,则执行步骤Z8 ;否则,返回执行步骤Z3 ; Z8、根据搜索结果范围从所述总检索结果集合中读取所需条数的检索结果作为搜索结果;将当前的总检索结果总数作为相关结果总数SumCount ; Z9、向用户返回搜索结果和搜索结果总数。
22.根据权利要求21所述的方法,其特征在于,所述根据各个检索结果的KFScore以及当前搜索过程的分层搜索分值范围,计算分层检索结果集合中各个检索结果的分层搜索分值包括: 根据当前搜索过程的分层搜索分值范围以及分层检索结果集合中各个检索结果按照KFScore从大到小的排列顺序,为各个检索结果设置相应的分层搜索分值。
23.根据权利要求21所述的方法,其特征在于,所述结束条件可以为: 当前的总检索结果总数大于搜索结果范围的最大值;或者,当前搜索过程为最后一层搜索过程。
24.根据权利要求 21所述的方法,其特征在于,所述根据搜索结果范围从所述总检索结果集合中读取所需条数的检索结果作为搜索结果包括: 当SumCount彡(InitialPositon+Count)-1时,从所述总检索结果集合中的第InitialPositon条记录开始,读取Count条记录作为搜索结果; 当 InitialPositon ^ SumCount < (InitialPositon+Count) -1 时,从所述总检索结果集合中的第InitialPositon条记录开始,读取(SumCount-1nitialPositon+l)条记录作为搜索结果; 当SumCount < InitialPositon时,将空集作为搜索结果。
25.一种搜索装置,其特征在于,该搜索装置包括:倒排表生成模块、存储模块、词源生成模块和检索模块; 所述倒排表生成模块,用于将全部待检索文档以词源Term为关键字进行索引,建立以Term为关键字索引、以包含该Term的文档的总数TotalCount和包含该Term的文档列表DocList为值的索引倒排表;所述文档列表中的每条记录中均包括一个文档的文档编号和关键属性分值;所述文档列表由有序列表和无序列表组成,所述有序列表中包括η个关键属性分值最大、且按关键属性分值从大到小顺序排列的记录;其中,所述η为预先确定的值;将所述索引倒排表发送给存储模块; 所述存储模块,用于存储所述索引倒排表; 所述词源生成模块,用于根据用户输入的检索字符串生成相应的词源;将所述词源以及用户输入的搜索结果范围发送给检索模块; 所述检索模块,用于根据所生成的词源对存储模块中存储的索引倒排表进行检索,并根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果和相关结果总数;将所述搜索结果和相关结果总数发送给用户。
全文摘要
本发明提供了一种搜索方法和装置。其中的搜索方法包括为同一类文档设置关键属性和关键属性权重,计算各个文档的关键属性分值;建立索引倒排表;索引倒排表中的文档列表中的每条记录中均包括一个文档的文档编号和关键属性分值;所述文档列表由有序列表和无序列表组成,所述有序列表中包括n个关键属性分值最大、且按关键属性分值从大到小顺序排列的记录;其中,所述n为预先确定的值;根据用户输入的检索字符串生成相应的词源,根据所生成的词源对所述索引倒排表进行检索,并根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果和相关结果总数。应用本发明可以提高搜索速度,降低系统资源的占用。
文档编号G06F17/30GK103186650SQ201110461128
公开日2013年7月3日 申请日期2011年12月30日 优先权日2011年12月30日
发明者简勤, 郭正平, 陈健骥, 何丹, 赖航, 肖巍, 郑长松, 王全礼, 杨俊拯 申请人:中国移动通信集团四川有限公司

最新回复(0)