CN103186650B - 一种搜索方法和装置 - Google Patents
一种搜索方法和装置 Download PDFInfo
- Publication number
- CN103186650B CN103186650B CN201110461128.4A CN201110461128A CN103186650B CN 103186650 B CN103186650 B CN 103186650B CN 201110461128 A CN201110461128 A CN 201110461128A CN 103186650 B CN103186650 B CN 103186650B
- Authority
- CN
- China
- Prior art keywords
- search
- list
- etymology
- retrieval
- search results
- 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.)
- Active
Links
Landscapes
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种搜索方法和装置。其中的搜索方法包括:为同一类文档设置关键属性和关键属性权重,计算各个文档的关键属性分值;建立索引倒排表;索引倒排表中的文档列表中的每条记录中均包括一个文档的文档编号和关键属性分值;所述文档列表由有序列表和无序列表组成,所述有序列表中包括n个关键属性分值最大、且按关键属性分值从大到小顺序排列的记录;其中,所述n为预先确定的值;根据用户输入的检索字符串生成相应的词源,根据所生成的词源对所述索引倒排表进行检索,并根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果和相关结果总数。应用本发明可以提高搜索速度,降低***资源的占用。
Description
技术领域
本发明涉及数据业务技术领域,尤其涉及一种搜索方法和装置。
背景技术
现有的搜索引擎一般都是单方面基于文本相似度进行排序,索引的存储一般是基于键值对<KEY,DocList>的形式。其中,KEY表示关键字,DocList表示包含关键字KEY的文档列表。DocList中的每个元素是一个文档对象,用于存放一个文档的基本信息,例如:该文档的ID、该关键字KEY在该文档中出现的次数以及出现的位置等信息。当用户输入一个关键字之后,将先根据该关键字进行检索;当检索到相对应的关键字后,再整体计算与该关键字相对应的DocList中所有文档在此关键字下的得分;然后,依据上述得分对所有的搜索结果整体进行排序,再在排序后的搜索结果中读取用户所需条数的搜索结果,将读取的搜索结果返回给用户。
例如,现有技术中存在一种综合搜索结果的排序方法,在该方法中,将采用排序算法计算垂直搜索引擎的综合值,并根据综合直对该垂直搜索引擎进行排序,汇总所有垂直搜索引擎排序结果,生成最终的搜索结果。
但是,上述排序方法是将搜索结果得分的计算过程放在搜索过程中进行,且每次都是进行全量排序,从而对CPU和内存资源的占用量较大,搜索复杂度较高,搜索速度较慢,且没有考虑信息的附加价值属性,因而无法保证价值高的信息排序一定靠前。同时,由于该方法中需要存储得分计算依据的因子以及综合得分计算因子,从而对存储空间也有较高的要求。
此外,现有技术中还存在一种基于搜索引擎的搜索结果排序方法。在该方法中,主要是根据事先配置的网络资源权重,同时根据用户输入的关键字在资源中的文本权重,综合计算每条相关资源得分,然后进行全量排序,以生成搜索结果。但是,在该方法中,虽然考虑到信息的附加价值属性,但是在搜索过程中需要计算各文档得分,同时还需要对搜索的结果进行全量排序,从而对CPU和内存资源的占用量也较大,搜索复杂度也较高,搜索速度也较慢。同时,由于该方法中也需要存储得分计算依据的因子以及综合得分计算因子,从而对存储空间也有较高的要求
综上可知,在现有技术中的搜索方法中,由于文档得分的计算和排序都是放在搜索过程中完成,且是针对全量进行排序;而且,索引组织的结构也没有考虑用户的搜索习惯,造成存储的信息量较大;另外,每次搜索均需针对全量进行,从而大大增加了内存和CPU等***稀缺资源的负担。同时,现有技术中的搜索方法的搜索复杂度一般都较高,搜索响应速度也较慢。此外,现有技术中的搜索方法中进行排序的依据是文本相关度,而并未考虑能表达信息价值的关键属性,因此导致排序方式单一、用户友好性不足等问题。
发明内容
有鉴于此,本发明提供了一种搜索方法和装置,从而可提高搜索速度,降低***资源的占用。
本发明采用的技术方案具体是这样实现的:
一种搜索方法,该方法包括:
A、为同一类文档设置至少一个关键属性及相应的关键属性权重,并根据所述关键属性和关键属性权重计算各个文档的关键属性分值KFScore;
B、将全部待检索文档以词源Term为关键字进行索引,建立以Term为关键字索引、以包含该Term的文档的总数TotalCount和包含该Term的文档列表DocList为值的索引倒排表;所述文档列表中的每条记录中均包括一个文档的文档编号和关键属性分值;所述文档列表由有序列表和无序列表组成,所述有序列表中包括n个关键属性分值最大、且按关键属性分值从大到小顺序排列的记录;其中,所述n为预先确定的值;
C、根据用户输入的检索字符串生成相应的词源,根据所生成的词源对所述索引倒排表进行检索,并根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果和相关结果总数。
本发明中还提供了一种搜索装置,该搜索装置包括:倒排表生成模块、存储模块、词源生成模块和检索模块;
所述倒排表生成模块,用于将全部待检索文档以词源Term为关键字进行索引,建立以Term为关键字索引、以包含该Term的文档的总数TotalCount和包含该Term的文档列表DocList为值的索引倒排表;所述文档列表中的每条记录中均包括一个文档的文档编号和关键属性分值;所述文档列表由有序列表和无序列表组成,所述有序列表中包括n个关键属性分值最大、且按关键属性分值从大到小顺序排列的记录;其中,所述n为预先确定的值;将所述索引倒排表发送给存储模块;
所述存储模块,用于存储所述索引倒排表;
所述词源生成模块,用于根据用户输入的检索字符串生成相应的词源;将所述词源以及用户输入的搜索结果范围发送给检索模块;
所述检索模块,用于根据所生成的词源对存储模块中存储的索引倒排表进行检索,并根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果和相关结果总数;将所述搜索结果和相关结果总数发送给用户。
由上述技术方案可见,本发明中由于为文档设置了关键属性和关键属性权重,因此可计算各个文档的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中的属性1由N个词源组成,属性J由M个词源组成等。
另外,在本发明的技术方案中,还将为每个文档设置一个或多个用于标识该文档的重要信息的关键属性,且同一类文档具有相同的关键属性。如下的表1为本发明中关键属性的示例说明。
文档类别 | 关键属性1 | 关键属性2 | ...... |
商品类文档 | 商品价格 | 购买次数 | ...... |
论文类文档 | 引用次数 | 下载次数 | ...... |
音乐类文档 | 试听次数 | 下载次数 | ...... |
...... | ...... | ...... | ...... |
表1
如表1所述,对于商品类文档,可以将商品价格和/或购买次数设置为关键属性;对于论文类文档,可以将引用次数和/或下载次数作为关键属性;对于音乐类文档,可以将试听次数和/或下载次数设置为关键属性。
在设置关键属性之后,还将根据实际应用情况为所设置的各个关键属性预先确定相应的权重Weight(可称为关键属性权重)。
步骤102,根据所述关键属性和关键属性权重计算各个文档的关键属性分值(KFScore)。
在设置上述关键属性和关键属性权重之后,即可根据所设置的关键属性和关键属性权重计算各个文档的关键属性分值(KFScore)。
例如,可通过如下所述的公式(1)来计算一个文档的KFScore:
KFScore=KeyField1*W1+KeyField2*W2+......+KeyFieldX*WX
其中,W1+W2+......+WX=1(1)
所述KeyField1表示该文档第1个KeyField的取值,所述W1表示与该文档第1个KeyField相对应的Weight的取值,所述KeyFieldx表示所述文档第x个KeyField的取值,所述Wx表示与该文档第x个KeyField相对应的Weight的取值,依此类推。
步骤103,将全部待检索文档以Term为关键字(Key)进行索引,建立以Term为关键字索引、以包含该Term的文档的总数(TotalCount)和包含该Term的文档列表(DocList)为值(Value)的索引倒排表InvertIndexList。
在本步骤中,将建立一个索引倒排表。具体来说,将建立一个以Term为关键字索引、以键值对<TotalCount,DocList>为值的索引倒排表,该索引倒排表可称为InvertIndexList。
图3为本发明中索引倒排表的结构示意图。如图3所示,本发明中的索引倒排表InvertIndexList中包括一条或多条记录,每条记录均可以键值对<Key,Value>方式存储,每条记录中可包括两个字段:关键字(Key)字段和键值(Value)字段。其中,所述Key字段用于存储文档所对应的Term,Value字段用于存储与所述Key字段中的Term相对应的键值对<TotalCount,DocList>。其中,DocList为包含该Term的文档列表,而TotalCount为DocList中的文档总数。
如图3所示,在本发明的具体实施例中,所述DocList可以为链表,而TotalCount则为该链表中的元素总数。所述链表中包括多条记录,每条记录均以键值对<KFScore,Did>方式存储,每个键值对都对应于一个包含所对应的Term的文档。其中,所述KFScore表示该文档的关键属性分值,可通过步骤102中的公式(1)计算得到;所述Did则表示该文档的标识,例如,文档的编号。
此外,在本发明的具体实施例中,对于索引倒排表InvertIndexList中的每个DocList,均可预先按照KFScore的大小对同一个DocList中的记录进行部分排序,即先在该DocList中确定前n个KFScore最大的记录,并将所述前n个KFScore最大的记录按KFScore大小顺序排列,组成一个有序列表(OrderedList);该DocList中的其它记录组成一个无序列表(DisorderedList)。因此,本发明的具体实施例中每一个DocList均是由有序列表和无序列表组成,所述有序列表中包括n个关键属性分值最大、且按关键属性分值从大到小顺序排列的记录。其中,所述n为预先确定的值,因此,所述n即为OrderedList的长度值。
由此可知,在本发明的具体实施例中,无需对DocList中的所有记录都按KFScore大小进行排序,而只需进行部分排序,即只需确定前n个KFScore最大的记录,并将前n个KFScore最大的记录(即有序列表中的记录)按KFScore大小进行排序即可,该DocList中的其它记录(即无序列表中的记录)则可以不进行排序。
步骤104,根据用户输入的检索字符串生成相应的词源,根据所生成的词源对所述索引倒排表进行检索,并根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果和相关结果总数。
在本发明的技术方案中,在通过上述步骤103建立索引倒排表之后,即可根据用户输入的检索字符串和搜索结果范围对所述索引倒排表进行检索,以得到所需的搜索结果和相关结果总数。
具体来说,首先可根据用户输入的检索字符串生成相应的词源。
例如:当用户所输入的检索字符串为“刘德华”,则可根据不同的转换规则将该检索字符串“刘德华”转换成相对应的词源:“刘德华”或“liudehua”。
当用户所输入的检索字符串为“刘德华天意”,则可根据不同的转换规则将该检索字符串“刘德华天意”转换成相对应的词源:“刘德华天意”或“liudehuatianyi”;或者可以将该检索字符串“刘德华天意”转换成相应的两个词源:“刘德华”和“天意”。
在生成相应词源之后,即可根据该词源对所述索引倒排表进行检索,判断所述索引倒排表中是否存储有上述词源。
当所述索引倒排表中存储有该词源时,则可读取该词源所对应的DocList,并根据用户输入的搜索结果范围优先从所述DocList的有序列表中获取记录,以得到所需的搜索结果和相关结果总数。
其中,所述搜索结果范围为用户所期望的搜索结果所在的范围。因此,所述搜索结果范围包括:起始位置(InitialPositon)和条数(Count),所述搜索结果范围的最大值即为:(InitialPositon+Count)-1。其中,所述起始位置为搜索结果的起始位置,所述条数为搜索结果的条数。
例如,当用户输入检索字符串进行搜索后,将会通过网页的形式查看搜索结果。以每个网页显示Count=30条搜索结果为例,当用户希望查看第1页的搜索结果时,InitialPositon=1,Count=30,所述搜索结果范围即为:第1~30条搜索结果;而当用户在查看完第1页的搜索结果后点击“下一页”,希望查看第2页的搜索结果时,则InitialPositon=31,Count=30,所述搜索结果范围即为:第31~60条搜索结果。依此可类推。
因此,在本发明的具体实施例中,所述根据用户输入的搜索结果范围优先从所述DocList的有序列表中获取记录,以得到所需的搜索结果可以包括:
当所述搜索结果范围的最大值小于或等于有序列表的长度n时,此时的搜索结果范围包含于所述有序列表中,因此,可直接从有序列表中的第InitialPositon条记录开始,读取Count条记录作为搜索结果,而无需读取无序列表中的记录。由于有序列表中的记录均已按KFScore的大小顺序排列,因此所读取的Count条记录即为按KFScore的大小顺序排列的搜索结果。
当所述搜索结果范围的起始位置位于有序列表中(即InitialPositon≤n),且所述搜索结果范围的最大值大于有序列表的长度n时,此时的搜索结果范围的一部分位于有序列表中,另一部分位于无序列表中,此时,可从有序列表中的第InitialPositon条记录开始,读取(n-InitialPositon+1)条记录,然后将所述无序列表中的记录按KFScore的大小顺序排列,并从所述无序列表中的第1条记录开始,读取[Count-(n-InitialPositon+1)]条记录;将所读取的Count条记录作为搜索结果。此时,所读取的Count条记录也是按KFScore的大小顺序排列的搜索结果。
当所述搜索结果范围的起始位置位于无序列表中(即InitialPositon>n)时,此时的搜索结果范围都位于所述无序列表中,因此,可将所述无序列表中的记录按KFScore的大小顺序排列,然后从排序后的无序列表中的第(InitialPositon-n)条记录开始,读取Count条记录作为搜索结果。此时,所读取的Count条记录也是按KFScore的大小顺序排列的搜索结果。
通过上述的方法,即可获得所需的搜索结果。
考虑到用户的搜索习惯,一般情况下用户只会关心排序靠前的数十条搜索结果。根据权威机构对用户的搜索习惯的统计结果分析可知,超过90%的用户一般只会查看搜索结果的前两页(一般为20条左右的搜索结果)。因此,在搜索数据量为数亿级别的情况下,如果有序列表的长度n的取值超过一定的值(例如,n=100),则在绝大部分情况下,用户所输入的搜索结果范围都包含在有序列表之中,从而可以直接从有序列表中获取所需条数的且已按KFScore的大小顺序排列的搜索结果,而无需再对搜索结果进行排序,所需内存空间较少,CPU运算次数较少,响应时间较高,且占用的***资源较少,从而可以大大提高搜索引擎的搜索响应时间,同时还可节约大量的硬、软件资源。
更进一步地,在本发明的具体实施例中,当所述索引倒排表中未存储根据用户输入的检索字符串所生成的词源时,则可向用户返回空集作为搜索结果,表示未搜索到相关的文档。
另外,在本发明的技术方案中,上述步骤104可以有多种实现方式,即可以使用多种搜索方法来实现上述的步骤104。以下将以多个具体实施例的方式对各种搜索方法分别进行介绍。
实施例一:单Term搜索方法。
在本实施例中,所述单Term搜索方法是指根据用户输入的检索字符串只生成一个相应的词源时进行搜索的方法。图4为本发明中单Term搜索方法的流程图。如图4所示,所述单Term搜索方法可包括如下所述的步骤:
步骤401,根据用户输入的检索字符串生成一个相应的词源。
在本步骤中,可以将用户输入的检索字符串作为一个词,直接将该词作为该检索字符串相应的词源。例如,当用户所输入的检索字符串为“刘德华”时,生成与该检索字符串相对应的词源:“刘德华”。
步骤402,根据所生成的词源检索索引倒排表,判断所述索引倒排表中是否存储有该词源;如果是,则执行步骤403;否则,执行步骤415。
步骤403,从所述索引倒排表中读取与所述词源相对应的文档列表。
由于索引倒排表中的每个词源所对应的值(Value)中都包括一个文档列表(DocList),因此,在步骤中可根据上述所生成的词源从所述索引倒排表中读取与所述词源相对应的文档列表。
步骤404,对用户输入的搜索结果范围进行解析,获得起始位置和条数。
在本步骤中,可通过对用户所输入的搜索结果范围进行解析,获得起始位置InitialPositon和条数Count。
步骤405,判断(InitialPositon+Count)-1>n是否成立,如果是,则执行步骤406;否则,执行步骤412;
由于所述搜索结果范围的最大值为(InitialPositon+Count)-1,因此在本步骤中,将首先判断搜索结果范围的最大值是否大于文档列表的有序列表的长度n,即判断(InitialPositon+Count)-1>n是否成立。
当搜索结果范围的最大值大于文档列表的有序列表的长度时,则说明所述搜索结果范围已经超出有序列表的范围,此时,仅从有序列表中将无法读取全部所需条数的搜索结果,因此,将继续执行步骤406;
当搜索结果范围的最大值小于或等于文档列表的有序列表的长度时,则说明所述搜索结果范围并未超出有序列表的范围,此时,仅从有序列表中即可读取全部所需的搜索结果,因此可以执行步骤412,从有序列表中直接获取所需条数的搜索结果。
步骤406,判断InitialPositon>n是否成立,如果是,则执行步骤410;否则,执行步骤407;
在本步骤中,将判断搜索结果范围中的InitialPositon是否大于有序列表的长度n。
当搜索结果范围中的InitialPositon大于有序列表的长度时,则说明所述搜索结果范围的InitialPositon已经位于无序列表中,所述搜索结果均位于无序列表中,所述有序列表中并不包括搜索结果,因此可执行步骤410;
当搜索结果范围中的InitialPositon小于或等于有序列表的长度时,则说明所述搜索结果范围的InitialPositon仍位于有序列表中,即有部分搜索结果位于有序列表中,但也有部分搜索结果位于无序列表中。此时可执行步骤407。
步骤407,从有序列表中的第InitialPositon条记录开始,读取(n-InitialPositon+1)条记录加入到搜索结果列表(ResultList)中。
步骤408,将所述无序列表中的记录按KFScore的大小顺序排列。
步骤409,从所述无序列表中读取[Count-(n-InitialPositon+1)]条记录加入到ResultList中,执行步骤413。
步骤410,将所述无序列表中的记录按KFScore的大小顺序排列。
步骤411,从排序后的无序列表中的第(InitialPositon-n)条记录开始,读取Count条记录加入到ResultList中,执行步骤413。
步骤412,从有序列表中的第InitialPositon条记录开始,读取Count条记录加入到ResultList中,执行步骤413。
步骤413,将所述ResultList作为搜索结果,并将从所述索引倒排表中读取的与所述词源相对应的文档列表的文档总数TotalCount作为相关结果总数SumCount。
步骤414,将所述搜索结果和相关结果总数返回给用户。结束流程。
步骤415,将空集作为搜索结果,设SumCount=0,将所述空集和相关结果总数返回给用户。结束流程。
通过上述的步骤401~415,即可实现单Term搜索。
以下将以音乐搜索领域的具体实例为例,对上述的单Term搜索方法进行进一步的介绍。
具体实例一:
假设在音乐搜索领域中待检索的音乐文档有一千万个,每个文档的音乐信息包括:歌曲名(SongName)、歌手名(SingerName)、专辑名(AlbumName)、歌词、歌曲的试听量(ListenCount)和业务量(BusinessCount)。
在本发明的实例中,可将所述ListenCount和BusinessCount设置为上述音乐文档的关键属性,关键属性权重分别设置为0.3和0.7,则各个音乐文档的关键属性分值(KFScore)可通过如下所述公式计算:
KFScore=ListenCount*0.3+BusinessCount*0.7
根据上述待检索的音乐文档、关键属性和关键属性分值可建立索引倒排表InvertIndexList,并可将索引倒排表中的有序列表的长度n设置为100。
图5为本发明具体实例中的索引倒排表的结构示意图。如图5所示,词源“刘德华”所对应的值为:<10000,DocList>,因此,与词源“刘德华”相对应的DocList中的文档总数TotalCount=10000,该DocList中的有序列表的长度n=100,即有序列表中包括100条记录;无序列表的长度为9900,即无序列表中包括9900条记录;同理,词源“我和你”所对应的值为:<9870,DocList>,因此,与词源“我和你”相对应的DocList中的文档总数TotalCount=9870;......;词源“天意”所对应的值为:<60,DocList>,因此,与词源“天意”相对应的DocList中的文档总数TotalCount=60;其中,可再假设在上述60个文档中,有20个文档中的歌手名为“刘德华”。
当用户输入的检索字符串为“刘德华”,且用户输入的搜索结果范围为:第31~50条搜索结果时,可使用如下所述的单Term搜索方法进行搜索:
根据用户输入的检索字符串生成相应的词源“刘德华”;对用户输入的搜索结果范围进行解析,获知起始位置InitialPositon=31,条数Count=20;
根据所生成的词源“刘德华”检索图5所示的索引倒排表,在索引倒排表中查找到与上述生成的词源相对应的词源“刘德华”;该词源所对应的值为:<10000,DocList>,因此,与词源“刘德华”相对应的DocList中的文档总数TotalCount=10000,该DocList中的有序列表的长度n=100,即有序列表中包括100条记录;无序列表的长度为9900,即无序列表中包括9900条记录。
由于(InitialPositon+Count)-1=31+20-1<n=100,因此搜索结果范围包含于所述有序列表中,所以可直接从有序列表中的第31条记录开始,读取20条记录作为搜索结果;同时,相关结果总数为SumCount=TotalCount=10000。
由于有序列表中的记录均已按KFScore的大小顺序排列,因此所读取的20条记录即为按KFScore的大小顺序排列的搜索结果。
实施例二:多Term搜索方法。
在实际应用场景中,用户有可能会输入多个关键字进行搜索,希望能较精确地定位所需查找的内容,同时,有些用户还可能会对检索结果有特定的要求,例如,需要查找既包括关键字A又包括关键字B的信息,或者需要查找包括关键字A或关键字B的信息,或者需要查找包括关键字A但不包括关键字B的信息等等。因此,用户所输入的多个关键字之间还有可能存在与(AND)、或(OR)和差(SUB)三种逻辑运算情况。
为了满足上述用户的需求,在本发明的技术方案中,还提出了一种多Term搜索方法。在本实施例中,所述多Term搜索方法是指根据用户输入的检索字符串生成多个相应的词源时进行搜索的方法。图6为本发明中多Term搜索方法的流程图。如图6所示,所述多Term搜索方法可包括如下所述的步骤:
步骤600,在索引倒排表的文档列表中设置Y段读取范围。
在本发明的具体实施例中,将采用分段读取的策略进行检索,以尽量避免每次检索都在全量数据上进行操作。因此,在本步骤中,将在索引倒排表的文档列表中预先设置Y段读取范围。其中,Y≥2。
例如,当Y=2时,将在索引倒排表的文档列表中预先设置2段读取范围。此时,可将文档列表的有序列表作为第1段读取范围,而将整个文档列表作为第2段读取范围。
再例如,当Y=3时,将在索引倒排表的文档列表中预先设置3段读取范围。此时,可将文档列表的有序列表作为第1段读取范围,将文档列表的无序列表作为第2段读取范围,而将整个文档列表作为第3段读取范围。
在本发明的具体实施例中,还可以根据实际应用情况使用其它方法设置读取范围,具体的设置方法在此不再赘述。
步骤601,根据用户输入的检索字符串生成一个词源队列和查询逻辑序列。
在本步骤中,将对用户输入的检索字符串进行解析,生成一个词源队列TermArray和一个查询逻辑序列SetOperators。其中,所述词源队列TermArray中可以包括x个词源,可以表示为TermArray{Term1,Term2,...,Termx}。所述查询逻辑序列SetOperators中包括(x-1)个查询逻辑symbol,可以表示为SetOperators{symbol1,symbol2,...,symbolx-1}。其中,所述词源队列中各个词源之间的逻辑关系由所述查询逻辑序列中相应的查询逻辑表示。例如,所述查询逻辑序列中的symbol1表示Term1与Term2之间的逻辑关系,symbol2表示Term3与之前的Term1、Term2之间的逻辑关系,依次类推。另外,所述查询逻辑symbol的取值为:AND、OR或SUB。
例如,当用户所输入的检索字符串为“刘德华OR天意”时,可对上述检索字符串进行解析后生成词源队列TermArray{刘德华,天意}和一个查询逻辑序列SetOperators{symbol1},其中,symbol1的取值为OR。
步骤602,对用户输入的搜索结果范围进行解析,获得起始位置和条数。
在本步骤中,可通过对用户所输入的搜索结果范围进行解析,获得起始位置InitialPositon和条数Count。
步骤603,判断TermArray的长度是否大于1;如果是,则执行步骤604;否则,执行步骤616。
在本步骤中,将首先判断TermArray的长度是否大于1;如果是,则说明TermArray中至少包括两个以上的词源,将继续执行步骤604;如果不是,说明TermArray中仅包括一个词源,因此可以仅使用单Term搜索方法进行搜索,而不必使用多Term搜索方法,因此执行步骤616。
从上述步骤603可知,在本发明的具体实施例中,所述单Term搜索方式为多Term搜索方式的一种特殊情况。
步骤604,读取TermArray中的前两个词源,并设置初始值为2的变量i和初始值为1的变量i。
在本步骤中,将直接从TermArray中读取前两个词源,即词源Term1和Term2。
另外,在本步骤中还可以预先设置两个变量:初始值为2的变量i和初始值为1的变量j。其中,i可用于表示当前所读取的是第i个词源,而j则可用于表示当前读取范围的段数,即表示当前读取范围为第j段读取范围。
步骤605,根据上述所读取的两个词源分别检索索引倒排表,从所述索引倒排表中分别读取与所述两个词源相对应的文档列表中第j段读取范围内的记录,将所读取的记录分别存储于第一检索结果列表(ResultList1)和第二检索结果列表(ResultList2)中。
具体来说,在本步骤中可将上述所读取的两个词源分别看成两个独立的词源,根据每个词源分别检索索引倒排表。如果索引倒排表中存储有上述两个词源,则从所述索引倒排表中分别读取与所述两个词源相对应的文档列表中第j段读取范围内的记录。然后,将所读取的第一个词源(即Term1)相对应的文档列表中第j段读取范围内的记录存储于ResultList1中,将所读取的第二个词源(即Term2)相对应的文档列表中第j段读取范围内的记录存储于ResultList2中。
在本步骤中,此时的j=1,因此所读取的均为文档列表中第1段读取范围内的记录。如果在步骤600中将所述第1段读取范围设置为有序列表,则此时所读取的均为文档列表的有序列表中的记录。
更进一步的,如果索引倒排表中未存储上述两个词源中的任意一个词源,则可将该未存储的词源所对应的检索结果列表设置为空集。例如,如果索引倒排表中未存储上述两个词源中的第一个词源(即Term1),则将该词源所对应的检索结果列表ResultList1设置为空集;如果索引倒排表中未存储上述两个词源中的第二个词源(即Term2),则将该词源所对应的检索结果列表ResultList2设置为空集。
步骤606,读取查询逻辑序列SetOperators中的第(i-1)个逻辑符号symboli-1。
步骤607,判断所读取的逻辑符号的取值;当所述逻辑符号的取值为AND时,执行步骤608;当所述逻辑符号的取值为OR时,执行步骤609;当所述逻辑符号的取值为SUB时,执行步骤610。
步骤608,使用与(AND)逻辑合并ResultList1和ResultList2,合并结果加入到搜索结果列表(ResultList)中;执行步骤611。
在本步骤中,将使用与逻辑合并ResultList1和ResultList2,并将合并结果加入到ResultList中。
由于ResultList1和ResultList2中的每条记录都包括两项属性:关键属性得分(KFScore)和文档标识(Did),而进行与逻辑合并的目的在于从两个检索结果列表中找出Did相同的记录。由于KFScore的特殊性可知,如果两个文档的KFScore相同,则这两个文档有可能属于同一文档,而如果两个文档的KFScore不同,则一定不是同一文档。
基于上述的原因,在本发明的具体实施例中,所述使用与逻辑合并ResultList1和ResultList2,并将合并结果加入到ResultList中可以包括:
逐一比较ResultList1和ResultList2中的各条记录,将两个检索结果列表中KFScore和Did相同的两条记录作为一个搜索结果加入到搜索结果列表(ResultList)中。
步骤609,使用或(OR)逻辑合并ResultList1和ResultList2,合并结果加入到搜索结果列表(ResultList)中;执行步骤611。
在本步骤中,将使用或逻辑合并ResultList1和ResultList2,并将合并结果加入到ResultList中。
例如,在本发明的具体实施例中,所述使用或逻辑合并ResultList1和ResultList2,并将合并结果加入到ResultList中可以包括:
将所述ResultList1和ResultList2中的各条记录加入到搜索结果列表(ResultList)中,如果有两条记录的KFScore和Did均相同,则在ResultList中删除其中的一条记录。
步骤610,使用差(SUB)逻辑合并ResultList1和ResultList2,合并结果加入到搜索结果列表(ResultList)中;执行步骤611。
在本步骤中,将使用差逻辑合并ResultList1和ResultList2,并将合并结果加入到ResultList中。
例如,在本发明的具体实施例中,所述使用差逻辑合并ResultList1和ResultList2,并将合并结果加入到ResultList中可以包括:
从所述ResultList1中去除ResultList2中存储的各条记录,将进行去除操作后的ResultList1中的记录加入到搜索结果列表(ResultList)中。
步骤611,判断TermArray中是否还有Term未使用;如果是,则执行步骤612;否则,执行步骤613。
步骤612,设i=i+1,读取TermArray中的第i个词源;清空ResultList1和ResultList2,并将ResultList中的记录复制到ResultList2中;根据所读取的词源检索所述索引倒排表,从所述索引倒排表中读取与所读取的词源相对应的文档列表中第j段读取范围内的记录,将所读取的记录存储于ResultList1中;返回执行步骤606。
具体来说,在本步骤中可先设置i=i+1,以从TermArray中读取下一个词源(即第i个词源);同时,还将ResultList1和ResultList2清空,并将之前的搜索结果(即ResultList中的记录)复制到ResultList2中,以便于在后续搜索过程中将之前的搜索结果与所读取的下一个词源所对应的搜索结果进行逻辑操作。
然后,再根据所读取的词源检索索引倒排表。如果索引倒排表中存储有上述所读取的词源,则从所述索引倒排表中读取与所述词源相对应的文档列表中第j段读取范围内的记录,并将所读取的记录存储于ResultList1中,再返回执行步骤606。
在本步骤中,如果此时的j=1,则所读取的为文档列表中第1段读取范围内的记录。而如果在步骤600中将所述第1段读取范围设置为有序列表,则此时所读取的将为文档列表的有序列表中的记录。同理,如果此时的j=2,则所读取的为文档列表中第2段读取范围内的记录。而如果在步骤600中将所述第2段读取范围设置为整个文档列表,则此时所读取的将为整个文档列表中的记录。依次类推,在此不再赘述。
更进一步的,如果索引倒排表中未存储上述所读取的第i个词源,则可将所述ResultList1设置为空集,再返回执行步骤606。
步骤613,判断是否满足结束条件;如果是,则执行步骤617;否则,执行步骤614。
其中,在本发明的具体实施例中,所述结束条件可以为:
ResultList中所存储的记录的数目大于搜索结果范围的最大值:(InitialPositon+Count)-1;或者,j等于Y。
在本发明的技术方案中,当ResultList中所存储的记录的数目大于搜索结果范围的最大值(InitialPositon+Count)-1时,则表示已经检索到足够数量的搜索结果,因此满足了结束搜索的条件。而当j大于Y时,则表示已经进行了最后一段的搜索,此时也可以结束搜索,从而满足结束条件。
步骤614,清空ResultList1和ResultList2;读取TermArray中的前两个词源,并设置i=2且j=j+1;根据上述所读取的两个词源分别检索索引倒排表,从所述索引倒排表中分别读取与所述两个词源相对应的文档列表中第j段读取范围内的记录,分别存储于第一检索结果列表(ResultList1)和第二检索结果列表(ResultList2)中。
由于步骤613的判断结果是结束条件未满足,则表示ResultList中所存储的记录的数目小于所需的条数,也就是说,在上一阶段的检索过程中未检索到足够数量的搜索结果,所以需要进行本阶段(即第j阶段)的检索过程。
因此,在本步骤中,将根据上述所读取的两个词源分别再次检索索引倒排表。如果索引倒排表中存储有上述两个词源,则从所述索引倒排表中分别读取与所述两个词源相对应的文档列表中第j段读取范围内的记录。然后,将所读取的第一个词源(即Term1)相对应的文档列表中第j段读取范围内的记录存储于ResultList1中,将所读取的第二个词源(即Term2)相对应的文档列表中第j段读取范围内的记录存储于ResultList2中。
步骤615,分别将所述ResultList1和ResultList2中的记录按KFScore的大小顺序排列;返回执行步骤606。
步骤616,使用上述单Term搜索方法,根据所述TermArray中的词源检索索引倒排表,得到搜索结果和相关结果总数;执行步骤618。
步骤617,从所述ResultList中读取所需的记录作为搜索结果,将ResultList中所存储的记录的数目作为相关结果总数(SumCount)。
例如,在本发明的具体实施例中,所述从所述ResultList中读取所需的记录作为搜索结果包括:
当SumCount≥(InitialPositon+Count)-1时,从所述ResultList中的第InitialPositon条记录开始,读取Count条记录作为搜索结果;
当InitialPositon≤SumCount<(InitialPositon+Count)-1时,则表明ResultList中的记录的数目不足,此时,从所述ResultList中的第InitialPositon条记录开始,读取(SumCount-InitialPositon+1)条记录作为搜索结果,
当SumCount<InitialPositon时,则表明ResultList中的记录的数目太少,不存在所需的搜索结果,此时,可将空集作为搜索结果。
步骤618,向用户返回搜索结果和SumCount。
在上述的多Term搜索方法中,使用了分段搜索的策略。例如,当预先设置了2段读取范围,且将文档列表的有序列表作为第1段读取范围,而将整个文档列表作为第2段读取范围时,将先搜索文档列表中的有序列表;如果从有序列表中得到的检索结果的数目大于或等于所需的条数,则说明第一段的检索过程中已经检索到足够数量的搜索结果,此时无需对无序列表进行查找,而可以直接给出已经排序的搜索结果;只有当有序列表中检索结果的数目小于所需的条数时,即第一段的检索过程中未检索到足够数量的搜索结果时,才会进行第二阶段的搜索,从文档列表中的所有记录中进行搜索。
因此,使用上述的多Term搜索方法,可以尽量避免每次均在全量数据集上(例如,整个文档列表中)进行检索操作,因而可有效地缩小搜索空间,减少搜索的复杂度。
例如,在现有技术中,如果搜索数量的级别为亿级别(例如,网页或新闻搜索一般都是T级别),则目前开源搜索(例如,Lucene)中的每次搜索均会对搜索的结果集(比如百万级)进行全量排序,然后在此基础上获取用户搜索的结果集。而如果使用上述的多Term搜索方法,将文档列表的有序列表作为第1段读取范围,则大多数情况下在第一阶段搜索过程结束时即能找到满足用户需要的搜索结果,而不用进行第二阶段的搜索,因此可急剧减少所需搜索的数据量,而且不用在检索过程中对搜索结果进行排序,从而大大提高了搜索响应速度(一般可以比Lucene的搜索响应速度高一个数量级),而且也可以大大减少对内存和CPU资源的占用。
通过上述的步骤601~618,即可实现多Term搜索。
以下将以音乐搜索领域的具体实例为例,对上述的多Term搜索方法进行进一步的介绍。
具体实例二:
为了简便起见,在该具体实例中,仍使用具体实例一中的基本设定,并建立图5所示的索引倒排表,索引倒排表中的有序列表的长度n设置为100。另外,设在索引倒排表的文档列表中设置了2段读取范围(即Y=2),且将文档列表的有序列表作为第1段读取范围,而将整个文档列表作为第2段读取范围。
当用户输入的检索字符串为“刘德华AND天意”,且用户输入的搜索结果范围为:第1~10条搜索结果时,可使用如下所述的多Term搜索方法进行搜索:
根据用户输入的检索字符串生成一个词源队列TermArray{刘德华,天意}和查询逻辑序列SetOperators{AND};
对用户输入的搜索结果范围进行解析,获知起始位置InitialPositon=1,条数Count=10;
分别根据所生成的词源“刘德华”和“天意”检索图5所示的索引倒排表,查找到与上述生成的相对应的词源“刘德华”和“天意”;
根据图5所示的索引倒排表可知,对于词源“刘德华”来说,其所对应的值为:<10000,DocList>,因此,与词源“刘德华”相对应的DocList中的文档总数TotalCount=10000。所以,将从所述索引倒排表中读取与词源“刘德华”相对应的DocList中的有序列表,将所述有序列表中的所有100条记录均存储于ResultList1中;
根据图5所示的索引倒排表可知,对于词源“天意”来说,其所对应的值为:<60,DocList>,因此,与词源“天意”相对应的DocList中的文档总数TotalCount=60;由于60<100,所以,与词源“天意”相对应的DocList中的文档均存储在有序列表中;所以,将从所述索引倒排表中读取与词源“天意”相对应的DocList中的有序列表,将所述有序列表中的所有60条记录均存储于ResultList2中;
从逻辑序列SetOperators中读取第1个逻辑符号,因为该逻辑符号为AND,因此使用AND逻辑合并ResultList1和ResultList2,合并结果加入到ResultList中;
由于“天意”相对应的上述60个文档中,有20个文档中的歌手名为“刘德华”,因此,上述ResultList将存储有20条记录,相关结果总数即为:SumCount=20。
由于TermArray中所有的Term均已使用,而且(InitialPositon+Count)-1=1+10-1<SumCount,即搜索结果范围包含于所述有序列表中,因此已经满足结束条件,此时,可直接从所述ResultList中的第InitialPositon=1条记录开始,读取Count=10条记录作为搜索结果;
最后,将向用户返回上述搜索结果和相关结果总数SumCount=20。
实施例三:分层搜索方法。
在本实施例中,所述分层搜索方法是指按照预先设定的规则将整个搜索过程分成多层搜索过程,每个层次的搜索过程之间有严格的区分,不同层之间进行搜索时的字段或搜索规则是不同的。一般来说,上一层的得分均高于下一层,每一层内部再指定按照信息关键属性排序的规则,这样划分分层搜索方法既可以保持搜索的相关性,同时又保障重要信息搜索后结果排名靠前的问题。
图7为本发明中多层搜索方法的流程图。如图7所示,所述多层搜索方法可包括如下所述的步骤:
步骤701,根据预先设定的搜索排序规则预先设置多层搜索过程,并设置各层搜索过程的优先级以及各层搜索过程的分层搜索分值范围。
在本步骤中,可以根据业务特性预先设定相应的搜索排序规则,例如,在本发明的具体实施例中,针对音乐搜索领域,可以预先设定如下的搜索排序规则:精确搜索、全拼搜索以及分词搜索。根据上述搜索排序规则可知,针对音乐搜索领域,可先进行精确搜索,如果未获得足够数量的搜索结果则可以再进行全拼搜索,如果仍未获得足够数量的搜索结果则最后可再进行分词搜索,从而尽量获得足够数量的用户所需的搜索结果。
因此,根据上述预先设定的搜索排序规则,可以设置多层搜索过程。例如,在音乐搜索领域,可以设置如下的三层搜索过程:精确层搜索过程、全拼层搜索过程和分词层搜索过程,而且,各层搜索过程的优先级按从高到低的顺序为:精确层搜索过程、全拼层搜索过程、分词层搜索过程。
更进一步的,在本发明的具体实施例中,还可将上述的每层搜索过程再次分为多个子层搜索过程,并设定各个子层搜索过程的优先级。例如,可将上述精确层搜索过程分为按优先级高低顺序排列的三个子层搜索过程:歌曲子层搜索过程、歌手子层搜索过程和专辑子层搜索过程。即在进行精确层搜索过程时,将先进行歌曲子层搜索过程,然后再进行歌手子层搜索过程,最后再进行专辑子层搜索过程,以完成所述精确层搜索过程。同理,也可将所述全拼层搜索过程和分词层搜索过程也分为上述三个子层搜索过程。在此不再赘述。
此外,在本发明的具体实施例中,还可进一步预先设置各层搜索过程的分层搜索分值范围,从而便于后续所获得的检索结果的排序。例如,当设置有3层搜索过程,且各层搜索过程的优先级按从高到低的顺序为:第一层搜索过程、第二层搜索过程、第三层搜索过程时,可将第一层搜索过程的分层搜索分值范围设为:[A1,A2],即表示在第一层搜索过程中所得到的所有检索结果的分层搜索分值都将在A1和A2之间;将第二层搜索过程的分层搜索分值范围设为:[B1,B2],将第三层搜索过程的分层搜索分值范围设为:[C1,C2]。其中,A1>A2>B1>B2>C1>C2。因此,第一层搜索过程中所获得的任意一个检索结果的搜索分数都将高于第二、三层搜索过程中获得的检索结果。通过上述的方法,从而可以在保持检索结果的相关性的同时,还可保证关于重要信息的检索结果排名比较靠前。
步骤702,当用户输入检索字符串时,按照优先级的高低顺序进行各层搜索。
在本步骤中,当用户输入检索字符串时,将进行分层的搜索过程,即按照优先级的高低顺序先进行优先级最高的搜索,然后再进行优先级次高的搜索,并依此类推,直到搜索到足够数量的用户所需的搜索结果。
在本发明的技术方案中,上述步骤702可以有多种具体的实现方式。以下将以其中的一种具体实现方式为例,对本发明的技术方案进行介绍。
图8为本发明中步骤702的一种实现方法的流程图。如图8所示,上述步骤702可以包括如下所述的步骤:
步骤801,根据预先设置的各层搜索过程对用户输入的检索字符串进行解析,分别生成与各层搜索过程相对应的词源队列和查询逻辑序列。
在本发明的技术方案中,由于预先设置了多层搜索过程,而每层搜索过程所使用的搜索方法并不一定相同,因此在本步骤中,可对用户输入的检索字符串进行解析,从而分别生成与各层搜索过程相对应的词源队列和查询逻辑序列。
进一步的,在本发明的具体实施例中,如果所生成的词源队列中只有一个词源,则与该词源队列对应的查询逻辑序列为空集。
例如,如果预先设置的多层搜索过程为:精确层搜索过程、全拼层搜索过程和分词层搜索过程,而用户所输入的检索字符串为“刘德华天意”,则对用户所输入的检索字符串进行解析后,所得到与精确层搜索过程相对应的词源队列中只有一个词源“刘德华天意”,与该词源队列对应的查询逻辑序列为空集;所得到与全拼层搜索过程相对应的词源队列中只有一个词源“liudehuatianyi”,与该词源队列对应的查询逻辑序列为空集;所得到与分词层搜索过程相对应的词源队列中有两个词源:“刘德华”和“天意”,与该词源队列对应的查询逻辑序列中有一个逻辑符号:OR。
步骤802,对用户输入的搜索结果范围进行解析,获得起始位置和条数。
在本步骤中,可通过对用户所输入的搜索结果范围进行解析,获得起始位置InitialPositon和条数Count。
步骤803,根据预先设定的优先级,将当前未执行的且优先级最高的搜索过程确定为当前搜索过程。
在本步骤中,需要确定当前搜索过程为哪一层搜索过程。因此,可以根据预先设定的优先级,确定当前搜索过程为当前未执行的且优先级最高的搜索过程。例如,如果是第一次执行搜索过程,则当前搜索过程为优先级最高的搜索过程;如果是第二次执行搜索过程,则当前搜索过程为优先级次高的搜索过程;并依此类推。
步骤804,根据与当前搜索过程相对应的词源队列和查询逻辑序列对索引倒排表进行检索,将检索结果存储在分层检索结果集合中并得到当前分层检索结果总数。
由于在步骤801中已经生成了与各层搜索过程相对应的词源队列和查询逻辑序列,因此在本步骤中,可直接根据当前搜索过程相对应的词源队列和查询逻辑序列对索引倒排表进行检索,将检索结果存储在分层检索结果集合(LayerResultList),从而得到分层检索结果集合;同时,还可得到当前的分层检索结果集合中的检索结果的总数,即当前分层检索结果总数(LayerResultCount)。
另外,在本步骤的当前搜索过程中,可使用上述的多Term搜索方式对索引倒排表进行检索,具体检索过程在此不再赘述。
步骤805,根据各个检索结果的KFScore以及当前搜索过程的分层搜索分值范围,计算分层检索结果集合中各个检索结果的分层搜索分值。
在本发明的具体实施例中,可以使用多种计算方法来计算分层检索结果集合中各个检索结果的分层搜索分值。
例如,可根据当前搜索过程的分层搜索分值范围以及分层检索结果集合中各个检索结果按照KFScore从大到小的排列顺序,为各个检索结果设置相应的分层搜索分值。其它的计算方法在此不再赘述。
步骤806,将分层检索结果集合中的检索结果按照分层搜索分值的大小加入到总检索结果集合中,并删除重复的检索结果;计算得到当前的总检索结果总数,并清空所述分层检索结果集合。
在本步骤中,可将步骤804中得到的分层检索结果集合中的检索结果都按照分层搜索分值的大小***到总检索结果集合(ResultList)中的检索结果中,并删除重复的检索结果。其中,所述总检索结果集合的初始值为空集,即初始情况下的总检索结果集合中并未存储检索结果。因此,如果当前搜索过程为第一层搜索过程,则将分层检索结果集合中的检索结果加入到总检索结果集合中时,不会存在重复的检索结果,即重复的检索结果的数目为0。
此外,在本发明的具体实施例中,还需计算得到当前的总检索结果总数(SearchResultCount),即当前的总检索结果集合中的检索结果的总数。例如,可以直接对当前的总检索结果集合进行统计,得到检索结果的总数;或者,还可以将本次计算前的总检索结果总数加上当前分层检索结果总数,并减去重复的检索结果的数目,从而得到当前的总检索结果总数。
步骤807,判断是否满足结束条件;如果是,则执行步骤808;否则,返回执行步骤803。
其中,在本发明的具体实施例中,所述结束条件可以为:
当前的总检索结果总数大于搜索结果范围的最大值,或者当前搜索过程为最后一层搜索过程。
在本发明的技术方案中,当当前的总检索结果总数大于搜索结果范围(InitialPositon+Count)时,则表示已经检索到足够数量的搜索结果,因此满足了结束搜索的条件。而当当前搜索过程为最后一层搜索过程时,此时也可以结束搜索,从而满足结束条件。
步骤808,根据搜索结果范围从所述总检索结果集合中读取所需条数的检索结果作为搜索结果;将当前的总检索结果总数作为相关结果总数(SumCount)。
例如,在本发明的具体实施例中,所述根据搜索结果范围从所述总检索结果集合中读取所需条数的检索结果作为搜索结果包括:
当SumCount≥(InitialPositon+Count)-1时,从所述总检索结果集合中的第InitialPositon条记录开始,读取Count条记录作为搜索结果;
当InitialPositon≤SumCount<(InitialPositon+Count)-1时,则表明总检索结果集合中的记录的数目不足,此时,从所述总检索结果集合中的第InitialPositon条记录开始,读取(SumCount-InitialPositon+1)条记录作为搜索结果;
当SumCount<InitialPositon时,则表明总检索结果集合中的记录的数目太少,不存在所需的搜索结果,此时,可将空集作为搜索结果。
步骤809,向用户返回搜索结果和搜索结果总数。
通过上述的步骤701~702,即可实现多层搜索。
以下将以音乐搜索领域的具体实例为例,对上述的多层搜索方法进行进一步的介绍。
具体实例三:
为了简便起见,在该具体实例中,仍使用具体实例一中的基本设定,并建立图5所示的索引倒排表,索引倒排表中的有序列表的长度n设置为100。
当用户输入的检索字符串为“刘德华天意”,且用户输入的搜索结果范围为:第1~50条搜索结果时,可使用如下所述的多层搜索方法进行搜索:
在本具体实例中,首先根据音乐搜索领域中的业务特性预先设置三层搜索过程:精确层搜索过程、全拼层搜索过程和分词层搜索过程。而且,各层搜索过程的优先级按从高到低的顺序为:精确层搜索过程、全拼层搜索过程、分词层搜索过程。然后,再将上述各层搜索过程都按优先级按从高到低的顺序分为三个子层搜索过程:歌曲子层搜索过程、歌手子层搜索过程和专辑子层搜索过程。
根据上述的设置情况,预先设置各层搜索过程的分层搜索分值范围:将精确层搜索过程的分层搜索分值范围设为[A1,A2];将全拼层搜索过程的分层搜索分值范围设为[B1,B2],将分词层搜索过程的分层搜索分值范围设为[C1,C2];其中,A1>A2>B1>B2>C1>C2。
完成上述设定之后,可根据预先设置的各层搜索过程对用户输入的检索字符串“刘德华天意”进行解析,分别生成与各层搜索过程相对应的词源队列和查询逻辑序列,分别为:
与精确层搜索过程相对应的词源队列中只有一个词源“刘德华天意”,与该词源队列对应的查询逻辑序列为空集;
与全拼层搜索过程相对应的词源队列中只有一个词源“liudehuatianyi”,与该词源队列对应的查询逻辑序列为空集;
与分词层搜索过程相对应的词源队列中有两个词源:“刘德华”和“天意”,与该词源队列对应的查询逻辑序列中有一个逻辑符号:AND。
对用户输入的搜索结果范围进行解析,获知起始位置InitialPositon=1,条数Count=50;
由于精确层搜索过程中的歌曲子层搜索过程的优先级最高,因此可将歌曲子层搜索过程确定为当前搜索过程。
在歌曲子层搜索过程中,根据词源“刘德华天意”使用单Term搜索方式检索图5所示的索引倒排表。由于未能从所述索引倒排表查找到相对应的词源“刘德华天意”,因此返回空的搜索结果;所以,总检索结果集合为空集,当前的总检索结果总数为0。
由于当前的总检索结果总数小于搜索结果范围,且当前搜索过程也不是最后一层搜索过程,因此不满足结束条件,将继续执行后续的检索过程。此时,当前未执行的且优先级最高的搜索过程为歌手子层搜索过程,因此可将歌手子层搜索过程确定为当前搜索过程,进行后续的检索。
同理,在歌手子层搜索过程和专辑子层搜索过程中,也都未能从所述索引倒排表查找到相对应的词源“刘德华天意”,因此返回空的搜索结果,所以仍不满足结束条件,将继续进行后续的全拼层搜索过程。
由于全拼层搜索过程中的词源为“liudehuatianyi”,因此在进行全拼层搜索过程中的各个子层搜索过程时,也都未能从所述索引倒排表查找到相对应的词源“liudehuatianyi”,因此返回空的搜索结果,所以仍不满足结束条件,将继续进行后续的分词层搜索过程。
在分词层搜索过程中,将先进行歌曲子层搜索过程,然后再进行歌手子层搜索过程,最后再进行专辑子层搜索过程。
由于分词层搜索过程中有两个词源:“刘德华”和“天意”,且与该词源队列对应的查询逻辑序列中有一个逻辑符号:AND,因此,在分词层搜索过程的各个子层搜索过程中,均可从所述索引倒排表查找到相对应的词源,并获得相应的搜索结果。
当分词层搜索过程中所得到的搜索结果的数目大于50条时,将结束搜索过程,并根据搜索结果范围从所述总检索结果集合中读取所需条数的检索结果作为搜索结果,计算搜索结果总数,然后向用户返回搜索结果和搜索结果总数。
而当分词层搜索过程结束时的搜索结果的数目仍然小于50条时,由于分词层搜索过程已经是最后一层搜索过程,因此同样满足结束条件,此时,可计算搜索结果总数,然后向用户返回搜索结果和搜索结果总数。
在本发明的技术方案中,还提出了一种搜索装置。图9为本发明中的搜索装置的结构示意图。如图9所示,本发明中的搜索装置包括:倒排表生成模块901、存储模块902、词源生成模块903、检索模块904。
所述倒排表生成模块901,用于将全部待检索文档以词源Term为关键字进行索引,建立以Term为关键字索引、以包含该Term的文档的总数TotalCount和包含该Term的文档列表DocList为值的索引倒排表;所述文档列表中的每条记录中均包括一个文档的文档编号和关键属性分值;所述文档列表由有序列表和无序列表组成,所述有序列表中包括n个关键属性分值最大、且按关键属性分值从大到小顺序排列的记录;其中,所述n为预先确定的值;将所述索引倒排表发送给存储模块902;
所述存储模块902,用于存储所述索引倒排表;
所述词源生成模块903,用于根据用户输入的检索字符串生成相应的词源;将所述词源以及用户输入的搜索结果范围发送给检索模块904;
所述检索模块904,用于根据所生成的词源对存储模块902中存储的索引倒排表进行检索,并根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果和相关结果总数;将所述搜索结果和相关结果总数发送给用户。
综上所述,在本发明的技术方案中,由于为同一类文档设置了关键属性和关键属性权重,因此可计算各个文档的关键属性分值,然后根据上述关键属性分值建立索引倒排表,使得该索引倒排表中的文档列表由有序列表和无序列表组成,且有序列表中包括n个关键属性分值最大、且按关键属性分值从大到小顺序排列的记录。由于文档的关键属性分值在建立索引倒排表时即已完成,而且还对索引倒排表中所存储的记录提前完成了部分排序操作,因此可使得在根据用户输入的检索字符串对所述索引倒排表进行检索时,用户所输入的搜索结果范围在绝大部分情况下都包含在有序列表之中,从而可以直接从有序列表中获取所需条数的搜索结果,保证了大多数的搜索结果可以直接从有序列表中获得,而且所获得的搜索结果已按KFScore的大小顺序排列,因此无需再对搜索结果进行排序,从而大大减少了全量数据得分计算以及全量排序操作,大大减少了CPU的运算次数,显著提高了搜索速度,使得搜索速度比现有技术中的搜索速度提高了一个数量级,而且也大大提高了搜索引擎的搜索响应时间。
另外,在本发明的索引倒排表中,所存储的是各个文档的关键属性分值,无需存放计算得分所需的因子,因此减少了存放的字段,大大节省了所占用的内存资源,从而节约了大量的硬、软件资源。
此外,在本发明的索引倒排表中,对有序列表中的记录进行排序的依据是各个文档的关键属性和关键属性分值,而各个文档的关键属性和关键属性分值均可根据实际应用情况预先进行设置,因此可以充分考虑文本相关性和信息相对价值,使得搜索结果的排序更贴近用户需求;同时,还可以灵活设置关键属性和关键属性分值,从而可以在保证文本相关性的基础上定制搜索结果的排序操作。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (25)
1.一种搜索方法,其特征在于,该方法包括:
A、为同一类文档设置至少一个关键属性及相应的关键属性权重,并根据所述关键属性和关键属性权重计算各个文档的关键属性分值KFScore;
B、将全部待检索文档以词源Term为关键字进行索引,建立以Term为关键字索引、以包含该Term的文档的总数TotalCount和包含该Term的文档列表DocList为值的索引倒排表;所述文档列表中的每条记录中均包括一个文档的文档编号和关键属性分值;所述文档列表由有序列表和无序列表组成,所述有序列表中包括n个关键属性分值最大、且按关键属性分值从大到小顺序排列的记录;其中,所述n为预先确定的值;
C、根据用户输入的检索字符串生成相应的词源,根据所生成的词源对所述索引倒排表进行检索,并根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果和相关结果总数。
2.根据权利要求1所述的方法,其特征在于,计算文档的KFScore的公式为:
KFScore=KeyField1*W1+KeyField2*W2+……+KeyFieldX*WX;
其中,W1+W2+……+WX=1;所述KeyFieldx表示所述文档第x个关键属性KeyField的取值,所述Wx表示与所述文档第x个KeyField相对应的关键属性权重Weight的取值。
3.根据权利要求1所述的方法,其特征在于,
所述搜索结果范围包括:起始位置InitialPositon和条数Count;
所述搜索结果范围的最大值为:(InitialPositon+Count)-1。
4.根据权利要求3所述的方法,其特征在于,所述根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果包括:
当所述搜索结果范围的最大值小于或等于所生成的词源对应的有序列表的长度n时,从所述有序列表中的第InitialPositon条记录开始,读取Count条记录作为搜索结果;
当所述搜索结果范围的起始位置位于所生成的词源对应的有序列表中,且所述搜索结果范围的最大值大于所述有序列表的长度n时,从所述有序列表中的第InitialPositon条记录开始,读取(n-InitialPositon+1)条记录;将所生成的词源对应的无序列表中的记录按KFScore的大小顺序排列,并从所述无序列表中的第1条记录开始,读取[Count-(n-InitialPositon+1)]条记录;将所读取的Count条记录作为搜索结果;
当所述搜索结果范围的起始位置位于所生成的词源对应的无序列表中时,将所述无序列表中的记录按KFScore的大小顺序排列,然后从排序后的无序列表中的第(InitialPositon-n)条记录开始,读取Count条记录作为搜索结果。
5.根据权利要求3所述的方法,其特征在于,步骤C中还进一步包括:
当所述索引倒排表中未存储根据用户输入的检索字符串所生成的词源时,将空集作为搜索结果。
6.根据权利要求1所述的方法,其特征在于,所述步骤C包括:
c1、根据用户输入的检索字符串生成一个相应的词源;
c2、根据所生成的词源检索索引倒排表,判断所述索引倒排表中是否存储有该词源;如果是,则执行步骤c3;否则,执行步骤c15;
c3、从所述索引倒排表中读取与所述词源相对应的文档列表;
c4、对用户输入的搜索结果范围进行解析,获得起始位置InitialPositon和条数Count;
c5、判断(InitialPositon+Count)-1>n是否成立,如果是,则执行步骤c6;否则,执行步骤c12;其中,所述n为有序列表的长度;
c6、判断InitialPositon>n是否成立,如果是,则执行步骤c10;否则,执行步骤c7;
c7、从有序列表中的第InitialPositon条记录开始,读取(n-InitialPositon+1)条记录加入到搜索结果列表ResultList中;
c8、将所述无序列表中的记录按KFScore的大小顺序排列;
c9、从所述无序列表中读取[Count-(n-InitialPositon+1)]条记录加入到ResultList中,执行步骤c13;
c10、将所述无序列表中的记录按KFScore的大小顺序排列;
c11、从排序后的无序列表中的第(InitialPositon-n)条记录开始,读取Count条记录加入到ResultList中,执行步骤c13;
c12、从有序列表中的第InitialPositon条记录开始,读取Count条记录加入到ResultList中,执行步骤c13;
c13、将所述ResultList作为搜索结果,并将从所述索引倒排表中读取的与所述词源相对应的文档列表的文档总数TotalCount作为相关结果总数;
c14、将所述搜索结果和相关结果总数返回给用户,结束流程;
c15、将空集作为搜索结果,设相关结果总数等于0,将所述空集和相关结果总数返回给用户,结束流程。
7.根据权利要求1所述的方法,其特征在于,所述步骤C包括:
C1、在索引倒排表的文档列表中设置Y段读取范围;其中,Y≥2;
C2、根据用户输入的检索字符串生成一个词源队列TermArray和查询逻辑序列SetOperators;
C3、对用户输入的搜索结果范围进行解析,获得起始位置InitialPositon和条数Count;
C4、当TermArray的长度大于1时,读取TermArray中的前两个词源,并设置初始值为2的变量i和初始值为1的变量j;
C5、根据所读取的两个词源分别检索索引倒排表,从所述索引倒排表中分别读取与所述两个词源相对应的文档列表中第j段读取范围内的记录,将所读取的记录分别存储于第一检索结果列表ResultList1和第二检索结果列表ResultList2中;
C6、读取SetOperators中的第(i-1)个逻辑符号;
C7、判断所读取的逻辑符号的取值;当所述逻辑符号的取值为AND时,执行步骤C8;当所述逻辑符号的取值为OR时,执行步骤C9;当所述逻辑符号的取值为SUB时,执行步骤C10;
C8、使用与逻辑合并ResultList1和ResultList2,合并结果加入到搜索结果列表ResultList中;执行步骤C11;
C9、使用或逻辑合并ResultList1和ResultList2,合并结果加入到ResultList中;执行步骤C11;
C10、使用差逻辑合并ResultList1和ResultList2,合并结果加入到ResultList中;执行步骤C11;
C11、判断TermArray中是否还有词源未使用;如果是,则执行步骤C12;否则,执行步骤C13;
C12、设i=i+1,读取TermArray中的第i个词源;清空ResultList1和ResultList2,并将ResultList中的记录复制到ResultList2中;根据所读取的词源检索所述索引倒排表,从所述索引倒排表中读取与所读取的词源相对应的文档列表中第j段读取范围内的记录,将所读取的记录存储于ResultList1中;返回执行步骤C6;
C13、判断是否满足结束条件;如果是,则执行步骤C16;否则,执行步骤C14;
C14、清空ResultList1和ResultList2;读取TermArray中的前两个词源,并设置i=2且j=j+1;根据上述所读取的两个词源分别检索索引倒排表,从所述索引倒排表中分别读取与所述两个词源相对应的文档列表中第j段读取范围内的记录,分别存储于ResultList1和ResultList2中;
C15、分别将所述ResultList1和ResultList2中的记录按KFScore的大小顺序排列;返回执行步骤C6;
C16、将ResultList中所存储的记录的数目作为相关结果总数;
C17、向用户返回搜索结果和相关结果总数。
8.根据权利要求7所述的方法,其特征在于,
当Y=2时,将文档列表的有序列表作为第1段读取范围,将整个文档列表作为第2段读取范围。
9.根据权利要求7所述的方法,其特征在于,
当Y=3时,将文档列表的有序列表作为第1段读取范围,将文档列表的无序列表作为第2段读取范围,将整个文档列表作为第3段读取范围。
10.根据权利要求7所述的方法,其特征在于,步骤C5中还进一步包括:
如果索引倒排表中未存储所述两个词源中的任意一个词源,则将未存储的词源所对应的检索结果列表设置为空集。
11.根据权利要求7所述的方法,其特征在于,所述使用与逻辑合并ResultList1和ResultList2,并将合并结果加入到ResultList中包括:
逐一比较ResultList1和ResultList2中的各条记录,将两个检索结果列表中KFScore和文档的标识Did相同的两条记录作为一个搜索结果加入到ResultList中。
12.根据权利要求7所述的方法,其特征在于,所述使用或逻辑合并ResultList1和ResultList2,并将合并结果加入到ResultList中包括:
将所述ResultList1和ResultList2中的各条记录加入到ResultList中,如果有两条记录的KFScore和Did均相同,则在ResultList中删除其中的一条记录。
13.根据权利要求7所述的方法,其特征在于,所述使用差逻辑合并ResultList1和ResultList2,并将合并结果加入到ResultList中包括:
从所述ResultList1中去除ResultList2中存储的各条记录,将进行去除操作后的ResultList1中的记录加入到ResultList中。
14.根据权利要求7所述的方法,其特征在于,所述步骤C12中还进一步包括:
如果索引倒排表中未存储上述所读取的第i个词源,则将所述ResultList1设置为空集,再返回执行步骤C6。
15.根据权利要求7所述的方法,其特征在于,所述结束条件为:
ResultList中所存储的记录的数目大于搜索结果范围的最大值;或者,j等于Y。
16.根据权利要求7所述的方法,其特征在于,所述从所述ResultList中读取所需的记录作为搜索结果包括:
当SumCount≥(InitialPositon+Count)-1时,从所述ResultList中的第InitialPositon条记录开始,读取Count条记录作为搜索结果;
当InitialPositon≤SumCount<(InitialPositon+Count)-1时,从所述ResultList中的第InitialPositon条记录开始,读取(SumCount-InitialPositon+1)条记录作为搜索结果;
当SumCount<InitialPositon时,将空集作为搜索结果。
17.根据权利要求1所述的方法,其特征在于,所述步骤C包括:
根据预先设定的搜索排序规则预先设置多层搜索过程,并设置各层搜索过程的优先级以及各层搜索过程的分层搜索分值范围;
当用户输入检索字符串时,按照优先级的高低顺序进行各层搜索。
18.根据权利要求17所述的方法,其特征在于,所述根据预先设定的搜索排序规则预先设置多层搜索过程,并设置各层搜索过程的优先级包括:
在音乐搜索领域,设置如下的三层搜索过程:精确层搜索过程、全拼层搜索过程和分词层搜索过程;且各层搜索过程的优先级按从高到低的顺序为:精确层搜索过程、全拼层搜索过程、分词层搜索过程。
19.根据权利要求18所述的方法,其特征在于,该方法还进一步包括:
将每层搜索过程分为多个子层搜索过程,并设定各个子层搜索过程的优先级。
20.根据权利要求17所述的方法,其特征在于,所述设置各层搜索过程的分层搜索分值范围包括:
当设置有3层搜索过程,且各层搜索过程的优先级按从高到低的顺序为:第一层搜索过程、第二层搜索过程、第三层搜索过程时,
将第一层搜索过程的分层搜索分值范围设为:[A1,A2];将第二层搜索过程的分层搜索分值范围设为:[B1,B2];将第三层搜索过程的分层搜索分值范围设为:[C1,C2];其中,A1>A2>B1>B2>C1>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-InitialPositon+1)条记录作为搜索结果;
当SumCount<InitialPositon时,将空集作为搜索结果。
25.一种搜索装置,其特征在于,该搜索装置包括:倒排表生成模块、存储模块、词源生成模块和检索模块;
所述倒排表生成模块,用于为同一类文档设置至少一个关键属性及相应的关键属性权重,并根据所述关键属性和关键属性权重计算各个文档的关键属性分值KFScore;将全部待检索文档以词源Term为关键字进行索引,建立以Term为关键字索引、以包含该Term的文档的总数TotalCount和包含该Term的文档列表DocList为值的索引倒排表;所述文档列表中的每条记录中均包括一个文档的文档编号和关键属性分值;所述文档列表由有序列表和无序列表组成,所述有序列表中包括n个关键属性分值最大、且按关键属性分值从大到小顺序排列的记录;其中,所述n为预先确定的值;将所述索引倒排表发送给存储模块;
所述存储模块,用于存储所述索引倒排表;
所述词源生成模块,用于根据用户输入的检索字符串生成相应的词源;将所述词源以及用户输入的搜索结果范围发送给检索模块;
所述检索模块,用于根据所生成的词源对存储模块中存储的索引倒排表进行检索,并根据用户输入的搜索结果范围优先从所生成的词源对应的有序列表中获取记录,以得到所需的搜索结果和相关结果总数;将所述搜索结果和相关结果总数发送给用户。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110461128.4A CN103186650B (zh) | 2011-12-30 | 2011-12-30 | 一种搜索方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110461128.4A CN103186650B (zh) | 2011-12-30 | 2011-12-30 | 一种搜索方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103186650A CN103186650A (zh) | 2013-07-03 |
CN103186650B true CN103186650B (zh) | 2016-05-25 |
Family
ID=48677819
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110461128.4A Active CN103186650B (zh) | 2011-12-30 | 2011-12-30 | 一种搜索方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103186650B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649302A (zh) * | 2015-10-28 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 一种搜索排序方法以及装置 |
CN106649650B (zh) * | 2016-12-10 | 2020-08-18 | 宁波财经学院 | 一种需求信息双向匹配方法 |
CN106909647B (zh) * | 2017-02-21 | 2020-01-03 | 福建榕基软件股份有限公司 | 一种数据检索方法及装置 |
CN109388690A (zh) * | 2017-08-10 | 2019-02-26 | 阿里巴巴集团控股有限公司 | 文本检索方法、用于文本检索的倒排表生成方法以及*** |
CN107729523A (zh) * | 2017-10-27 | 2018-02-23 | 平安科技(深圳)有限公司 | 数据服务方法、电子装置及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101460949A (zh) * | 2006-06-01 | 2009-06-17 | 微软公司 | 索引文档以供信息检索 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7584221B2 (en) * | 2004-03-18 | 2009-09-01 | Microsoft Corporation | Field weighting in text searching |
US7822752B2 (en) * | 2007-05-18 | 2010-10-26 | Microsoft Corporation | Efficient retrieval algorithm by query term discrimination |
CN101685455B (zh) * | 2008-09-28 | 2012-02-01 | 华为技术有限公司 | 数据检索的方法和*** |
US20110022600A1 (en) * | 2009-07-22 | 2011-01-27 | Ecole Polytechnique Federale De Lausanne Epfl | Method of data retrieval, and search engine using such a method |
-
2011
- 2011-12-30 CN CN201110461128.4A patent/CN103186650B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101460949A (zh) * | 2006-06-01 | 2009-06-17 | 微软公司 | 索引文档以供信息检索 |
Also Published As
Publication number | Publication date |
---|---|
CN103186650A (zh) | 2013-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Turnbull et al. | Five Approaches to Collecting Tags for Music. | |
US9830390B2 (en) | Related entities | |
CN103377232B (zh) | 标题关键词推荐方法及*** | |
CN101501630B (zh) | 计算机化搜索结果列表的排序方法及其数据库搜索引擎 | |
US8843470B2 (en) | Meta classifier for query intent classification | |
US8117185B2 (en) | Media discovery and playlist generation | |
US10354308B2 (en) | Distinguishing accessories from products for ranking search results | |
US20090313227A1 (en) | Searching Using Patterns of Usage | |
JP2010541092A5 (zh) | ||
JP2009521750A (ja) | コンテキストを決定するためのコンテンツの分析およびコンテキストに基づく関係のあるコンテンツの供給 | |
US9405803B2 (en) | Ranking signals in mixed corpora environments | |
CN101344890A (zh) | 一种基于观点检索的信息检索文档的评分方法 | |
CN103186650B (zh) | 一种搜索方法和装置 | |
Schedl et al. | Exploring the music similarity space on the web | |
Schedl et al. | A music information system automatically generated via web content mining techniques | |
US20100042610A1 (en) | Rank documents based on popularity of key metadata | |
CN111553765A (zh) | 一种电商搜索排序方法、装置及计算设备 | |
CN115374781A (zh) | 文本数据信息挖掘方法、装置、设备 | |
KR20100115600A (ko) | 온라인 커뮤니티 사용자 간 상호작용 기반 온라인 커뮤니티 포스트 검색 방법, 장치 및 그 방법을 실행하는 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체 | |
JP2006318398A (ja) | ベクトル生成方法及び装置及び情報分類方法及び装置及びプログラム及びプログラムを格納したコンピュータ読み取り可能な記憶媒体 | |
Figueiredo et al. | Evidence of quality of textual features on the web 2.0 | |
US9779140B2 (en) | Ranking signals for sparse corpora | |
US9626435B2 (en) | Using hierarchical scoring for disambiguation in an information retrieval system | |
Hsu et al. | Efficient and effective prediction of social tags to enhance web search | |
EP3356957A1 (en) | Selecting content items based on received term using topic model |
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 |