发明内容
本发明提供了一种对搜索结果进行排序的方法及装置,能够依据多种搜索策略对搜索结果进行精确排序,并且能够体现出搜索结果的实时性变化。
本发明实施例提出的一种对搜索结果进行排序的方法,包括如下步骤:
A、对于每一个搜索项目,从N×N的搜索策略库矩阵中抽取出M×N的子搜索策略矩阵,所述子搜索策略矩阵的每一行对应一个搜索策略层,且从第1行至第M行对应的搜索策略层的优先级权重值依次递增或递减,同一个搜索策略层的N个搜索策略优先级相同;M和N为大于1的自然数,且M≤N;
B、从所述子搜索策略矩阵每一个搜索策略层选取至少一个搜索策略组装成查询集合,将所述查询集合对所有被搜索到的文档根据搜索策略进行匹配,将得到的文档得分乘以搜索策略对应的优先级权重值得到文档总体得分;每一个文档总体得分作为一个结果集对象;
C、生成M个数据块,每个数据块对应至少一个结果集对象,将所有的结果集对象存放到一个数组里面,每个数据块里面包含了该数组的两个上下标;
D、从各个数据块中选取结果集对象,将所选取的结果集组装成完整的结果集。
较佳地,所述数组的上标和下标分别为m和n,m和n均为自然数且n>m,所述步骤D包括:
D1、将m和n顺序与各个数据块中记录的上下坐标进行比较定位数据块;
D2、判断m和n是否在同一个数据块中,若是转至步骤D7,否则执行步骤D3;
D3、以上标m所在的数据块为第1个数据块,以下标n所在的数据块作为最后1个数据块,取出所述第1个数据块中从上标m对应的结果集对象到该数据块的最后一个结果集对象;判断上标m至下标n之间的数据块个数是否大于2,如果大于2则转步骤D4,否则执行步骤D5:
D4、取出第1个数据块和最后1个数据块之间的所有数据块的所有结果集对象,然后转至步骤D5;
D5、取出最后1个数据块中第1个结果集对象到下标n对应的结果集对象;
D6、将取出的所有结果集对象进行顺序合并作为当前结果集;
D7、返回当前结果集。
较佳地,所述步骤D之后,进一步包括:
将收集到的实时数据作为外在排序因子生成排序因子矩阵,排序因子矩阵的每一行对应子搜索策略矩阵的一个搜索策略层;
定位要排序的数据块及块内区域,根据所述排序因子矩阵对要排序的数据块的块内区域进行排序;
从排序后的数据块中选取结果集对象,将所选取的结果集组装成完整的结果集。
本发明实施例还提出一种对搜索结果进行排序的装置,包括:
搜索策略矩阵生成模块,用于对于每一个搜索项目,从N×N的搜索策略库矩阵中抽取出M×N的子搜索策略矩阵,所述子搜索策略矩阵的每一行对应一个搜索策略层,且从第1行至第M行对应的搜索策略层的优先级依次递增或递减,同一个搜索策略层的N个搜索策略优先级相同;M和N为大于1的自然数,且M≤N;
结果集对象模块,从所述子搜索策略矩阵每一个搜索策略层选取至少一个搜索策略组装成查询集合,将所述查询集合对所有被搜索到的文档根据搜索策略进行匹配,将得到的文档得分乘以搜索策略对应的优先级权重值得到文档总体得分;每一个文档总体得分作为一个结果集对象;
数据块划分模块,用于生成M个数据块,每个数据块对应至少一个结果集对象,将所有的结果集对象存放到一个数组里面,每个数据块里面包含了该数组的两个上下标;
组装模块,用于从各个数据块中选取结果集对象,将所选取的结果集组装成完整的结果集。
较佳地,该装置进一步包括:
外在排序因子单元,用于将收集到的实时数据作为外在排序因子生成排序因子矩阵,排序因子矩阵的每一行对应子搜索策略矩阵的一个搜索策略层;
块内排序单元,定位要排序的数据块及块内区域,根据所述排序因子矩阵对要排序的数据块的块内区域进行排序;
数据集二次组装单元,用于从块内排序单元排序后的数据块中选取结果集对象,将所选取的结果集组装成完整的结果集。
从以上技术方案可以看出,通过将多种搜索策略生成搜索策略矩阵,对搜索结果集进行数据域的划分,然后对搜索结果集进行组装来保证搜索结果集排序的精确性,同时考虑用户点击量等实时数据加入排序权重通过块内二次排序来保证结果集排序的实时性。此外,本发明方案还将搜索规则插件化,易于对排序因子进行扩展。
具体实施方式
本发明技术方案对多种搜索策略进行分层,对每层搜索策略进行块内排序,从而实现根据优先级别生成一个搜索策略矩阵,此外,将各种实时的排序因子以插件化的形式加入排序策略中,实现搜索结果集排序的实时性。
图1所示为本发明实施例方案的基本流程,包括如下步骤:
步骤101:生成搜索策略矩阵:根据搜索业务的需求选择多于一个的搜索策略,依据优先级别将所选择的搜索策略生成一个策略矩阵。
步骤102:搜索结果块划分:根据搜索策略矩阵的行数来划分,每一行对应一个搜索结果子集。
步骤103:搜索结果块内排序:根据搜索策略矩阵的统一级别的搜索策略进行块内排序;
步骤104:生成搜索排序因子矩阵:将实时得到的数据(例如用户搜索频率、点击率)当作排序的因素对结果子集进行排序。
步骤105:搜索结果子集组装:根据返回结果个数范围的要求从各个模块选取一定数量的结果子集组装成符合要求的结果集。
图2示出了本发明实施例提出的对搜索结果进行排序的装置的框图,该装置包括搜索策略矩阵生成模块201、结果集对象模块202、数据块划分模块203、实时排序模块204和组装模块205。
所述搜索策略矩阵生成模块201用于生成搜索策略矩阵,所述搜索策略是为了满足搜索的业务需求而采用的搜索策略,本发明使用搜索策略矩阵将所有的搜索策略进行分级从而形成一个搜索策略矩阵。
图3示出了搜索策略矩阵的一个示意图。其中左边的N×N矩阵代表由N个搜索策略组成的搜索策略库矩阵。在实际搜索过程中,需要从搜索策略库矩阵中进行策略抽取,得到子搜索策略矩阵,假设子搜索策略矩阵为M*N矩阵。根据不用的实际应用,该子搜索策略矩阵有不同的组成方式。
如果是对单项内容进行搜索,子搜索策略矩阵中的第1行至第M行中的每一行为一个搜索策略层,每一行的优先级别是递增或递减的。在某一搜索策略层上,有1~N个具体搜索策略,如果某一行上搜索策略个数未达到N个,例如为N1个(N1<N),则从第N1+1个到第N个留空。此情况下无优先级相同的层次。
如果是对多项内容进行搜索,由于每项内容之间也存在优先级,子搜索策略矩阵中的第1行至第M行中的每一行为一个搜索策略层,优先级别是按照搜索策略和所搜内容综合权重递增或递减的。在某一搜索策略层上,有1~N个具体的搜索策略,如果某一行上搜索策略个数未达到N个,例如为N2个(N2<N),则从第N2+1个到第N个留空。在该情况下,层次之间会出现相同的策略层,比如有L项搜索项目,则该矩阵大小为L×(M×N)。
同一搜索策略层上,各个搜索策略的优先级别是相同的,这样用户可以根据搜索需求,从子搜索策略矩阵中抽取搜索策略的组合,搜索策略组合包含的搜索策略的个数在1~M×N之间,这样用户可以灵活的选取搜索策略矩阵上的任意个数的策略进行排序。
以音乐垂直搜索为例,所有的搜索策略如下:
1)完全精确匹配;
2)过滤掉敏感或特殊字符的精确查询;
3)全量拼音查询;
4)拼音首字母查询;
5)前缀查询;
6)后缀查询;
7)分词全部命中查询;
8)分词部分命中查询;
9)中文模糊匹配;
10)英文模糊匹配;
11)拼音纠错查询;
将这11个搜索策略形成11×11的搜索策略库矩阵,然后根据不同的搜索需求从搜索策略库矩阵中抽取出子搜索策略矩阵。
图4为本发明的一个具体实施例中对音乐搜索所使用的子搜索策略矩阵的示意图。针对音乐中的歌手、专辑、歌曲等单项查询将11个搜索策略分6层,形成6×4的子搜索策略矩阵,共包括6个搜索策略层:分别是精确查询、前缀查询、后缀查询、分词查询、模糊匹配和纠错查询。
(1)、精确查询
精确查询可以是如下任一种搜索策略:
a.完全精确匹配。
b.过滤掉敏感或特殊字符的精确查询(去掉所有敏感及特殊字符,英文统一转成小写或者大写等)。
c.全量拼音查询(拼音全量字段)。
d.拼音首字母查询(拼音首字母字段)。
(2)、前缀查询
(3)、后缀查询
(4)、分词查询
分词全部命中
分词部分命中
(5)、模糊匹配
a.中文模糊
b.英文模糊
(6)、纠错查询
纠错查询主要是对拼音纠错。拼音纠错就是对容易混淆的拼音进行相互转换,例如s与sh转换,l与n转换等。
如果是对歌手、歌曲、专辑综合字段这三个搜索项目进行搜索,如果选取前三层策略,则子搜索策略矩阵大小为3×(3×4)。
一般情况下,都会选择搜索策略库矩阵中的一部分搜索策略,比如音乐搜索里面的中文歌手搜索可以将英文模糊策略去掉,而歌词搜索一般只选取分词搜索策略;
在实际操作的过程中会把各个搜索策略映射成对应的数字,将搜索策略矩阵转化为数字矩阵。
搜索结果块划分模块202用于从所述子搜索策略矩阵每一个搜索策略层选取至少一个搜索策略组装成查询集合,将所述查询集合对所有被搜索到的文档根据搜索策略进行匹配,将得到的文档得分乘以搜索策略对应的优先级权重值得到文档总体得分;每一个文档总体得分作为一个结果集对象。
对于每一个搜索策略层设置一个对应的优先级权重值,例如该权重值设置为100,优先级最低层权重值为1,优先级每高一层权重值乘以100,以此类推。将搜索得到的文档得分乘以搜索策略对应的优先级权重值得到文档总体得分。因为每个层之间文档总体得分的分值差别比较大,所以很容易将搜索得到的文档按照搜索策略层分成块,分块后块内是有序的。
结果集分块策略为每一策略层划分一个数据块,如果子搜索策略矩阵为M×N矩阵,则会生成M个数据块,每个数据块对应一个或多个结果集对象,将所有的结果集对象存放到一个数组里面,每个数据块里面包含了该数据域的范围信息即数组的两个上下标,如图5所示。
比如音乐歌手搜索会把结果集合分成6个数据块,然后从每个数据块中按要求选取一定数量的结果集对象。
数据块划分模块204,用于生成M个数据块,每个数据块对应至少一个结果集对象,将所有的结果集对象存放到一个数组里面,每个数据块里面包含了该数据域的范围信息即数组的两个上下标。
组装模块205,用于从各个数据块中选取结果集对象,将所选取的结果集组装成完整的结果集,图6为其工作原理示意图。
假设区域值参数为上标m和下标n,m和n均为自然数且n>m,组装的流程图见图7,流程如下:
步骤701:将m和n顺序与各个数据块中记录的上下坐标进行比较定位数据块;
步骤702:判断m和n是否在同一个数据块中,若否执行步骤703,若是转至步骤707;
步骤703:以上标m所在的数据块为第1个数据块,以下标n所在的数据块作为最后1个数据块,取出所述第1个数据块中从上标m对应的结果集对象到该数据块的最后一个结果集对象组成的结果集对象子集;
步骤704:判断上标m至下标n之间的数据块个数是否大于2,如果大于2则转步骤705,否则执行步骤706:
步骤705:取出第1个数据块和最后1个数据块之间的所有数据块的所有结果子集;
步骤706:取出最后1个数据块中第1个结果集对象到下标n对应的结果集对象组成的上部数据子集;
步骤707:将取出的结果集对象进行顺序合并作为当前结果集;
步骤708:返回当前结果集。
实时排序模块204,用于实现根据实时收集的相关数据对搜索结果的排序进行相应调整。
垂直搜索引擎一般对数据的实时性排序要求比较高,比如一首歌曲的热度可以根据用户的点击量和试听量等来反映,而这些数据是实时的,因此需要对搜索得到的结果进行二次实时排序。本发明为了解决这个问题,将这些实时数据作为外在排序因子,以所述外在排序因子为依据在块内进行二次实时排序,之所以不选择整体二次排序是因为整体二次排序会把结果集整体顺序打乱,另外性能上也会受影响。
实时排序模块204包括外在排序因子单元、块内排序单元和数据集二次组装单元。
外在排序因子单元用于将收集到的实时数据作为外在排序因子生成排序因子矩阵,排序因子矩阵的每一行对应子搜索策略矩阵的一个搜索策略层。以歌曲搜索为例,本发明实施例使用用户点击量及业务定质量作为每个搜索策略层的外在排序因素。其排序因子矩阵见图8。
块内排序单元用于根据外在排序因子对应的值对数据块进行二次排序,为了提高效率只对命中的数据区域进行排序,其流程图见图9,包括如下步骤:
步骤901:根据参数m和n定位要排序的数据块及块内区域;
步骤902:从数据库中实时取出排序因子对应的数值;
步骤903:对排序区域进行排序。
通过块内排序能很好的向用户反应出实时的排序结果,比如歌曲搜索通过用户点击量和业务量等因子进行二次排序后,能达到既按照搜索策略进行排序又能实时反应出歌曲热度的特点。
数据二次组装单元用于将块内排序单元排序后的数据块中选取结果集对象,将所选取的结果集组装成完整的结果集。
这里的数据二次组装单元与上述结果集对象模块203的唯一区别在于加上了通过排序因子二次块内排序的功能,见附图11,具体流程不再描述。
总之,本发明主要解决垂直领域搜索引擎对排序条件多及排序要求精确度高的问题,通过搜索策略矩阵及数据块划分等方式可以根据需求任务组合搜索策略进行精确的排序;通过外在排序因子及块内二次排序来解决垂直搜索引擎实时结果排序的问题。
以音乐歌曲搜索为例,未使用本发明的方法排序结果中的分词策略和全拼策略等策略之间的结果集是混淆的,没有精确的界限,通过本发明的方法排序后这些结果集有精确的界限。
以音乐搜索中综合字段搜索为例(歌曲、专辑、歌手),未使用本发明的方法排序不仅结果中的分词策略和全拼策略等策略之间的结果集是混淆的,而且没有按照歌曲、歌手、专辑等优先级进行排序,使用本发明的方法可以使结果集按照搜索策略和搜索内容精确排序。
以音乐搜索歌曲为例,通过实时排序能达到既按照搜索策略进行排序又能实时反应出歌曲热度的特点,体现出垂直搜索的排序要求高的特点,满足用户的搜索需求。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。