首页 / 专利库 / 企业组织 / 流程图 / 一种从职位数据库中快速筛选职位的方法

一种从职位数据库中快速筛选职位的方法

阅读:167发布:2020-05-12

专利汇可以提供一种从职位数据库中快速筛选职位的方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种从职位 数据库 中快速筛选职位的方法,该方法涉及到职位数据库、职位索引生成器、职位检索 服务器 和Web客户端,所述职位索引生成器通过开放数据库互连连接职位数据库,职位索引生成器根据职位数据库中的职位数据以基于后缀数组的索引结构生成索引文件,并将生成的索引文件分发至职位检索服务器,职位检索服务器通过套接字与Web客户端相连接,Web客户端将查询 请求 通过套接字发送给职位检索服务器,职位检索服务器检索索引文件,并将检索的结果通过套接字返回Web客户端进行显示。本发明能够实现职位数据库内所有职位快速有效的检索,在保证检索准确性的前提下大幅提高了检索速度。,下面是一种从职位数据库中快速筛选职位的方法专利的具体信息内容。

1.一种从职位数据库中快速筛选职位的方法,其特征在于,该方法中涉及到职位数据库(2)、职位索引生成器(3)、职位检索服务器(4)和Web客户端(5),所述职位索引生成器(3)通过开放数据库互连连接职位数据库(2),职位索引生成器(3)根据职位数据库(2)中的职位数据以基于后缀数组的索引结构生成索引文件,并将生成的索引文件分发至职位检索服务器(4),职位检索服务器(4)通过套接字与Web客户端(5)相连接,Web客户端(5)将查询请求通过套接字发送给职位检索服务器(4),职位检索服务器(4)检索索引文件,并将检索的结果通过套接字返回Web客户端(5)进行显示;
所述职位索引生成器(3)的工作流程为:首先进行职位索引生成器初始化过程模(6),初始化后进行职位数据库连接开启过程模块(7),通过开放数据库互连进行职位数据库连接,并从职位数据库读取职位数据,进行索引生成过程模块(8)后生成索引文件,通过分发过程模块(16)将索引文件分发给各职位检索服务器,之后进行职位数据库连接关闭过程模块(17)关闭职位数据库连接,完成职位索引生成器流程,所述索引生成过程模块(8)包括索引状态区生成过程模块(9),前向索引生成过程模块(10),后向索引生成过程模块(11)和头信息生成过程模块(15),所述后向索引生成过程模块(11)包括以下三个步骤:
第一步:后缀数组生成过程模块(12):所述后缀数组获取过程为:
a、假设原始文本为字符串S,长度为n,字符序号从0开始编,从第i个字符到第n-1个字符的子序列即字符串S为第i个后缀,其中,0≤ic、将n个后缀进行排序,排序规则如下:以n个后缀的第一个字符作为排序关键字,按编码值顺序从小到大进行排序;当第一个字符相同时,将第二个字符作为排序关键字,按编码值顺序从小到大进行排序;依此类推,
d、按后缀的排序结果将每个后缀的后缀编号保存为后缀数组SA,即后缀数组;
第二步:BWT变换过程模块(13):按后缀数组SA的顺序取后缀在原始文本字符串S中的前一个字符,即原始文本字符串S进行BWT变换后的文本字符串S_BWT,利用S_BWT能快速查询关键字在后缀数组SA中的区间,该区间对应的后缀均以该关键字开始,查询过程如下:
a、假设当前的检索词为abcd,字符d开头的后缀在SA中的区间为[u, v),该区间可以预先计算并记录,若能求解字符串cd在SA中的区间[u’, v’),即可通过迭代求解字符串abcd在SA中的区间,
b、假设以字符c开头的后缀在SA中的区间为[p, t),该区间可以预先计算并记录,c、第一个以字符串cd开头的后缀在SA中的起始位置可以表示为u’=p+∑N(x),其中,x表示任意编码比d小的字符串,即比SA[u]对应的字符串小的字符串,∑N(x)表示以x开始的后缀个数求和,∑N(x)等于S_BWT的[0, u)区间中字符c出现的个数,∑N(x)可以通过Wavelet Matrix的存储结构进行快速计算,即可求解第一个以字符串cd开头的后缀在SA中的起始位置u’=p+∑N(x),
d、同样的,可以求解第一个不以字符串cd开头的后缀在SA区间[u’, +∞)中的起始位置v’,由于第一个不以字符串d开头的后缀在SA中的区间[u, +∞)的起始位置为v,只要求解S_BWT在[0, v)区间中字符c出现的个数,即可求解第一个不以字符串cd开头的后缀在SA区间[u’, +∞)中的起始位置v’= p+∑N(y),其中,y表示任意编码比SA[v]对应的字符串小的字符串,∑N(y)表示以y开头的后缀个数求和,
e、重复上述过程,可以迭代求解字符串abcd在SA中的区间,同理,通过迭代可快速求解任意字符串在SA中的区间;
第三步:Wavelet Matrix结构生成过程模块(14):所述Wavelet Matrix结构是将字母表中字符编码按顺序排列后,递归的将低半部分编码为0,高半部分编码为1,并将每一层分为左右两部分,使得0分支放在一起,1分支放在一起,形成一个编码二叉树,利用Wavelet Matrix结构可以快速计算出字符数组中从0位置到任意位置某个字符出现的次数,通过在BWT变换后的文本字符串S_BWT中计算某个字符出现的次数,可以实现关键字在后缀数组SA中区间的快速查询,通过Wavelet Matrix结构实现快速查询过程如下:
a、定义Wavelet Matrix结构第一层的一个节点是{ null | * },第二层的2个节点是{ 0* | 1* },第三层的4个节点是{ 00*,10* | 01*,11* },第四层的8个节点是{ 000*,
100*,010*,110* | 001*,101*,011*,111* },依此类推;其中,‘*’表示只记录比特,即第一层的{ * }为原文本中的每个字符编码的第1个比特取出来组成的数组,‘01*’表示原文本中以‘01’开头的所有字符的第3个比特取出来组成的数组,
b、Wavelet Matrix结构中,下一层的左半部分是上一层的全部“0-子分类”,下一层的右半部分是上一层的全部“1-子分类”,每半部分的节点排序规则为:每半部分的每个节点的编码顺序反转后按二进制从小到大的顺序进行排列,得到该半部分的节点排序,c、假设每个字符编码为5位,则最后一层每个节点的编码顺序为: { 00000,10000,
01000,11000,00100,10100,01100,11100,00010,10010,01010,11010,00110,10110,
01110,11110 | 00001,10001,01001,11001,00101,10101,01101,11101,00011,10011,
01011,11011,00111,10111,01111,11111},只需存储起始位置和每个编码相较于起始位置的偏移,以offset表示,即offset(00000)=0,offset(10000) =count(00000) ,offset (01000) = count(00000)+count(10000),依此类推,
d、假设每个字符编码为5位,将每一层的全部节点组成一个比特数组,分别定义为 Layer1,Layer2,Layer3,Layer4,Layer5 分别计算每一层左半部分的比特数,并定义为 LeftCount1,LeftCount2,LeftCount3,LeftCount4,LeftCount5,
e、定义LeftAdd为某节点左侧的所有节点编码计数,即LeftAdd(01*)表示01*左边的所有节点编码计数,若该节点在最后一层,则为该节点偏移,即LeftAdd(01000*) = offset (01000),
f、定义rank0(A,<=n) 表示比特数组A中前n个比特中‘0’的个数,rank1(A,<=n) 表示比特数组A中前n个比特中‘1’的个数,则成立rank0(A,<=n) + rank1(A,<=n) = n,g、定义count(C,<=m) 表示文本前 m 个字符中属于字符编码C的字符的个数,
h、假设待查找的字符编码为‘01101’,则求解count(01101,<=m)可得到该字符在文本前 m 个字符中出现的次数,下述公式成立:
x1=rank0(Layer1,<=m)=count(0*,<=m);
x2=rank1(Layer2,<=x1)+LeftCount3=LeftAdd(01*)+ count(01*,<=m);
x3=rank1(Layer3,<=x2)+LeftCount4=LeftAdd(011*)+ count(011*,<=m);
x4=rank0(Layer4,<=x3) = LeftAdd(0110*) + count(0110*,<=m);
x5=rank1(Layer5,<=x4)+LeftCount6=LeftAdd(01101*)+ count(01101*,<=m) = 
offset(01101) + count(01101,<=m),
其中,当该比特为‘1’时,需要加相应的左半部分比特数,当该比特为‘0’时,则不需要加左半部分比特数,由于rank0(A,<=n)+ rank1(A,<=n) = n,可通过求解rank0(A,<=n)或rank1(A,<=n)迭代快速求解x1 x5,偏移offset(01101)可以预先计算,因此可以快速求解~
count(01101,<=m) = x5 - offset(01101),从而实现对任意字符在任意位置区间中出现次数的求解;
所述职位数据库(2)采用MySQL5.5.20,所述职位检索服务器(4)的工作流程图为:所述职位检索服务器(4)包括三个线程:主线程模块(20)、搜索线程模块(21)和更新线程模块(22),首先进行职位检索服务器初始化过程模块(18),之后通过索引加载过程模块(19)加载索引文件,加载索引文件后创建并启动主线程模块(20)、搜索线程模块(21)和更新线程模块(22),主线程模块(20)通过套接字在指定端口监听Web客户端的查询请求判断模块(23),若查询请求判断模块(23)的判断结果为“是”,则将查询请求判断模块(23)转给搜索线程模块(21)并继续监听,若查询请求判断模块(23)的判断结果为“否”,则继续监听;
所述搜索线程模块(21)接收Web客户端的查询请求后工作过程包括以下步骤:
a、通过字符串解析过程模块(24)解析查询字符串,
b、通过字符串查询过程模块(25)根据查询字符串中的查询字段和关键字,查找相应的字段,得到匹配的文档列表集合,
c、通过文档列表生成过程模块(26)对文档列表集合中每个文档过滤其前项索引,得到最终符合条件的文档列表集合,
d、通过相关度动态计算过程模块(27)对符合条件的文档列表集合中的文档进行动态相关度计算,所述相关度动态计算是指在对职位数据的检索结果进行评分时,采用包含字段评分和首发时间的动态因素的评分策略,对检索结果进行即时的相关度计算,评分策略包括字段评分和首发时间评分,所述字段评分是根据关键字检索结果所在的字段赋予不同的分数,所述字段包括:职位名、公司名、职位描述,职位名分数高于公司名分数,公司名分数高于职位描述分数,采用0 255的256个整数值作为字段评分的评分区间;所述首发时间~
评分是根据职位的首次发布时间赋予不同的分数,计算职位首发时间与当前时间的时间差,距离当前时间越近,即时间差越小,分数越高,采用0 255的256个整数值作为职位首发~
时间的评分区间,通过分数列表排序可快速实现职位首发时间动态评分的排序,
e、通过分数列表排序过程模块(28)快速实现相关度评分的排序,生成结果集合,所述分数列表排序是指在对职位进行评分时,将职位按照其字段评分和首发时间评分归并到对应的评分区间0 65535的65536个整数值,生成评分区间内任一分数值对应的所有职位集~
合,由于职位数据库中的职位数据按照发布时间进行降序排列,并以降序读取,因此任一分数值对应的所有职位集合内部都是有序的,即该分数值对应的职位集合内部按发布时间降序排列,距离当前时间越近顺序越靠前,根据分数列表的性质,只需要按照分数从高到低、在同一分数内部从前到后取出一定数量的结果即可,从而通过分数列表提高排序速度;
f、根据查询字符串中所需的返回结果数量,通过结果返回过程模块(29)将相应的结果集合以及结果的统计信息返回给Web客户端;
所述更新线程模块(22)监听索引文件的更新请求,若更新请求判断模块(30)的判断结果为“是”,则进行更新并继续监听,若更新请求判断模块(30)的判断结果为“否”,则继续监听;进行更新时,首先通过删除无效索引过程模块(31)删除无效索引,然后通过增量更新索引过程模块(32)对索引块进行增量更新,最后通过清理无效数据过程模块(33)清理现有块中的无效数据;当更新线程模块(22)进行索引更新时,该服务器停止检索服务,在此期间的查询请求将转发到备份服务器进行检索,完成职位检索服务器工作过程。

说明书全文

一种从职位数据库中快速筛选职位的方法

技术领域

[0001] 本发明属于信息检索技术领域,具体涉及一种从职位数据库中快速筛选职位的方法。

背景技术

[0002] 在招聘领域中,大部分网站采用传统的数据库检索技术或者搜索引擎技术实现职位数据的检索。对于职位数据量大且频繁更新的情况,使用传统的数据库检索技术进行职位检索时,检索性能下降明显,检索耗时长,使用搜索引擎技术进行职位检索时,难以对检索结果大范围地根据相关度动态评分进行排序,检索结果准确度低。这将使得用户难以快速准确地获取职位信息,严重伤害了用户体验。
[0003] 在目前的技术条件下,难以直接通过硬件扩展的方式大幅度提高检索性能,并且硬件扩展和升级的成本较高。从检索方法上提高检索性能存在的问题主要在于以下两点:第一是职位数据库数据量大,检索速度慢;第二是检索结果较多,即时排序耗时长,难以采用相关度动态评分因素对检索结果进行相关度动态计算,导致检索结果不准确。

发明内容

[0004] 针对现有技术中存在的问题,本发明提供一种从职位数据库中快速筛选职位的方法,从而实现对职位数据库内所有职位快速有效的检索。
[0005] 为实现上述目的,本发明采用以下技术方案:
[0006] 一种从职位数据库中快速筛选职位的方法,该方法涉及到职位数据库、职位索引生成器、职位检索服务器和Web客户端,所述职位索引生成器通过开放数据库互连连接职位数据库,职位索引生成器根据职位数据库中的职位数据以基于后缀数组的索引结构生成索引文件,并将生成的索引文件分发至职位检索服务器,职位检索服务器通过套接字与Web客户端相连接,Web客户端将查询请求通过套接字发送给职位检索服务器,职位检索服务器检索索引文件,并将检索的结果通过套接字返回Web客户端进行显示。
[0007] 所述职位数据库采用MySQL5.5.20。
[0008] 所述职位索引生成器的工作流程为:首先进行职位索引生成器初始化过程模,初始化后进行职位数据库连接开启过程模块,通过开放数据库互连进行职位数据库连接,并从职位数据库读取职位数据,进行索引生成过程模块后生成索引文件,通过分发过程模块将索引文件分发给各职位检索服务器,之后进行职位数据库连接关闭过程模块关闭职位数据库连接,完成职位索引生成器流程。
[0009] 所述索引生成过程模块包括索引状态区生成过程模块,前向索引生成过程模块,后向索引生成过程模块和头信息生成过程模块。
[0010] 本实施例中,头信息表示文档数量、有效文档数量、文档大小;索引状态区表示文档的有效性;前向索引用于结构化数据的索引,包括月薪范围、公司性质、工作年限、学历要求、公司规模、发布日期、工作类型等结构化字段,每个字段的值都取自有限范围中的一个值,可根据每个值的取值范围用有限的比特位表示,从而编码到一个uint32整型变量中,在一定程度上减少数据存储量;后向索引用于文本数据的索引,按照职位名检索、公司名检索、全文检索三种方式分别创建索引。在生成索引时按照检索方式对应的字段单独创建后缀数组,分别对应职位名搜索、公司名搜索、全文搜索(包括职位名搜索、公司名搜索和职位描述搜索);将文本数据按后缀数组的排序结果进行BWT变换,并以Wavelet Matrix结构进行存储,从而实现查询关键字在后缀数组中的快速查询。
[0011] 本实施例中后向索引生成过程模块包括以下三个步骤:
[0012] 第一步:后缀数组生成过程模块:所述后缀数组获取过程为:
[0013] a、假设原始文本为字符串S,长度为n,字符序号从0开始编,从第i个字符到第n-1个字符的子序列即字符串S为第i个后缀,其中,0≤i
[0014] b、将n个后缀进行编号,
[0015] c、将n个后缀进行排序,排序规则如下:以n个后缀的第一个字符作为排序关键字,按编码值顺序从小到大进行排序;当第一个字符相同时,将第二个字符作为排序关键字,按编码值顺序从小到大进行排序;依此类推,
[0016] d、按后缀的排序结果将每个后缀的后缀编号保存为后缀数组SA,即后缀数组;
[0017] 第二步:BWT变换过程模块:按后缀数组SA的顺序取后缀在原始文本字符串S中的前一个字符,即原始文本字符串S进行BWT变换后的文本字符串S_BWT,利用S_BWT能快速查询关键字在后缀数组SA中的区间,该区间对应的后缀均以该关键字开始,查询过程如下:
[0018] a、假设当前的检索词为abcd,字符d开头的后缀在SA中的区间为[u, v),该区间可以预先计算并记录,若能求解字符串cd在SA中的区间[u’, v’),即可通过迭代求解字符串abcd在SA中的区间,
[0019] b、假设以字符c开头的后缀在SA中的区间为[p, t),该区间可以预先计算并记录,[0020] c、第一个以字符串cd开头的后缀在SA中的起始位置可以表示为u’=p+∑N(x),其中,x表示任意编码比d小的字符串,即比SA[u]对应的字符串小的字符串,∑N(x)表示以x开头的后缀个数求和。∑N(x)等于S_BWT的[0, u)区间中字符c出现的个数,∑N(x)可以通过Wavelet Matrix的存储结构进行快速计算,即可求解第一个以字符串cd开头的后缀在SA中的起始位置u’=p+∑N(x),
[0021] d、同样的,可以求解第一个不以字符串cd开头的后缀在SA区间[u’, +∞)中的起始位置v’,由于第一个不以字符串d开头的后缀在SA中的区间[u, +∞)的起始位置为v,只要求解S_BWT在[0, v)区间中字符c出现的个数,即可求解第一个不以字符串cd开头的后缀在SA区间[u’, +∞)中的起始位置v’= p+∑N(y),其中,y表示任意编码比SA[v]对应的字符串小的字符串,∑N(y)表示以y开头的后缀个数求和,
[0022] e、重复上述过程,可以迭代求解字符串abcd在SA中的区间,同理,通过迭代可快速求解任意字符串在SA中的区间;
[0023] 第三步:Wavelet Matrix结构生成过程模块:所述Wavelet Matrix结构是将字母表中字符编码按顺序排列后,递归的将低半部分编码为0,高半部分编码为1,并将每一层分为左右两部分,使得0分支放在一起,1分支放在一起,形成一个编码二叉树,利用Wavelet Matrix结构可以快速计算出字符数组中从0位置到任意位置某个字符出现的次数,通过在BWT变换后的文本字符串S_BWT中计算某个字符出现的次数,可以实现关键字在后缀数组SA中区间的快速查询,通过Wavelet Matrix结构实现快速查询过程如下:
[0024] a、定义Wavelet Matrix结构第一层的一个节点是{ null | * },第二层的2个节点是{ 0* | 1* },第三层的4个节点是{ 00*,10* | 01*,11* },第四层的8个节点是{ 000*,100*,010*,110* | 001*,101*,011*,111* },依此类推。其中,‘*’表示只记录该比特,即第一层的{ * }为原文本中的每个字符编码的第1个比特取出来组成的数组,‘01*’表示原文本中以‘01’开头的所有字符的第3个比特取出来组成的数组,
[0025] b、Wavelet Matrix结构中,下一层的左半部分是上一层的全部“0-子分类”,下一层的右半部分是上一层的全部“1-子分类”。每半部分的节点排序规则为:每半部分的每个节点的编码顺序反转后按二进制从小到大的顺序进行排列,得到该半部分的节点排序。例如第四层左半部分为“000*,100*,010*,110*”,编码顺序反转后为“*000,*001,*010,*011”,是按二进制从小到大的顺序进行排列的,
[0026] c、假设每个字符编码为5位,则最后一层每个节点的编码顺序为: { 00000,10000,01000,11000,00100,10100,01100,11100,00010,10010,01010,11010,00110,
10110,01110,11110 | 00001,10001,01001,11001,00101,10101,01101,11101,00011,
10011,01011,11011,00111,10111,01111,11111},只需存储起始位置和每个编码相较于起始位置的偏移,以offset表示,即offset(00000)=0,offset(10000) =count(00000) ,offset (01000) = count(00000)+count(10000),依此类推,
[0027] d、假设每个字符编码为5位,将每一层的全部节点组成一个比特数组,分别定义为 Layer1,Layer2,Layer3,Layer4,Layer5 分别计算每一层左半部分的比特数,并定义为 LeftCount1,LeftCount2,LeftCount3,LeftCount4,LeftCount5,
[0028] e、定义LeftAdd为某节点左侧的所有节点编码计数,即LeftAdd(01*)表示01*左边的所有节点编码计数,若该节点在最后一层,则为该节点偏移,即LeftAdd(01000*) = offset (01000),
[0029] f、定义rank0(A,<=n) 表示比特数组A中前n个比特中‘0’的个数,rank1(A,<=n) 表示比特数组A中前n个比特中‘1’的个数,则成立rank0(A,<=n) + rank1(A,<=n) = n,[0030] g、定义count(C,<=m) 表示文本前 m 个字符中属于字符编码C的字符的个数,[0031] h、假设待查找的字符编码为‘01101’,则求解count(01101,<=m)可得到该字符在文本前 m 个字符中出现的次数,下述公式成立:
[0032] x1=rank0(Layer1,<=m)=count(0*,<=m);
[0033] x2=rank1(Layer2,<=x1)+LeftCount3=LeftAdd(01*)+ count(01*,<=m);
[0034] x3=rank1(Layer3,<=x2)+LeftCount4=LeftAdd(011*)+ count(011*,<=m);
[0035] x4=rank0(Layer4,<=x3) = LeftAdd(0110*) + count(0110*,<=m);
[0036] x5=rank1(Layer5,<=x4)+LeftCount6=LeftAdd(01101*)+ count(01101*,<=m) = offset(01101) + count(01101,<=m),
[0037] 其中,当该比特为‘1’时,需要加相应的左半部分比特数,当该比特为‘0’时,则不需要加左半部分比特数,由于rank0(A,<=n)+ rank1(A,<=n) = n,可通过求解rank0(A,<=n)或rank1(A,<=n)迭代快速求解x1 x5,偏移offset(01101)可以预先计算,因此可以快速~求解count(01101,<=m) = x5 - offset(01101),从而实现对任意字符在任意位置区间中出现次数的求解。
[0038] 所述职位检索服务器的工作流程图为:所述职位检索服务器包括三个线程:主线程模块、搜索线程模块和更新线程模块,首先进行职位检索服务器初始化过程模块,之后通过索引加载过程模块加载索引文件,加载索引文件后创建并启动主线程模块、搜索线程模块和更新线程模块,主线程模块通过套接字在指定端口监听Web客户端的查询请求判断模块,若查询请求判断模块的判断结果为“是”,则将查询请求判断模块转给搜索线程模块并继续监听,若查询请求判断模块的判断结果为“否”,则继续监听。
[0039] 所述搜索线程模块接收Web客户端的查询请求后工作过程包括以下步骤:
[0040] a、通过字符串解析过程模块解析查询字符串,
[0041] b、通过字符串查询过程模块根据查询字符串中的查询字段和关键字,查找相应的字段,得到匹配的文档列表集合,
[0042] c、通过文档列表生成过程模块对文档列表集合中每个文档过滤其前项索引,得到最终符合条件的文档列表集合,
[0043] d、通过相关度动态计算过程模块(27)对符合条件的文档列表集合中的文档进行动态相关度计算,所述相关度动态计算是指在对职位数据的检索结果进行评分时,采用包含字段评分和首发时间的动态因素的评分策略,对检索结果进行即时的相关度计算,评分策略包括字段评分和首发时间评分,所述字段评分是根据关键字检索结果所在的字段赋予不同的分数,所述字段包括:职位名、公司名、职位描述,职位名分数高于公司名分数,公司名分数高于职位描述分数,采用0 255的256个整数值作为字段评分的评分区间;所述首发~时间评分是根据职位的首次发布时间赋予不同的分数,计算职位首发时间与当前时间的时间差,距离当前时间越近,即时间差越小,分数越高,采用0 255的256个整数值作为职位首~
发时间的评分区间,通过分数列表排序可快速实现职位首发时间动态评分的排序,[0044] e、通过分数列表排序过程模块(28)快速实现相关度评分的排序,生成结果集合,所述分数列表排序是指在对职位进行评分时,将职位按照其字段评分和首发时间评分归并到对应的评分区间0 65535的65536个整数值,生成评分区间内任一分数值对应的所有职位~
集合,由于职位数据库中的职位数据按照发布时间进行降序排列,并以降序读取,因此任一分数值对应的所有职位集合内部都是有序的,即该分数值对应的职位集合内部按发布时间降序排列,距离当前时间越近顺序越靠前,根据分数列表的性质,只需要按照分数从高到低、在同一分数内部从前到后取出一定数量的结果即可,从而通过分数列表提高排序速度;
[0045] f、根据查询字符串中所需的返回结果数量,通过结果返回过程模块将相应的结果集合以及结果的统计信息返回给Web客户端。
[0046] 所述更新线程模块监听索引文件的更新请求,若更新请求判断模块的判断结果为“是”,则进行更新并继续监听,若更新请求判断模块的判断结果为“否”,则继续监听;进行更新时,首先通过删除无效索引过程模块删除无效索引,然后通过增量更新索引过程模块对索引块进行增量更新,最后通过清理无效数据过程模块清理现有块中的无效数据;当更新线程模块进行索引更新时,该服务器停止检索服务,在此期间的查询请求将转发到备份服务器进行检索,完成职位检索服务器工作过程。
[0047] 与现有技术相比,本发明的有益效果为:
[0048] ①本发明采用基于后缀数组的索引结构生成索引文件,根据职位数据库中的职位数据生成后缀数组,将职位数据按后缀数组的排序结果进行Burrows-Wheeler变换(即BWT变换),并以Wavelet Matrix结构对索引文件进行存储,可以通过迭代实现查询关键字在后缀数组中的快速查询,显著提高了检索速度;②本发明通过主线程监听Web客户端的查询请求,将查询请求转给搜索线程进行检索,并对检索结果进行相关度动态计算,根据相关度的评分将检索结果通过分数列表排序并显示在Web客户端,并利用更新线程监听索引文件,对索引文件进行增量更新,从而实现对职位数据库内所有职位快速有效的检索;③本发明对检索结果相关度评分通过分数列表快速实现检索结果相关度评分的排序,排序速度快,使得相关度动态计算的实时性成为了可能,在检索过程中能够采用包含动态因素的评分策略,将职位的发布日期等动态因素作为评分依据,显著提高了检索结果的准确性。附图说明
[0049] 图1是本发明从职位数据库中快速筛选职位的方法的整体流程结构图。
[0050] 图2是本发明中职位索引生成器工作流程图。
[0051] 图3是本发明中职位检索服务器工作流程图。
[0052] 图中标号:2—职位数据库,3—职位索引生成器,4—职位检索服务器,5—Web客户端,6—职位索引生成器初始化过程模块,7—职位数据库连接开启过程模块,8—索引生成过程模块,9—索引状态区生成过程模块,10—前向索引生成过程模块,11—后向索引生成过程模块,12—后缀数组生成过程模块,13—BWT变换过程模块,14—Wavelet Matrix结构生成过程模块,15—头信息生成过程模块;16—分发过程模块,17—职位数据库连接关闭过程模块;18—职位检索服务器初始化过程模块,19—索引加载过程模块,20—主线程模块,21—搜索线程模块,22—更新线程模块;23—查询请求判断模块,24—字符串解析过程模块,25—字符串查询过程模块,26—文档列表生成过程模块,27—相关度动态计算过程模块,28—分数列表排序过程模块,29—结果返回过程模块;30—更新请求判断模块,31—删除无效索引过程模块,32—增量更新索引过程模块,33—清理无效数据过程模块。

具体实施方式

[0053] 下面结合具体实施例并参照说明书附图,对本发明从职位数据库中快速筛选职位的方法的整体思路和工作过程进行说明。
[0054] 如图1所示,本实施例从职位数据库中快速筛选职位的方法,该方法包括职位数据库2、职位索引生成器3、职位检索服务器4和Web客户端5,所述职位索引生成器3通过开放数据库互连连接职位数据库2,职位索引生成器3根据职位数据库2中的职位数据以基于后缀数组的索引结构生成索引文件,并将生成的索引文件分发至职位检索服务器4,职位检索服务器4通过套接字与Web客户端5相连接,Web客户端5将查询请求通过套接字发送给职位检索服务器4,职位检索服务器4检索索引文件,并将检索的结果通过套接字返回Web客户端5进行显示,职位数据库2采用MySQL5.5.20。
[0055] 如图2所示,本实施例职位索引生成器3的工作流程为:首先进行职位索引生成器初始化过程模块6,初始化后进行职位数据库连接开启过程模块7,通过开放数据库互连进行职位数据库连接,并从职位数据库读取职位数据,进行索引生成过程模块8后生成索引文件,通过分发过程模块16将索引文件分发给各职位检索服务器,之后进行职位数据库连接关闭过程模块17关闭职位数据库连接,完成职位索引生成器流程,其中索引生成过程模块8包括索引状态区生成过程模块9,前向索引生成过程模块10,后向索引生成过程模块11和头信息生成过程模块15,所述后向索引生成过程模块11包括以下三个步骤:
[0056] 第一步:后缀数组生成过程模块12:所述后缀数组获取过程为:
[0057] a、假设原始文本为字符串S,长度为n,字符序号从0开始编,从第i个字符到第n-1个字符的子序列即字符串S为第i个后缀,其中,0≤i
[0058] b、将n个后缀进行编号,
[0059] c、将n个后缀进行排序,排序规则如下:以n个后缀的第一个字符作为排序关键字,按编码值顺序从小到大进行排序;当第一个字符相同时,将第二个字符作为排序关键字,按编码值顺序从小到大进行排序;依此类推,
[0060] d、按后缀的排序结果将每个后缀的后缀编号保存为后缀数组SA,即后缀数组;
[0061] 第二步:BWT变换过程模块13:按后缀数组SA的顺序取后缀在原始文本字符串S中的前一个字符,即原始文本字符串S进行BWT变换后的文本字符串S_BWT,利用S_BWT能快速查询关键字在后缀数组SA中的区间,该区间对应的后缀均以该关键字开始,查询过程如下:
[0062] a、假设当前的检索词为abcd,字符d开头的后缀在SA中的区间为[u, v),该区间可以预先计算并记录,若能求解字符串cd在SA中的区间[u’, v’),即可通过迭代求解字符串abcd在SA中的区间,
[0063] b、假设以字符c开头的后缀在SA中的区间为[p, t),该区间可以预先计算并记录,[0064] c、第一个以字符串cd开头的后缀在SA中的起始位置可以表示为u’=p+∑N(x),其中,x表示任意编码比d小的字符串,即比SA[u]对应的字符串小的字符串,∑N(x)表示以x开头的后缀个数求和。∑N(x)等于S_BWT的[0, u)区间中字符c出现的个数,∑N(x)可以通过Wavelet Matrix的存储结构进行快速计算,即可求解第一个以字符串cd开头的后缀在SA中的起始位置u’=p+∑N(x),
[0065] d、同样的,可以求解第一个不以字符串cd开头的后缀在SA区间[u’, +∞)中的起始位置v’,由于第一个不以字符串d开头的后缀在SA中的区间[u, +∞)的起始位置为v,只要求解S_BWT在[0, v)区间中字符c出现的个数,即可求解第一个不以字符串cd开头的后缀在SA区间[u’, +∞)中的起始位置v’= p+∑N(y),其中,y表示任意编码比SA[v]对应的字符串小的字符串,∑N(y)表示以y开头的后缀个数求和,
[0066] e、重复上述过程,可以迭代求解字符串abcd在SA中的区间。同理,通过迭代可快速求解任意字符串在SA中的区间;
[0067] 第三步:Wavelet Matrix结构生成过程模块14:所述Wavelet Matrix结构是将字母表中字符编码按顺序排列后,递归的将低半部分编码为0,高半部分编码为1,并将每一层分为左右两部分,使得0分支放在一起,1分支放在一起,形成一个编码二叉树,利用Wavelet Matrix结构可以快速计算出字符数组中从0位置到任意位置某个字符出现的次数,通过在BWT变换后的文本字符串S_BWT中计算某个字符出现的次数,可以实现关键字在后缀数组SA中区间的快速查询,通过Wavelet Matrix结构实现快速查询过程如下:
[0068] a、定义Wavelet Matrix结构第一层的一个节点是{ null | * },第二层的2个节点是{ 0* | 1* },第三层的4个节点是{ 00*,10* | 01*,11* },第四层的8个节点是{ 000*,100*,010*,110* | 001*,101*,011*,111* },依此类推。其中,‘*’表示只记录该比特,即第一层的{ * }为原文本中的每个字符编码的第1个比特取出来组成的数组,‘01*’表示原文本中以‘01’开头的所有字符的第3个比特取出来组成的数组,
[0069] b、Wavelet Matrix结构中,下一层的左半部分是上一层的全部“0-子分类”,下一层的右半部分是上一层的全部“1-子分类”。每半部分的节点排序规则为:每半部分的每个节点的编码顺序反转后按二进制从小到大的顺序进行排列,得到该半部分的节点排序。例如第四层左半部分为“000*,100*,010*,110*”,编码顺序反转后为“*000,*001,*010,*011”,是按二进制从小到大的顺序进行排列的,
[0070] c、假设每个字符编码为5位,则最后一层每个节点的编码顺序为: { 00000,10000,01000,11000,00100,10100,01100,11100,00010,10010,01010,11010,00110,
10110,01110,11110 | 00001,10001,01001,11001,00101,10101,01101,11101,00011,
10011,01011,11011,00111,10111,01111,11111},只需存储起始位置和每个编码相较于起始位置的偏移,以offset表示,即offset(00000)=0,offset(10000) =count(00000) ,offset (01000) = count(00000)+count(10000),依此类推,
[0071] d、假设每个字符编码为5位,将每一层的全部节点组成一个比特数组,分别定义为 Layer1,Layer2,Layer3,Layer4,Layer5 分别计算每一层左半部分的比特数,并定义为 LeftCount1,LeftCount2,LeftCount3,LeftCount4,LeftCount5,
[0072] e、定义LeftAdd为某节点左侧的所有节点编码计数,即LeftAdd(01*)表示01*左边的所有节点编码计数,若该节点在最后一层,则为该节点偏移,即LeftAdd(01000*) = offset (01000),
[0073] f、定义rank0(A,<=n) 表示比特数组A中前n个比特中‘0’的个数,rank1(A,<=n) 表示比特数组A中前n个比特中‘1’的个数,则成立rank0(A,<=n) + rank1(A,<=n) = n,[0074] g、定义count(C,<=m) 表示文本前 m 个字符中属于字符编码C的字符的个数,[0075] h、假设待查找的字符编码为‘01101’,则求解count(01101,<=m)可得到该字符在文本前 m 个字符中出现的次数,下述公式成立:
[0076] x1=rank0(Layer1,<=m)=count(0*,<=m);
[0077] x2=rank1(Layer2,<=x1)+LeftCount3=LeftAdd(01*)+ count(01*,<=m);
[0078] x3=rank1(Layer3,<=x2)+LeftCount4=LeftAdd(011*)+ count(011*,<=m);
[0079] x4=rank0(Layer4,<=x3) = LeftAdd(0110*) + count(0110*,<=m);
[0080] x5=rank1(Layer5,<=x4)+LeftCount6=LeftAdd(01101*)+ count(01101*,<=m) = offset(01101) + count(01101,<=m),
[0081] 其中,当该比特为‘1’时,需要加相应的左半部分比特数,当该比特为‘0’时,则不需要加左半部分比特数,由于rank0(A,<=n)+ rank1(A,<=n) = n,可通过求解rank0(A,<=n)或rank1(A,<=n)迭代快速求解x1 x5,偏移offset(01101)可以预先计算,因此可以快速~求解count(01101,<=m) = x5 - offset(01101),从而实现对任意字符在任意位置区间中出现次数的求解。
[0082] 如图3所示,本实施例职位检索服务器4的工作流程图为:所述职位检索服务器4包括三个线程:主线程模块20、搜索线程模块21和更新线程模块22,首先进行职位检索服务器初始化过程模块18,之后通过索引加载过程模块19加载索引文件,加载索引文件后创建并启动主线程模块20、搜索线程模块21和更新线程模块22,主线程模块20通过套接字在指定端口监听Web客户端的查询请求判断模块23,若查询请求判断模块23的判断结果为“是”,则将查询请求判断模块23转给搜索线程模块21并继续监听,若查询请求判断模块23的判断结果为“否”,则继续监听,其中搜索线程模块21接收Web客户端的查询请求后工作过程包括以下步骤:
[0083] a、通过字符串解析过程模块24解析查询字符串,
[0084] b、通过字符串查询过程模块25根据查询字符串中的查询字段和关键字,查找相应的字段,得到匹配的文档列表集合,
[0085] c、通过文档列表生成过程模块26对文档列表集合中每个文档过滤其前项索引,得到最终符合条件的文档列表集合,
[0086] d、通过相关度动态计算过程模块(27)对符合条件的文档列表集合中的文档进行动态相关度计算,所述相关度动态计算是指在对职位数据的检索结果进行评分时,采用包含字段评分和首发时间的动态因素的评分策略,对检索结果进行即时的相关度计算,评分策略包括字段评分和首发时间评分,所述字段评分是根据关键字检索结果所在的字段赋予不同的分数,所述字段包括:职位名、公司名、职位描述,职位名分数高于公司名分数,公司名分数高于职位描述分数,采用0 255的256个整数值作为字段评分的评分区间;所述首发~时间评分是根据职位的首次发布时间赋予不同的分数,计算职位首发时间与当前时间的时间差,距离当前时间越近,即时间差越小,分数越高,采用0 255的256个整数值作为职位首~
发时间的评分区间,通过分数列表排序可快速实现职位首发时间动态评分的排序,[0087] e、通过分数列表排序过程模块(28)快速实现相关度评分的排序,生成结果集合,所述分数列表排序是指在对职位进行评分时,将职位按照其字段评分和首发时间评分归并到对应的评分区间0 65535的65536个整数值,生成评分区间内任一分数值对应的所有职位~
集合,由于职位数据库中的职位数据按照发布时间进行降序排列,并以降序读取,因此任一分数值对应的所有职位集合内部都是有序的,即该分数值对应的职位集合内部按发布时间降序排列,距离当前时间越近顺序越靠前,根据分数列表的性质,只需要按照分数从高到低、在同一分数内部从前到后取出一定数量的结果即可,从而通过分数列表提高排序速度;
[0088] f、根据查询字符串中所需的返回结果数量,通过结果返回过程模块29将相应的结果集合以及结果的统计信息返回给Web客户端。
[0089] 本实施例中更新线程模块22监听索引文件的更新请求,若更新请求判断模块30的判断结果为“是”,则进行更新并继续监听,若更新请求判断模块30的判断结果为“否”,则继续监听;进行更新时,首先通过删除无效索引过程模块31删除无效索引,然后通过增量更新索引过程模块32对索引块进行增量更新,最后通过清理无效数据过程模块33清理现有块中的无效数据;当更新线程模块22进行索引更新时,该服务器停止检索服务,在此期间的查询请求将转发到备份服务器进行检索,完成职位检索服务器工作过程。
[0090] 以上,仅为本发明的较佳实施例,但本发明的保护范围并不局限于此。任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或者替换,都应涵盖在发明的保护范围之内。因此,本发明的保护范围应该以权利要求书要求所界定的保护范围为准。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈