一种实时搜索的方法

文档序号:6372245阅读:114来源:国知局
专利名称:一种实时搜索的方法
技术领域
本发明涉及搜索技术,尤其涉及一种实时搜索的方法。
背景技术
互联网的飞速发展,给搜索引擎提出了新的难题,由于网络信息的爆炸性增长,大规模的web搜索引擎平均每秒需要处理上万次搜索请求,每个搜索的处理需要涉及到海量的索引,因此,索引处理已经成为搜索引擎的主要的性能瓶颈。现有的搜索方案中,对于实时搜索,虽然可以一边提供查询的功能,一边提供修改的数据排序字段,例如一张员工数据表中,存储了员工的编号、姓名、工作日期共三个字段的信息,而索引是按照“编号”的排序字段进行建立的,则用户需要查询以“工作日期”为排序字段的前十名员工的信息,则可以一边返回查询的数据给用户,一边修改数据的排序字段,以便于下次较快地返回以“工作日期”为排序字段的所有员工的信息,但是,由于没有适用缓存,针对每一次新的搜索请求,都需要从索引中检索数据,并对索引中的数据进行重新排序,由此,延长了数据搜索的时间,降低了搜索系统的性能。

发明内容
根据对大量用户的搜索习惯和规律进行调查发现,在一段时间内大量用户会对一些当前热门关键词进行搜索,而搜索过程中生成的索引和搜索结果在预定时间内是保持不变。如果能够充分利用先前已经形成的索引和搜索结果可以减少为相同的搜索请求重复生成搜索结果的服务器时间和负荷。为此本发明的目的是提供一种实时搜索的方法,该方法包括以下步骤将数据文档按照时间顺序生成多段索引;从各索引段中提取部分数据,予以缓存,其中,根据各段的生成时间确定提取该段进行缓存的数据量;搜索数据时,先从缓存中搜索各索弓I段的文档,缓存中存在目标数据时,则返回目标数据;否则,从其他存储单元中搜索数据;将从缓存所搜索的目标数据和/或从存储单元中所搜索的目标数据予以合并,返回合并的数据。与现有技术相比,本发明具有以下优点I)通过采用缓存的方案,提高了实时搜索的效率;2)针对不同时间段的数据,采用不同的缓存方案,提高了实时搜索的灵活性。


通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显图I为根据本发明一个优选实施例的实时搜索方法的流程图2为根据本发明的一个优选实施例的数据搜索的方法流程具体实施例方式下面结合附图对本发明作进一步详细描述。根据本发明,提供了一种实时搜索的方法。下文中,将对本发明提供的实时搜索的方法进行详细说明。该方法包括以下步骤步骤S101,将数据文档按照时间顺序生成多段索引。具体地,索引的建立和数据搜索的方法可以参照现有技术,例如包括以下步骤a)在内存中预设存储单元的大小和个数,初始化相应的内存空间,记录包括数据 类型和数据内容在内的数据信息,如文本数据及内容;b)初始化索引,在所述索引中存储对应数据信息的各存储单元的地址信息;c)收到搜索请求,通过索引进行数据搜索;d)判断是否搜索得到所需数据,是,则将搜索结果返回;否,则从本地或远程磁盘中搜索并读取所需数据。本技术方案中,根据时间顺序建立多段索引,如建立三段索引,第一段索引中所包含的数据包括一天以内被搜索或更新的数据;第二段索引中所映射的数据包括一天之前三个月以内被搜索或更新的数据;第三段索引中所映射的数据包括前三个月之前被搜索或更新的数据,也就是不同段的索引,所包含的是不同时间段的数据。所述索引段中包括搜索请求和相应的搜索结果。当然,本领域的技术人员应该知晓,索引中由于可以只包含数据中的关键字值和记录号,如索引中包含一张员工表中的“工号”值和排序号,因此,索引比数据本身的内容要小得多,并且,建立索引后,索引中的内容会随着数据的增减或修改而更新。一个完整的索引由多个段组成,每个段是一份可搜索的最小单元,它由多个文档生成,每个文档在段中具有唯一的标识,各个文档可以分别为不同的数据对象类型,包括文本数据对象、图像数据对象、音频数据对象、视频数据对象、可执行程序数据对象等等,并且,每个文档包含一个全局的、唯一的键值,即主键,例如文档的标识号。在每个索引段中,文档按照主键进行排序。步骤S102,从各索引段中提取部分数据,予以缓存,其中,各段所提取的数据量根据段的生成时间予以确定。具体地,对于不同的索引段,从中提取不同量的数据用于缓存。对于较新的段,其缓存的数据量可以多一些,对于时间较早的段,其缓存的数据量可以少一些。为了区分不同段的时间先后,可以对每个段打上其生成的时间戳。所谓时间戳,指的是数据经过每一个路由器时的当地时间。在本发明中,时间戳可以指每个索引段的生成时间。通常,每个索引段的缓存数据在一段时间内需要合并,本实施例中,优选地,每个索引段一天内合并一次所缓存的数据,也就是每个索引段的缓存失效时间是一天,例如,索引结构中原有三个索引段,第一个索引段包含的是一天以内的数据,第二个索引段包含的是一天之前三个月以内的数据,第三个索引段包含的是三个月之前的数据,则在每天晚上的十二点对各个索引段的数据进行合并,对于第二天而言,新产生的数据则建立新的索引段予以缓存,当新的索引段中数据累计到一定数量时,不再加入新的数据,由此,按时间戳的顺序,可以对各索引段进行排序。而对于各索引段中所要缓存的数据,即每个索引段所确定的缓存空间,则根据段的生成时间予以确定。例如,对于一天以内生成或更新的数据,由于此类数据较新,被用户搜索的可能性很大,因此,尽可能多地将这些数据予以缓存,以提高实时搜索的效率。而对于三个月以前生成或更新过的数据,由于此类数据的时间较为久远,被用户搜索的可能性很小,因此,可以只提取小部分的数据予以缓存,就能满足用户实时搜索的需求。再例如,原有两段索引,第一段索引存储的是一天以内的数据(包括本数),第二段索引存储的是一天之前的数据,那么,对于第一段索引,由于该段中生成的数据相对较新,被搜索的可能性较大,并且,该段中数据文档的排序由于搜索的不确定性可能波动较大,那么,对于这样的段,该段中缓存的数据文档相对要多一些,否则,如果缓存过小,有些数据文档之前由于排序字段的原因被排在后面而不能缓存,但是由于是新数据,排序字段波动较大,当新数据突然置于搜索的热门位置时,由于没有缓存,只能从其他存储单元中进行搜索,使得实时搜索的效率大大降低。因此,为了提高热门数据的实时搜索效率,不因数据的 排序字段一时排后而突然超前时,数据没有能够缓存而影响数据搜索的效率,需要根据不同索引段的生成时间,设定不同的缓存空间,甚至,对于最新的索引段,将用户所需要搜索的与该索引段相关的所有数据予以缓存,提高实时搜索的效率。在缓存的索引段中包括部分重复搜索请求的搜索结果。具体来说,将预定时间内超过预定次数的搜索请求的搜索结果进行缓存,当再次接收到相同搜索请求时直接调出已缓存的搜索结果。例如统计过去3天内被重复超过10000次的搜索请求。假设,搜索“出租房屋”在过去3天被请求12000次。则将该搜索请求的搜索结果包含在索引段中进行缓存。当再次请求该搜索时,直接从缓存中调出缓存的搜索结果。该缓存的搜索结果可以实时更新。当然,由于时间较新的索引段,其内容更新的速度较快,为了满足用户的数据搜索需求,也需要将该段中较多的数据予以缓存。例如,用户需要搜索50篇文档,如果缓存中有50篇文档,而由于文档更新速度快,其中I篇已被删除或者其中的信息已过期,因此,只能从缓存中返回49篇有效的文档给用户,这就降低了实时搜索的效率;如果缓存的文档数为52篇,那么,就可以较快地从缓存中返回50篇有效的文档给用户。对于时间较为久远的段,由于其更新的速度较慢,可以在缓存中存入的文档数相对少一些,如此,也可以节省缓存空间。步骤S 103,搜索数据时,先从缓存中搜索各索引段的文档,缓存中存在目标数据时,则返回目标数据;否则,从其他存储单元中搜索数据。具体地,由上文可知,一个完整的索引由多个段组成,每个段是一份可搜索的最小单元,它由多个文档生成。由于从缓存中返回数据比从其他存储单元中返回数据的速度更快,因此,参照图2,图2为根据本发明的一个优选实施例的搜索数据的方法流程图,根据图2,搜索数据的具体过程包括步骤S201,搜索数据时,先从缓存中搜索各索引段的文档。步骤S202,判断缓存中是否存在所要搜索的数据,如果不存在,进入步骤S203 ;如果存在,进入步骤S204。步骤S203,如果缓存中不存在目标数据,则从其他存储单元中搜索数据,并将搜索的目标数据所对应的文档,按照上文中所设定的主键予以排序,置入缓存。例如,用户从搜索引擎中输入关键词,第一页搜索结果中得到50个数据文档,这50个数据文档都没有缓存,那么可以将这50个数据文档按照文档号予以排序,并将排好序的数据文档从其他存储单元置入缓存,以便于下次从搜索引擎中输入相同关键词时,直接从缓存中返回数据,提高实时搜索的效率。步骤S204,如果缓存中存在目标数据(即所要搜索的数据),则进一步判断,目标数据对应的文档的排序字段是否被更改,如果没有被更改,则进入步骤S205,否则,进入步骤S206。步骤S205,直接取得缓存的目标数据,返回。步骤S206,如果目标数据对应的文档的排序字段被更改,如文档的标识号被更改,则对该文档按照排序字段重新排列到合适位置,并将其重新写回缓存,并将重新排列的文档中的数据返回。 步骤S104,将从相应索引段中所搜索的目标数据,和/或存储单元中所搜索的目标数据予以合并,返回合并的数据。具体地,一个完整的搜索结果由多个段的结果合并而成,取得各个段的搜索结果后,作合并,返回到客户端。通常,收到索引的搜索请求后,解析该搜索请求并判断所要搜索的目标段,并串行搜索各个目标段,最后,将搜索的结果排好序后,发送到客户端。例如,索引分为两段予以缓存,一段中生成的是一天以内的数据,另一段中生成的是一天之前的数据,而用户需要搜索50篇有关租房的文档信息,那么,从第一段所缓存的数据中返回50篇文档,同样,从第二段所缓存的数据中也可以返回50篇文档,共返回100篇文档。当从这100篇文档中返回用户所需的50篇有关租房的文档信息时,可以根据这些文档与用户需求的相关度,如按照用户租房的要求对这些文档进行打分,然后根据分数的高低予以排序,将前50篇文档返回给用户。如上文,部分数据在缓存中没有存储时,则从这些非缓存的存储单元中搜索到目标数据时,将缓存中所搜索的目标数据和这些非缓存的目标数据一起合并,然后返回给用户。同样地,所要搜索的数据在缓存中都没有存储时,则从其他存储单元中搜索数据,并将所搜索的目标数据予以合并,返回给用户。上文中,每个索引段的缓存空间根据索引段的生成时间可以不同,但是,每个索引段进行更新时,可以有相同的更新方法,例如,更新时,判断每个索引段的缓存空间是否写满,若写满,则覆盖部分已写入的数据;若未写满,则写入所更新的数据。当然,本领域的技术人员应该清楚,本发明的索引结构的建立可以采用其他通用的方法,只要最终将索引按照时间予以分段,都属于本方案的内容,为了简明起见,在此不再赘述。本发明所提供的实时搜索的方法具有以下优点I)通过采用缓存的方案,提高了实时搜索的效率;2)针对不同时间段的数据,采用不同的缓存方案,提高了实时搜索的灵活性。以上所揭露的仅为本发明的一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
权利要求
1.一种实时搜索的方法,该方法包括以下步骤 将数据文档按照时间顺序生成多段索引; 从各索引段中提取部分数据,予以缓存,其中,根据各段的生成时间确定提取该段进行缓存的数据量; 搜索数据时,先从缓存中搜索各索引段的文档,缓存中存在目标数据时,则返回目标数据;否则,从其他存储单元中搜索数据; 将从缓存所搜索的目标数据和/或从存储单元中所搜索的目标数据予以合并,返回合 并的数据。
2.根据权利要求I所述的方法,其特征在于,所述的按照时间顺序将数据文档生成多段索引的步骤还包括对各个索引段打上其生成时间的时间标记。
3.根据权利要求I或2所述的方法,其特征在于,所述根据各段的生成时间确定提取该段进行缓存的数据量的步骤还包括从新生成的段中所提取的用于缓存的数据量比之前生成的段所用于缓存的数据量大。
4.根据权利要求I或2所述的方法,其特征在于,所述根据各段的生成时间确定提取该段进行缓存的数据量的步骤还包括对于最新的索引段,将用户所需要搜索的与该索引段相关的所有数据予以缓存。
5.根据权利要求I或2所述的方法,其特征在于,所述返回合并的数据的步骤还包括 缓存中存在所要搜索的数据,则返回目标数据; 缓存中不存在所要搜索的数据,则从其他存储单元中搜索数据,并将搜索的目标数据所对应的文档,按照标识予以排序并置入缓存。
6.根据权利要求I或2所述的方法,其特征在于,所述缓存中存在所要搜索的数据则返回目标数据的步骤还包括以下步骤 目标数据对应的文档的排序字段被更改,则对该文档按照排序字段重新排列到合适位置,并将其重新写回缓存,并将重新排列的文档中的数据返回; 否则,直接取得缓存的目标数据。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述索引由多个段组成,每个段由多个文档生成,其中,每个文档在段中具有唯一的标识。
8.根据权利要求I或2所述的方法,其特征在于,所述被缓存的索引段中包括搜索请求和相应的搜索结果。
9.根据权利要求8所述的方法,其特征在于,将预定时间内超过预定次数的搜索请求的搜索结果进行缓存,当再次接收到相同搜索请求时直接调出已缓存的搜索结果。
全文摘要
本发明提供了一种实时搜索的方法,该方法包括以下步骤将数据文档按照时间顺序生成多段索引;从各索引段中提取部分数据,予以缓存,其中,根据各段的生成时间确定提取该段进行缓存的数据量;搜索数据时,先从缓存中搜索各索引段的文档,缓存中存在目标数据时,则返回目标数据;否则,从其他存储单元中搜索数据;将从缓存所搜索的目标数据和/或从存储单元中所搜索的目标数据予以合并,返回合并的数据。本发明提供的方案针对不同时间段的数据,采用不同的缓存方案,提高了实时搜索的效率和灵活性。
文档编号G06F17/30GK102737133SQ20121021794
公开日2012年10月17日 申请日期2012年6月27日 优先权日2012年6月27日
发明者孙海涛, 崔金峰, 龚伟坚 申请人:北京城市网邻信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1