一种索引数据更新方法、系统及搜索引擎的制作方法_2

文档序号:9911231阅读:来源:国知局
括局域网(LAN)、广域网(WAN)、电话网络和终端设备上均 包含有用来管理系统资源、控制其它程序运行的操作系统软件,以及用来实现特定功能模 块的应用软件。
[0033]如图1所示,搜索引擎100接收到来自客户端30的搜索查询请求,通过搜索组件130 中的搜索模块向数据存储库110中搜索结果,例如搜索模块根据分词结果和筛选条件进行 文档索引的交并集运算,得到匹配的文档集并汇总;然后,由排序模块对上述文档集进行定 制化的排序,再交由用户界面140进行展示。
[0034]根据一种实现方式,搜索引擎100会事先搜集一批数据,并以某种方式存放在系统 1 〇〇的数据存储库11 〇中,可以根据索引文件的不同,将数据存储库11 〇区分为论坛索引库、 文章索引库、视频索引库等等。搜索引擎100还包括索引数据更新系统120,根据上文所述, 通过索引数据更新系统120接收来自第三方推送中心20的索引更新消息。也就是说,第三方 推送中心20和搜索引擎100之间可通过一份预定的数据交互协议来进行交互。在本实施例 中,第三方推送中心20将数据的更新封装成统一格式的索引更新消息(统一的格式会在下 文中具体介绍),索引数据更新系统120接收此类消息并变更索引数据,这部分的索引数据 在数据存储库11 〇中和全量索引合并后提供服务。
[0035]这里,索引数据更新系统120负责接收索引数据更新消息,解析该更新消息,并向 数据存储库110进行更新操作,使得搜索引擎100可以在用户界面140实时呈现查询消息,进 而实现索引数据实时更新。
[0036]图2示出了根据本发明一个实施例的索引数据更新方法200的流程图。该方法200 始于步骤S210,接收第三方推送中心推送的索引数据更新消息。在本实施例中,更新消息要 按"数据ID+数据字符串+消息类型+消息数据版本"的统一格式进行封装。更新消息格式参 考如下:
[0037]
[0038] 由于整个检索系统是各类异构数据构成的混合索引,并且后期还会持续接入更多 类型的数据。基于这样的考虑,本方案中设计了如上的统一规格的更新消息和处理逻辑,把 异构的数据编成统一的data字段,封装了异构性,就能够适配多种类型数据的实施更新,保 证各种异构数据的兼容处理。
[0039] 从上述消息格式中可以看出,与消息类型相对应的更新操作包括:对索引库中原 始索引文件的增加、删除、修改、条件更新操作。另外,在基于图1的描述中已经提到,第三方 推送中心包括数据库、推送作业、以及爬虫系统。
[0040] 随后在步骤S220中,保存上述更新消息。在本方案中,按照消息时间保存更新消 息。具体来讲,采用开源的消息订阅系统kafka作为基本的数据存储单元,在消息的 Producer端(即,发送消息方)采用统一入口保证消息的时序性,并在消息的Consumer端 (即,接收消息方)采用group方式保证消息消化的时序性。根据一个实施例,在存储消息时, 定义如下存储协议:
[0041]
[0042] 在定义如上存储协议后,就可以保证消息的时序性并可回放定位,利用kafka的 seek功能和消息时间我们可以回放消息至任一时刻,而这里的消息操作都具有事务安全的 特性。基于此,当接收到回放信号时,就可以根据消息时间定位到对应的更新消息,以实现 位于下游索引库的回放定位,进而满足算法演示,故障处理等需要。
[0043]随后在步骤S230中,根据消息数据版本解析更新消息,根据数据字符串对索引库 中的原始索引文件进行与消息类型相对应的更新操作。例如,当解析更新消息得到消息类 型〇perati〇n = 0时,对应的更新操作应该是在索引库中增加索引,于是,将数据字符串中待 更新数据的字段名称和字段值添加到索引库中,作为一条新增索引数据。
[0044] 再如,当解析更新消息得到消息类型为operati〇n = 3时,对应条件更新操作,此时 的数据字符串data由两部分组成,一部分还和原来一样,是待更新的字段名称及其值,另一 部分是更新条件。因此,解析更新消息时还要获取数据字符串data中的更新条件。
[0045] 在现实操作中,往往会有大批量的条件更新操作,如论坛名称变更,文章属性变更 等等。在传统的基于文档消息的更新机制下,当面对几十万甚至几百万的类似更新时,是很 难做到及时性的。本方案对此做了有效处理,本步骤中,对于大批量的条件更新,采用批量 更新操作。
[0046] 例如批量变更所有宝马论坛的帖子为BMW论坛的帖子,此时,更新消息的消息体参 考如下:
[0047]
[0048]在接收到如上更新消息后,解析该消息,一方面对索引库做如下的等价操作:
[0049] update table set topic_name ='bmw'where name='宝马';
[0050] -方面对索引服务发出指令,进行条件索引更新。这里我们的索引服务内置支持 条件索引更新的方式。指令形如:
[0051 ] http: / / xxxx: port/?_modify = 1&-topic_name =宝马&topic_name = bmw [0052]通过对批量条件更新操作的兼容处理,大大提高了更新的实效性,比传统索引更 新方案在同样量级的数据更新上速度大大提高。
[0053]根据本发明的实施方式,在步骤S230解析更新消息的步骤之前,还包括步骤:通过 调用预置的hook函数,对索引库中的更新消息进行适配处理。具体而言,就是基于python的 运行时装入模块技术,形成一种Hook处理机制,在更新消息入库或更新索引的时候进行特 别处理。例如论坛索引库中的数据需要检验并修正其原始数据,则可以加个Hook函数在数 据流环节处理实现,又如,文章索引库的数据需要实时计算其文档的重要性,也可以通过 Hook函数在数据流环节实现。
[0054] 关键实现代码如下:
[0055]
[0056]
[0057] 在这种适配处理机制下,不用针对整体数据流做代码修改,只通过简单适配和编 写特定的Hook函数即可保证各类型的数据的即时有效推送。
[0058]根据上述流程,以统一的消息格式封装更新数据,不仅保证了各种异构数据的兼 容处理,还可确保更新消息自推送进来至呈现给用户仅存在秒级的延迟。进一步地,通过增 加的适配处理、回放定位、批量条件更新等处理逻辑,大大提高更新的时效性和兼容性,在 一些数据要求很高的场景下也能保证搜索的良好体验。
[0059] 图3示出了根据本发明一个实施例的索引数据更新系统300的示意图。系统300包 括:输入接口 310、缓存装置320、索引库330、以及更新控制装置340。按照本发明的实施方 案,输入接口 310与缓存装置320相耦接,并且更新控制装置340分别与缓存装置320和索引 库340相耦接。
[0060] 输入接口 310适于接收由第三方推送中心推送的索引数据更新消息,在本系统中, 更新消息按"数据ID+数据字符串+消息类型+消息数据版本"的格式封装,以满足对各种类 型数据的兼容处理。
[0061 ]更新消息的统一格式示例如下:
[0062]
[0063]缓存装置320适于保存接收到的更新消息。可选地,缓存装置320还适于按照消息 时间保存更新消息,以保证更新消息的时序性。这样,缓存装置320在接收到回放信号后,可 根据消息时间定位到对应的更新消息。
[0064]索引库330适于存储原始索引文件。这里,索引库330可以是图1中描述的数据存储 库110的一部分或全部。在本方案中,针对不同的数据规模、数据特点和检索要求,对索引库 330进行分区分层分组,形成金字塔形的索引服务群。例如索引库330可以包含有论坛索引 库、文章索引库等。
[0065]更新控制装置340适于解析更新消息,根据数据字符串对索引库330中的原始索引 文件进行与消息类型相对应的更新操作。从上述更新消息的统一格式可以看出,更新控制 装置340根据消息类型对原始索引文件进行的更新操作包括增加、删除、修改、以及条件更 新。
[0066]根据本发明的一种实施方式,更新控制装置340还适于在解析得到消息类型对应 的更新操作是条件更新时,通过数据字符串获取更新
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1