著录项信息
专利名称 | 一种数据索引库的建立方法、搜索建议生成方法和装置 |
申请号 | CN201210306727.3 | 申请日期 | 2012-08-24 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2012-12-19 | 公开/公告号 | CN102831224A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 北京百度网讯科技有限公司 | 申请人地址 | 北京市海淀区上地十街10号百度大厦2层
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京百度网讯科技有限公司 | 当前权利人 | 北京百度网讯科技有限公司 |
发明人 | 徐旭 |
代理机构 | 北京鸿德海业知识产权代理事务所(普通合伙) | 代理人 | 袁媛 |
摘要
本发明提供了一种数据索引库的建立方法、搜索建议生成方法和装置,所述建立方法包括:对所有待处理数据进行排序,形成待处理数据列表;从所述待处理数据列表中逐一读取数据作为当前数据,确定所述当前数据记录的前缀片段的偏移量,从当前数据所记录的偏移量开始,逐次增加字符数地获取所述当前数据的前缀片段,利用每次获取的当前前缀片段,从所述待处理数据列表中获取所有具有相同前缀片段的数据,建立键值为所述当前前缀片段的索引,直至获取完所述当前数据的所有前缀片段,建立键值为对应前缀片段的索引。相较于现有技术,本发明能够降低建库时的内存使用量,减少I/O读写操作,降低了数据索引库的建库时间,提高了搜索建议服务的时效性。
1.一种数据索引库的建立方法,其特征在于,包括:
对所有待处理数据进行排序,形成待处理数据列表,对所述待处理数据列表中的数据分别执行以下步骤:
S1、从所述待处理数据列表中读取一条数据作为当前数据,确定所述当前数据记录的前缀片段的偏移量;
S2、从所述当前数据所记录的偏移量开始,逐次增加字符数地获取所述当前数据的前缀片段,利用每次获取的当前前缀片段,从所述待处理数据列表中获取所有具有相同前缀片段的数据,建立键值为所述当前前缀片段的索引,并记录该些数据具有相同前缀片段的偏移量;重复本步骤直到获取完所述当前数据的所有前缀片段。
2.根据权利要求1所述的方法,其特征在于,所述对所有待处理数据进行排序按照数据名称的字母或数字顺序。
3.根据权利要求1所述的方法,其特征在于,所述从所述待处理数据列表中读取一条数据作为当前数据,包括:
将所述待处理数据列表中首字符相同的数据作为同一处理批数据,依次读取各个处理批数据,从所读取的处理批数据中读取一条数据作为当前数据。
4.根据权利要求1所述的方法,其特征在于,所述对所有待处理数据进行排序,形成待处理数据列表,包括:
将所有待处理数据分成多份互不冗余的待处理数据;
对每一份待处理数据按照字母或数字顺序进行排序,形成对应的待处理数据列表。
5.根据权利要求4所述的方法,其特征在于,该方法还包括:
将每一份待处理数据经过步骤S1至S2所建立的索引汇总,并将键值相同的数据归并到对应键值的索引下,生成数据索引库。
6.一种搜索建议生成方法,其特征在于,包括:
预先利用如权利要求1至5任一权项所述的方法建立的数据索引库;
接收用户输入的搜索词;
以所接收的搜索词作为前缀片段,从所述数据索引库中查找出键值为该前缀片段的数据;
根据数据的权值对所查找到的数据进行排序,生成搜索建议推荐给用户。
7.一种数据索引库的建立装置,其特征在于,包括:
排序模块,用于对所有待处理数据进行排序,形成待处理数据列表;
数据读取模块,用于从所述待处理数据列表中逐一读取数据作为当前数据,确定所述当前数据记录的前缀片段的偏移量,将所读取的当前数据提供给后续的前缀片段获取模块;
前缀片段获取模块,用于从所述当前数据所记录的偏移量开始,逐次增加字符数地获取所述当前数据的前缀片段,将每次获取到的当前前缀片段提供给后续的索引建立模块,直至获取完所述当前数据的所有前缀片段;
索引建立模块,用于利用所述前缀片段获取模块获取的当前前缀片段,从所述待处理数据列表中获取所有具有相同前缀片段的数据,建立键值为所述当前前缀片段的索引;
偏移量记录模块,用于在所述索引建立模块获取到所有具有相同前缀片段的数据之后,记录该些数据具有相同前缀片段的偏移量,保存在对应数据中,以提供给所述数据读取模块。
8.根据权利要求7所述的装置,其特征在于,所述排序模块按照数据名称的字母或数字顺序对所有待处理数据进行排序。
9.根据权利要求7所述的装置,其特征在于,所述数据读取模块具体配置包括:
将所述待处理数据列表中首字符相同的数据作为同一处理批数据,依次读取各个处理批数据,从所读取的处理批数据中逐一读取数据作为当前数据,提供给所述前缀片段获取模块。
10.根据权利要求7所述的装置,其特征在于,该装置还包括:
数据切分模块,用于将所有待处理数据分成多份互不冗余的待处理数据;
所述排序模块对每一份待处理数据按照字母或数字顺序进行排序,形成对应的待处理数据列表。
11.根据权利要求10所述的装置,其特征在于,该装置还包括:
汇总模块,用于对由所述每一份待处理数据所建立的索引进行汇总,并将键值相同的数据归并到对应键值的索引下,生成数据索引库。
12.一种搜索建议生成装置,其特征在于,包括:
如权利要求7至11任一权项所述的数据索引库建立装置;
接收模块,用于接收用户输入的搜索词;
查询模块,用于以所述接收模块接收的搜索词作为前缀片段,从所述数据索引库建立装置建立的数据索引库中查找出键值为该前缀片段的数据;
搜索建议生成模块,用于根据数据的权值对所查找到的数据进行排序,生成搜索建议推荐给用户。
一种数据索引库的建立方法、搜索建议生成方法和装置\n【技术领域】\n[0001] 本发明涉及互联网信息处理技术领域,特别涉及一种数据索引库的建立方法、搜索建议生成方法和装置。\n【背景技术】\n[0002] 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息,可以实现大量数据的存储和检索。一般来说,一条索引(或称为一条索引拉链)的结构主要包括索引的键值(key)和索引数据。索引结构的好坏会直接影响搜索引擎的检索速度,搜索引擎根据用户输入的关键词,在索引库中查找出与该些关键词相匹配的索引键值,并提取对应的索引数据作为相关搜索结果返回给用户。\n[0003] 现有的搜索引擎(如地图搜索、网页搜索等等)已经发展到智能化及个性化的阶段,通常在用户输入查询词时,搜索引擎会智能地猜测用户的搜索需求,提供相关的搜索建议(suggestion)供给用户做选择,提供便捷的服务,缩短用户输入用时,同时可在用户输入错误信息时提供正确的信息予以纠正,可带来很好的用户体验。在提供搜索建议时,大多也是采用索引结构的方式,将键值能与用户输入的查询词相匹配的索引数据作为搜索建议提供给用户。\n[0004] 目前的地图搜索建议索引库通常采用哈希(hash)方式进行,将地图兴趣点(point ofinterest,POI)数据的前缀片段作为索引拉链的键值,插入到哈希字典中,当发现有相同的前缀片段时,会到该哈希字典中查找对应的键值,然后找到索引拉链,将此兴趣点数据的信息加到这条索引拉链上,这样持续查找完成索引建库过程。\n[0005] 然而,由于这种采用哈希字典查找的建库方式,在每一次有新的数据需要插入时,都要将哈希字典中的所有数据存放于机器内存中。当地图数据量较大,无法将全部数据存放于机器内存中时,只能将数据存放在硬盘上来进行建库,这样,势必会存在较频繁的I/O读写操作,从而导致建库速度很慢,响应速度随着索引规模的扩大而逐渐下降,降低了搜索建议服务的时效性。\n【发明内容】\n[0006] 有鉴于此,本发明提供了一种数据索引库的建立方法、搜索建议生成方法和装置,能够降低建库时的内存使用量,减少I/O读写操作,降低了数据索引库的建库时间,提高了搜索建议服务的时效性。\n[0007] 具体技术方案如下:\n[0008] 一种数据索引库的建立方法,该方法包括:\n[0009] 对所有待处理数据进行排序,形成待处理数据列表,对所述待处理数据列表中的数据分别执行以下步骤:\n[0010] S1、从所述待处理数据列表中读取一条数据作为当前数据,确定所述当前数据记录的前缀片段的偏移量;\n[0011] S2、从所述当前数据所记录的偏移量开始,逐次增加字符数地获取所述当前数据的前缀片段,利用每次获取的当前前缀片段,从所述待处理数据列表中获取所有具有相同前缀片段的数据,建立键值为所述当前前缀片段的索引,并记录该些数据具有相同前缀片段的偏移量;重复本步骤直到获取完所述当前数据的所有前缀片段。\n[0012] 根据本发明一优选实施例,所述对所有待处理数据进行排序按照数据名称的字母或数字顺序。\n[0013] 根据本发明一优选实施例,所述从待处理数据列表中读取一条数据作为当前数\n据,包括:\n[0014] 将所述待处理数据列表中首字符相同的数据作为同一处理批数据,依次读取各个处理批数据,从所读取的处理批数据中读取一条数据作为当前数据。\n[0015] 根据本发明一优选实施例,所述对所有待处理数据进行排序,形成待处理数据列表,包括:\n[0016] 将所有待处理数据分成多份互不冗余的待处理数据;\n[0017] 对每一份待处理数据按照字母或数字顺序进行排序,形成对应的待处理数据列\n表。\n[0018] 根据本发明一优选实施例,该方法还包括:\n[0019] 将每一份待处理数据经过步骤S1至S2所建立的索引汇总,并将键值相同的数据归并到对应键值的索引下,生成数据索引库。\n[0020] 一种搜索建议生成方法,该方法包括:\n[0021] 预先利用本发明提供的数据索引库建立方法建立的数据索引库;\n[0022] 接收用户输入的搜索词;\n[0023] 以所接收的搜索词作为前缀片段,从所述数据索引库中查找出键值为该前缀片段的数据;\n[0024] 根据数据的权值对所查找到的数据进行排序,生成搜索建议推荐给用户。\n[0025] 一种数据索引库的建立装置,该装置包括:\n[0026] 排序模块,用于对所有待处理数据进行排序,形成待处理数据列表;\n[0027] 数据读取模块,用于从所述待处理数据列表中逐一读取数据作为当前数据,确定所述当前数据记录的前缀片段的偏移量,将所读取的当前数据提供给后续的前缀片段获取模块;\n[0028] 前缀片段获取模块,用于从所述当前数据所记录的偏移量开始,逐次增加字符数地获取所述当前数据的前缀片段,将每次获取到的当前前缀片段提供给后续的索引建立模块,直至获取完所述当前数据的所有前缀片段;\n[0029] 索引建立模块,用于利用所述前缀片段获取模块获取的当前前缀片段,从所述待处理数据列表中获取所有具有相同前缀片段的数据,建立键值为所述当前前缀片段的索\n引;\n[0030] 偏移量记录模块,用于在所述索引建立模块获取到所有具有相同前缀片段的数据之后,记录该些数据具有相同前缀片段的偏移量,保存在对应数据中,以提供给所述数据读取模块。\n[0031] 根据本发明一优选实施例,所述排序模块按照数据名称的字母或数字顺序对所有待处理数据进行排序。\n[0032] 根据本发明一优选实施例,所述数据读取模块具体配置包括:\n[0033] 将所述待处理数据列表中首字符相同的数据作为同一处理批数据,依次读取各个处理批数据,从所读取的处理批数据中逐一读取数据作为当前数据,提供给所述前缀片段获取模块。\n[0034] 根据本发明一优选实施例,该装置还包括:\n[0035] 数据切分模块,用于将所有待处理数据分成多份互不冗余的待处理数据;\n[0036] 所述排序模块对每一份待处理数据按照字母或数字顺序进行排序,形成对应的待处理数据列表。\n[0037] 根据本发明一优选实施例,该装置还包括:\n[0038] 汇总模块,用于对由所述每一份待处理数据所建立的索引进行汇总,并将键值相同的数据归并到对应键值的索引下,生成数据索引库。\n[0039] 一种搜索建议生成装置,包括:本发明提供的数据索引库建立装置;\n[0040] 接收模块,用于接收用户输入的搜索词;\n[0041] 查询模块,用于以所述接收模块接收的搜索词作为前缀片段,从所述数据索引库建立装置建立的数据索引库中查找出键值为该前缀片段的数据;\n[0042] 搜索建议生成模块,用于根据数据的权值对所查找到的数据进行排序,生成搜索建议推荐给用户。\n[0043] 由以上技术方案可以看出,本发明提供的数据索引库的建立方法、搜索建议生成方法和装置,能够一次连续完成同一个前缀片段的索引拉链的建立,将待处理数据分次读入到内存,降低建库时的内存使用量,减少I/O读写操作,提高建库的效率和性能,减少了数据索引库的建库时间,可提高了搜索建议服务的时效性。\n【附图说明】\n[0044] 图1为本发明实施例一提供的数据索引库的建立方法流程图;\n[0045] 图2为本发明实施例一提供的数据索引库的建立方法的具体流程图;\n[0046] 图3为本发明实施例二提供的数据索引库的建立方法流程图;\n[0047] 图4为本发明实施例三提供的搜索建议生成方法流程图;\n[0048] 图5为本发明实施例四提供的数据索引库的建立装置示意图;\n[0049] 图6为本发明实施例五提供的数据索引库的建立装置示意图;\n[0050] 图7为本发明实施例六提供的搜索建议生成装置示意图。\n【具体实施方式】\n[0051] 为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。\n[0052] 搜索引擎的搜索建议(suggestion)服务中提供显示的数据主要包括:电子地图中的兴趣点数据(POI),或者是一些热门搜索词(query),即用户输入的频次大于预设阈值的搜索词。在用户进行地理位置搜索时,通常会在搜索引擎中输入兴趣点名称的关键词来进行检索,而搜索引擎则是根据用户已输入的关键词词项进行匹配。因而,本发明主要以该些数据为例,对数据索引库的建立方法加以说明。\n[0053] 在电子地图数据中,各个兴趣点都包括名称、邮编、电话号码、地址等一系列详细的数据信息,将这些数据采用链表或数组等形式进行存储,每条数据都采用对应的数据名称作为数据键值来进行标识,即采用多级索引的方式。本发明利用待建库数据的数据名称建立搜索建议的数据索引库。\n[0054] 实施例一\n[0055] 图1是本实施例提供的数据索引库的建立方法流程图,如图1所示,该方法包括:\n[0056] 步骤S101、对所有待处理数据进行排序,形成待处理数据列表,对所述待处理数据列表中的数据分别执行步骤S102和步骤S103。\n[0057] 待处理数据包括地图的兴趣点数据或者用户输入的频次大于预设阈值的搜索词。\n对于这些待处理数据先进行排序,与现有的字典编排的顺序相类似,按照数据名称的字母、数字或笔划等顺序对所有待处理数据进行排序,形成待处理数据列表。\n[0058] 具体地,对于数据名称为汉字的数据,则可以采用拼音的字母顺序进行排序,对于同音字可以利用笔划或音调进一步确定先后顺序。对于数字名称的数据采用数字顺序进行排序;对于英文的数据采用字母顺序进行排序;对于其他语言文字的数据,同样采用语言本身默认的顺序进行排序。\n[0059] 步骤S102、从所述待处理数据列表中读取一条数据作为当前数据,确定所述当前数据记录的前缀片段的偏移量。\n[0060] 步骤S103、从所述当前数据所记录的偏移量开始,逐次增加字符数地获取所述当前数据的前缀片段,利用每次获取到的当前前缀片段,从所述待处理数据列表中获取所有具有相同前缀片段的数据,建立键值为所述当前前缀片段的索引,并记录该些数据具有相同前缀片段的偏移量;重复本步骤直至获取完所述当前数据的所有前缀片段,建立键值为对应前缀片段的索引。\n[0061] 在初始状态时,可以将所有待处理数据的偏移量默认设置为零或为空。\n[0062] 逐次增加字符数地获取所述当前数据的前缀片段具体为:当确定偏移量为零或为空时,则获取第(0+1)个前缀片段;如果确定偏移量为N,N为预设正整数,则获取第(N+1)个前缀片段。\n[0063] 当获取第一条待处理数据时,可以确定该数据所记录的偏移量为零或为空,则获取该数据的第一个前缀片段。\n[0064] 相同前缀片段的数据是指以相同的字符开头的数据,例如,“北京”和“北方”具有相同前缀片段“北”。\n[0065] 步骤S104、判断是否遍历完所述待处理列表中的所有数据,如果是,则结束流程,否则返回步骤S102继续获取下一条数据进行处理。\n[0066] 下面举个例子,以“清华大学”、“清华大学西门”、“清华大学东门”、“清华东路”、“清华西路”、“清华园”、“清琴路”、“清林路”、“清林东路”这几条待建库的数据为例,对本实施例的处理流程加以说明。\n[0067] 先对所有的待处理数据进行排序,按照拼音的字母顺序得到“清华大学”、“清华大学东门”、“清华大学西门”、“清华西路”、“清华园”、“清林东路”、“清林路”、“清琴路”的待处理数据列表。\n[0068] 从待处理数据列表中逐一读取数据,读取第一条数据“清华大学”作为当前数据,获取第一个前缀片段“清”,从待处理数据列表中获取具有相同前缀片段“清”的数据,包括“清华大学”、“清华大学东门”、“清华大学西门”、“清华西路”、“清华园”、“清林东路”、“清林路”、“清琴路”,归类到“清”的索引下,建立键值为该前缀片段“清”的索引拉链。记录这些具有相同前缀片段的数据的偏移量,记为1。\n[0069] 获取当前数据“清华大学”的第二个前缀片段“清华”,从待处理数据列表中获取具有该相同前缀片段“清华”的数据,包括“清华大学”、“清华大学东门”、“清华大学西门”、“清华西路”、“清华园”,归类到“清华”的索引下,建立键值为该前缀片段“清华”的索引拉链。记录这些具有相同前缀片段的数据的偏移量,记为2。\n[0070] 获取当前数据“清华大学”的第三个前缀片段“清华大”,从待处理数据列表中获取具有该相同前缀片段“清华大”的数据,包括“清华大学”、“清华大学东门”、“清华大学西门”,归类到“清华大”的索引下,建立键值为该前缀片段“清华大”的索引拉链。记录这些具有相同前缀片段的数据的偏移量,记为3。\n[0071] 获取当前数据“清华大学”的第四个前缀片段“清华大学”,从待处理数据列表中获取具有该相同前缀片段“清华大学”的数据,包括“清华大学”、“清华大学东门”、“清华大学西门”,归类到“清华大学”的索引下,建立键值为该前缀片段“清华大学”的索引拉链。记录这些具有相同前缀片段的数据的偏移量,记为4。\n[0072] 至此,完成了当前数据“清华大学”中所有前缀片段的索引的建立过程。\n[0073] 获取下一条数据“清华大学东门”作为当前数据。判断到该当前数据“清华大学东门”记录的偏移量为4,则表明该数据的前四个前缀片段对应的索引已经建立好,从偏移量开始逐次增加字符数地获取前缀片段,即获取当前数据的第五个前缀片段“清华大学东”,同样地,从待处理数据列表中获取具有相同前缀片段“清华大学东”的数据,包括“清华大学东门”一条数据,归类到“清华大学东门”的索引下,建立键值为该前缀片段“清华大学东”的索引拉链。记录这些具有相同前缀片段的数据的偏移量,记为5。\n[0074] 依此类推,直到获取完当前数据的所有前缀片段时,再获取下一条待处理数据,直至遍历完所有待处理数据,建立对应的数据索引库。\n[0075] 待处理数据经过步骤S102至S104的处理后所建立的数据索引库包括大量的索引\n拉链,每一条索引拉链对应一个键值(key)和对应的一条或多条数据(value)。其中,搜索建议索引库的数据(value)采用对应的数据名称来表示,可以指引到地图数据库中对应的数据项,每项具体包括名称、邮编、电话号码、地址和空间坐标等信息。\n[0076] 值得一提的是,为了减少一次读入到内存中的数据量,步骤S102中还可以对所述待处理数据分批进行读取,具体包括:\n[0077] 将所述待处理数据列表中首字符相同的数据作为同一处理批数据,依次读取各个处理批数据,从所读取的处理批数据中逐一读取数据作为当前数据。\n[0078] 图2是本实施例提供的数据索引库建立方法的具体流程图,如图2所示,本实施例分批处理的具体流程可以为:\n[0079] 步骤S201、对所有待处理数据按照字母顺序进行排序,形成待处理数据列表。\n[0080] 步骤S202、将所述待处理数据列表中首字符相同的数据归于同一文件中。\n[0081] 将首字符相同的数据按顺序存放于同一文件中,作为同一处理批数据。所述文件可以是保存好的文件,也可以是在读入内存之前生成的临时文件。\n[0082] 步骤S203、依顺序读入一个文件作为当前文件,从所述当前文件中逐一读取数据作为当前数据。\n[0083] 步骤S204、获取所述当前数据的第一个前缀片段。\n[0084] 步骤S205、利用所获取的当前前缀片段,从所述待处理数据列表中获取所有具有相同前缀片段的数据,建立键值为所述当前前缀片段的索引。\n[0085] 步骤S206、记录该些数据具有相同前缀片段的偏移量。\n[0086] 步骤S207、判断所述当前数据是否还有未处理的前缀片段,如果是,则进入步骤S208,获取所述当前数据的下一个前缀片段,并返回至步骤S205,否则进入步骤S209,判断所述当前文件是否还有未处理的数据,如果是,则进入步骤S210,否则,进入步骤S213。\n[0087] 步骤S210、获取所述当前文件的下一条数据。\n[0088] 步骤S211、判断所述当前数据所记录的偏移量是否为零或为空,如果是,则进入步骤S204,否则进入步骤S212,从所记录的偏移量开始获取所述当前数据的前缀片段,从而继续执行步骤S205。\n[0089] 步骤S213、判断是否还有未处理的文件,如果是,则继续读入下一个文件作为当前文件,否则,结束流程,完成数据索引库的建立。\n[0090] 这样分批读取待处理数据,可以减少一次性需要读入到内存中的数据量,相比现有技术针对每一条数据都需要读入全部的数据量,可以提高处理速度,同时避免无法全部读入造成建库数据不准确的问题。而且本发明针对同一次读入到内存中的数据,可以一次性连续地完成该些数据中包含的前缀片段的索引,相比现有一次仅完成一条数据的索引建库,可以减少数据在硬盘与内存之间传输,避免频繁的I/O读写操作,可以提高建库的速度。\n[0091] 实施例二\n[0092] 图3是本实施例提供的数据索引库的建立方法流程图,如图3所示,该方法包括:\n[0093] 步骤S301、将所有待处理数据分成多份互不冗余的待处理数据。\n[0094] 对所有待处理数据需先进行去重处理,避免不必要的重复操作,然后随机或按顺序分成多份互补冗余的待处理数据,分配到各处理设备上进行处理。\n[0095] 例如,将“清华大学”、“清华大学西门”、“清华大学东门”、“清华东路”、“清华西路”、“清华园”、“清琴路”、“清林路”、“清林东路”去重后随机切分成A和B两份,其中,A包括“清华大学”、“清华大学西门”、“清琴路”、“清林路”、“清林东路”,B包括“清华大学东门”、“清华东路”、“清华西路”、“清华园”。将A和B分配到两台处理设备上进行处理。\n[0096] 步骤S302、对每一份待处理数据按照字母顺序进行排序,形成对应的待处理数据列表。\n[0097] 步骤S303、从所述待处理数据列表中逐一读取数据作为当前数据,确定所述当前数据记录的前缀片段的偏移量。\n[0098] 步骤S304、从当前数据所记录的偏移量开始逐次增加字符数地获取所述当前数据的前缀片段。\n[0099] 步骤S305、利用所获取的当前前缀片段,从所述待处理数据列表中获取所有具有相同前缀片段的数据,建立键值为所述当前前缀片段的索引。\n[0100] 步骤S306、记录该些数据具有相同前缀片段的偏移量。\n[0101] 上述步骤S302至步骤S306与实施例一中步骤S101至步骤S 104相同,于此不再赘\n述。\n[0102] 步骤S307、判断所述当前数据是否还有未处理的前缀片段,如果是,则返回至步骤S304,继续获取下一个前缀片段进行处理,否则,进入步骤S308。\n[0103] 步骤S308、判断待处理列表中是否还有未处理的待处理数据,如果是,则返回至步骤S303,继续读取下一条数据作为当前数据进行处理,否则,进入步骤S309。\n[0104] 步骤S309、将每一份待处理数据建立的索引汇总,并将键值相同的数据归并到对应键值的索引下,生成数据索引库。\n[0105] 将分布在不同计算机上完成的建库结果进行汇总,生成数据索引库。\n[0106] 例如,经过步骤S302至步骤S308的处理后,从A中可以得到键值为“清华”的索引包括的数据有“清华大学”、“清华大学西门”,从B中得到键值为“清华”的索引包括的数据有“清华大学东门”、“清华东路”、“清华西路”、“清华园”。将键值相同的数据归并到对应键值的索引,合并得到最后“清华”的索引包括数据“清华大学”、“清华大学西门”、“清华大学东门”、“清华东路”、“清华西路”、“清华园”。以此类推,对于其他键值的索引,进行归并处理,构成数据索引库。\n[0107] 这种采用分布式计算的处理方式,可以提高单机处理的运行速度,也可以避免出现由于数据量庞大而无法全部内存中的情形。\n[0108] 实施例三\n[0109] 图4是本实施例提供的搜索建议生成方法流程图。如图4所示,该方法包括:\n[0110] 步骤S401、接收用户输入的搜索词。\n[0111] 逐字或逐词接收用户上屏操作输入的搜索词。例如,用户输入“清”、“清华”或“qing”等。\n[0112] 步骤S402、以所接收的搜索词作为前缀片段,从预先建立的数据索引库中查找出键值为该前缀片段的数据。\n[0113] 所述数据索引库是采用本发明提供的数据索引库的建立方法预先建立的。利用接收到的搜索词,从该数据索引库中查找到相匹配的数据。例如,当用户上屏输入“清”,则从数据索引库中查找到“清”这条索引,获取“清”下对应包含的所有数据。\n[0114] 步骤S403、根据数据的权值对所查找到的数据进行排序,生成搜索建议推荐给用户。\n[0115] 对于所得到的数据,根据其对应的数据权值进行排序。所述权值可以基于搜索频次、认知度或者用户行为等因素进行调节。最终,将排在前M条或者权值超过预设阈值的数据生成搜索建议推荐给用户。\n[0116] 这样,当用户输入“清”时,则可以提供如“清华西路”、“清华东路”、“清琴路”等搜索建议供用户选择,提升用户体验。\n[0117] 以上是对本发明所提供的方法进行的详细描述,下面对本发明提供的数据索引库的建立装置进行详细描述。\n[0118] 实施例四\n[0119] 图5是本实施例提供的数据索引库的建立装置示意图。如图5所示,该装置包括:\n[0120] 排序模块501,用于对所有待处理数据进行排序,形成待处理数据列表。\n[0121] 待处理数据包括地图的兴趣点数据或者用户输入的频次大于预设阈值的搜索词。\n排序模块501对于这些待处理数据先进行排序,与现有的字典编排的顺序相类似,按照数据名称的字母、数字或笔划等顺序对所有待处理数据进行排序,形成待处理数据列表。\n[0122] 具体地,对于数据名称为汉字的数据,则可以采用拼音的字母顺序进行排序,对于同音字可以利用笔划或音调进一步确定先后顺序。对于数字名称的数据采用数字顺序进行排序;对于英文的数据采用字母顺序进行排序;对于其他语言文字的数据,同样采用语言本身默认的顺序进行排序。\n[0123] 数据读取模块502,用于从所述待处理数据列表中逐一读取数据作为当前数据,确定所述当前数据记录的前缀片段的偏移量,将所读取的当前数据提供给后续的前缀片段获取模块503。\n[0124] 前缀片段获取模块503,用于从所述当前数据所记录的偏移量开始,逐次增加字符数地获取所述当前数据的前缀片段,将每次获取到的当前前缀片段提供给后续的索引建立模块504,直至获取完所述当前数据的所有前缀片段,建立键值为对应前缀片段的索引。\n[0125] 在初始状态时,可以将所有待处理数据的偏移量默认设置为零或为空。\n[0126] 逐次增加字符数地获取所述当前数据的前缀片段具体为:当确定偏移量为零或为空时,则获取第(0+1)个前缀片段;如果确定偏移量为N,N为预设正整数,则获取第(N+1)个前缀片段。\n[0127] 当获取第一条待处理数据时,可以确定该数据所记录的偏移量为零或为空,则获取该数据的第一个前缀片段,提供给后续的索引建立模块504。\n[0128] 索引建立模块504,用于利用前缀片段获取模块503所获取的当前前缀片段,从所述待处理数据列表中获取所有具有相同前缀片段的数据,建立键值为所述当前前缀片段的索引。\n[0129] 相同前缀片段的数据是指以相同的字符开头的数据,例如,“北京”和“北方”具有相同前缀片段“北”。\n[0130] 偏移量记录模块505,用于在所述索引建立模块504获取到所有具有相同前缀片段的数据之后,记录该些数据具有相同前缀片段的偏移量,保存在对应数据中,以提供给所述数据读取模块502。\n[0131] 下面举个例子,以“清华大学”、“清华大学西门”、“清华大学东门”、“清华东路”、“清华西路”、“清华园”、“清琴路”、“清林路”、“清林东路”这几条待建库的数据为例,对本实施例提供的装置的处理流程加以说明。\n[0132] 排序模块501先对所有的待处理数据进行排序,按照拼音的字母顺序得到“清华大学”、“清华大学东门”、“清华大学西门”、“清华西路”、“清华园”、“清林东路”、“清林路”、“清琴路”的待处理数据列表。\n[0133] 数据读取模块502从待处理数据列表中逐一读取数据,读取第一条数据“清华大\n学”作为当前数据,前缀片段获取模块503获取第一个前缀片段“清”,索引建立模块504从待处理数据列表中获取具有相同前缀片段“清”的数据,包括“清华大学”、“清华大学东门”、“清华大学西门”、“清华西路”、“清华园”、“清林东路”、“清林路”、“清琴路”,归类到“清”的索引下,建立键值为该前缀片段“清”的索引拉链。偏移量记录模块505记录这些具有相同前缀片段的数据的偏移量,记为1。\n[0134] 前缀片段获取模块503继续获取当前数据“清华大学”的第二个前缀片段“清华”,索引建立模块504从待处理数据列表中获取具有该相同前缀片段“清华”的数据,包括“清华大学”、“清华大学东门”、“清华大学西门”、“清华西路”、“清华园”,归类到“清华”的索引下,建立键值为该前缀片段“清华”的索引拉链。偏移量记录模块505记录这些具有相同前缀片段的数据的偏移量,记为2。\n[0135] 前缀片段获取模块503继续获取当前数据“清华大学”的第三个前缀片段“清华\n大”,索引建立模块504从待处理数据列表中获取具有该相同前缀片段“清华大”的数据,包括“清华大学”、“清华大学东门”、“清华大学西门”,归类到“清华大”的索引下,建立键值为该前缀片段“清华大”的索引拉链。偏移量记录模块505记录这些具有相同前缀片段的数据的偏移量,记为3。\n[0136] 前缀片段获取模块503继续获取当前数据“清华大学”的第四个前缀片段“清华大学”,索引建立模块504从待处理数据列表中获取具有该相同前缀片段“清华大学”的数据,包括“清华大学”、“清华大学东门”、“清华大学西门”,归类到“清华大学”的索引下,建立键值为该前缀片段“清华大学”的索引拉链。偏移量记录模块505记录这些具有相同前缀片段的数据的偏移量,记为4。\n[0137] 至此,完成了当前数据“清华大学”中所有前缀片段的索引的建立。\n[0138] 数据读取模块502获取下一条数据“清华大学东门”作为当前数据。判断到该当前数据“清华大学东门”记录的偏移量为4,则表明该数据的前四个前缀片段对应的索引已经建立好,前缀片段获取模块503从偏移量开始逐次增加字符数地获取前缀片段,即获取当前数据的第五个前缀片段“清华大学东”,同样地,索引建立模块504从待处理数据列表中获取具有相同前缀片段“清华大学东”的数据,包括“清华大学东门”一条数据,归类到“清华大学东门”的索引下,建立键值为该前缀片段“清华大学东”的索引拉链。偏移量记录模块505记录这些具有相同前缀片段的数据的偏移量,记为5。\n[0139] 依此类推,直到前缀片段获取模块503获取完当前数据的所有前缀片段时,数据读取模块502再获取下一条待处理数据,直至遍历完所有待处理数据,建立对应的数据索引库。\n[0140] 待处理数据经过上述模块的处理后,所建立的数据索引库包括大量的索引拉链,每一条索引拉链对应一个键值和对应的一条或多条数据。其中,搜索建议索引库的数据采用对应的数据名称来表示,可以指引到地图数据库中对应的数据项,每项具体包括名称、邮编、电话号码、地址和空间坐标等信息。\n[0141] 值得一提的是,为了减少一次读入到内存中的数据量,数据读取模块502的具体配置还可以包括:\n[0142] 将所述待处理数据列表中首字符相同的数据作为同一处理批数据,依次读取各个处理批数据,从所读取的处理批数据中逐一读取数据作为当前数据,提供给所述前缀片段获取模块503。\n[0143] 这样分批读取待处理数据,可以减少一次性需要读入到内存中的数据量,相比现有技术针对每一条数据都需要读入全部的数据量,可以提高处理速度,同时避免无法全部读入造成建库数据不准确的问题。而且本发明针对同一次读入到内存中的数据,可以一次性连续地完成该些数据中包含的前缀片段的索引,相比现有一次仅完成一条数据的索引建库,可以减少数据在硬盘与内存之间传输,避免频繁的I/O读写操作,可以提高建库的速度。\n[0144] 实施例五\n[0145] 图6是本实施例提供的数据索引库的建立装置示意图。如图6所示,该装置包括:\n[0146] 数据切分模块601,用于将所有待处理数据分成多份互不冗余的待处理数据。\n[0147] 数据切分模块601对所有待处理数据需先进行去重处理,避免不必要的重复操作,然后随机或按顺序分成多份互补冗余的待处理数据,分配到各处理设备上进行处理。\n[0148] 例如,将“清华大学”、“清华大学西门”、“清华大学东门”、“清华东路”、“清华西路”、“清华园”、“清琴路”、“清林路”、“清林东路”去重后随机切分成A和B两份,其中,A包括“清华大学”、“清华大学西门”、“清琴路”、“清林路”、“清林东路”,B包括“清华大学东门”、“清华东路”、“清华西路”、“清华园”。数据切分模块601将A和B分配到两台处理设备上进行处理。\n[0149] 排序模块602、对每一份待处理数据按照字母顺序进行排序,形成对应的待处理数据列表。\n[0150] 数据读取模块603,用于从所述待处理数据列表中逐一读取数据作为当前数据,确定所述当前数据记录的前缀片段的偏移量。\n[0151] 前缀片段获取模块604,用于从当前数据所记录的偏移量开始逐次增加字符数地\n获取所述当前数据的前缀片段。\n[0152] 索引建立模块605,用于利用所获取的当前前缀片段,从所述待处理数据列表中获取所有具有相同前缀片段的数据,建立键值为所述当前前缀片段的索引。\n[0153] 偏移量记录模块606,用于记录该些数据具有相同前缀片段的偏移量。\n[0154] 上述模块602至606与实施例四中模块501至505相同,于此不再赘述。\n[0155] 子控制模块607,用于判断所述当前数据是否还有未处理的前缀片段,如果是,则返回至前缀片段获取模块604,继续获取下一个前缀片段进行处理,否则,进入主控制模块\n608。\n[0156] 主控制模块608,用于判断待处理列表中是否还有未处理的待处理数据,如果是,则返回至数据读取模块603,继续读取下一条数据作为当前数据进行处理,否则,进入汇总模块609。\n[0157] 汇总模块609,用于将每一份待处理数据建立的索引汇总,并将键值相同的数据归并到对应键值的索引下,生成数据索引库。\n[0158] 汇总模块609将分布在不同计算机上完成的建库结果进行汇总,生成数据索引库。\n[0159] 例如,经过模块602至608的处理后,从A中可以得到键值为“清华”的索引包括的数据有“清华大学”、“清华大学西门”,从B中得到键值为“清华”的索引包括的数据有“清华大学东门”、“清华东路”、“清华西路”、“清华园”。将键值相同的数据归并到对应键值的索引,合并得到最后“清华”的索引包括数据“清华大学”、“清华大学西门”、“清华大学东门”、“清华东路”、“清华西路”、“清华园”。以此类推,对于其他键值的索引,进行归并处理,构成数据索引库。\n[0160] 这种采用分布式计算的处理方式,可以提高单机处理的运行速度,也可以避免出现由于数据量庞大而无法全部内存中的情形。\n[0161] 实施例六\n[0162] 图7是本实施例提供的搜索建议生成装置示意图。如图7所示,该装置包括:\n[0163] 接收模块701,用于接收用户输入的搜索词。\n[0164] 接收模块701逐字或逐词接收用户上屏操作输入的搜索词。例如,用户输入“清”、“清华”或“qing”等。\n[0165] 查询模块702,用于以所接收的搜索词作为前缀片段,从预先建立的数据索引库中查找出键值为该前缀片段的数据。\n[0166] 所述数据索引库是采用本发明提供的数据索引库的建立装置预先建立的。查询模块702利用接收到的搜索词,从该数据索引库中查找到相匹配的数据。例如,当用户上屏输入“清”,则从数据索引库中查找到“清”这条索引,获取“清”下对应包含的所有数据。\n[0167] 搜索建议生成模块703,用于根据数据的权值对所查找到的数据进行排序,生成搜索建议推荐给用户。\n[0168] 对于所得到的数据,根据其对应的数据权值进行排序。所述权值可以基于搜索频次、认知度或者用户行为等因素进行调节。最终,将排在前M条或者权值超过预设阈值的数据生成搜索建议推荐给用户。\n[0169] 这样,当用户输入“清”时,则可以提供如“清华西路”、“清华东路”、“清琴路”等搜索建议供用户选择,提升用户体验。\n[0170] 本发明提供的数据索引库的建立方法、搜索建议生成方法和装置,通过逐次对数据的前缀片段进行提取,并将相同前缀片段的数据归类到对应的索引下,一次可连续完成同一个前缀片段的索引拉链的建立,同时,可以将待处理数据分次读入到内存,降低建库时的内存使用量,减少I/O读写操作,提高建库的效率和性能,减少了数据索引库的建库时间,可提高了搜索建议服务的时效性。\n[0171] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
法律信息
- 2018-09-04
- 2015-09-02
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201210306727.3
申请日: 2012.08.24
- 2012-12-19
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2008-11-19
|
2008-06-02
| | |
2
| |
2009-11-04
|
2008-04-30
| | |
3
| |
2009-11-11
|
2008-05-05
| | |
4
| |
2008-05-28
|
2007-11-16
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |