过滤方法和服务器的制造方法

文档序号:6511890阅读:148来源:国知局
过滤方法和服务器的制造方法
【专利摘要】本发明实施例公开了过滤方法和服务器。基于预先建立的对象索引,所述对象索引包括针对属性值建立的列索引;上述过滤方法包括:接收过滤条件,所述过滤条件包括至少一个属性值;获取与所述过滤条件中的属性值相匹配的列索引中的对象集,所述对象集中的对象均拥有所述属性值;对获取到的对象集取交集,取交集后得到的对象作为过滤结果。可见,在本发明实施例中,由于针对每一属性值设置了对象集,这样,在过滤时,可获取到与过滤条件中的属性值相匹配的列索引的对象集,再通过对对象集取交集,即可实现过滤。
【专利说明】过滤方法和服务器

【技术领域】
[0001]本发明涉及查询【技术领域】,更具体地说,涉及过滤方法和服务器。

【背景技术】
[0002]在数据查询、信息检索等领域,经常需要对对象进行过滤(查询、检索)。上述对象可能是产品(例如手机)、人员等等。对象一般具有属性和属性值。其中,属性和属性值相关联,比如,某款手机的“手机操作系统”(OS)为Android,则“OS”是手机的一种属性,而Android是“OS”这一属性对应的属性值。如何对对象进行过滤、查询,是时下研究的热门。


【发明内容】

[0003]有鉴于此,本发明实施例的目的在于提供过滤方法和服务器,以解决上述问题。
[0004]为实现上述目的,本发明实施例提供如下技术方案:
[0005]根据本发明实施例的第一方面,提供一种过滤方法,基于预先建立的对象索引,所述对象索引包括针对属性值建立的列索引;
[0006]所述方法包括:
[0007]接收过滤条件,所述过滤条件包括至少一个属性值;
[0008]获取与所述过滤条件中的属性值相匹配的列索引中的对象集,所述对象集中的对象均拥有所述属性值;
[0009]对获取到的对象集取交集,取交集后得到的对象作为过滤结果。
[0010]结合第一方面,在第一种可能的实现方式中,所述列索引包括关键字和对象集,所述关键字至少包括属性值;任一列索引中的属性值不同于其他列索引中的属性值;
[0011]所述对象索引通过如下方式建立:
[0012]将每一对象的每一属性值分别作为目标属性值,建立针对所述目标属性值的列索弓I ;
[0013]所述建立针对所述目标属性值的列索引包括:
[0014]在不存在针对所述目标属性值的列索引时,新建列索引,令新建的列索引的关键词包含所述目标属性值,并且,所述新建的列索引的对象集,包含所述目标属性值对应的对象;
[0015]在存在针对所述目标属性值的列索引时,将所述目标属性值对应的对象插入到,针对所述目标属性值的列索引的对象集中。
[0016]结合第一方面,或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述列索引采用Hash结构存储。
[0017]结合第一方面,或第一方面的第一种可能的实现方式,或第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述对象集中的对象按自然序排列。
[0018]结合第一方面,或第一方面的第一种可能的实现方式,或第一方面的第二种可能的实现方式,或第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述对获取到的对象集取交集包括:
[0019]当获取到N个对象集时,进行N-1轮匹配查找处理,所述N为不小于2的自然数。
[0020]结合第一方面的第四种可能的实现方式,在第五种可能的实现方式中,第i轮匹配查找处理包括第一处理和第二处理,所述i为不小于I并且不大于N-1的自然数,其中:
[0021]所述第一处理包括:任选两个未参与匹配查找处理的对象集,其中一个对象集作为参考集,另一个对象集作为被搜索集;
[0022]依次将所述参考集中的对象作为目标参考对象;
[0023]在所述被搜索集中查找是否存在与所述目标参考对象相匹配的对象;
[0024]所述第二处理包括:
[0025]当不满足预设条件时,保留匹配成功的对象至中间对象集,并将所述中间对象集作为未参与匹配查找处理的对象集;
[0026]当满足预设条件时,保留匹配成功的对象到最终对象集;
[0027]所述预设条件包括i=N_l。
[0028]结合第一方面的第五种可能的实现方式,在第六种可能的实现方式中,所述将取交集后得到的对象作为过滤结果包括:
[0029]将所述最终对象集中的对象作为过滤结果。
[0030]结合第一方面的第五种可能的实现方式,或第一方面的第六种可能的实现方式,在第七种可能的实现方式中,所述在所述被搜索集中查找是否存在与所述目标参考对象相匹配的对象包括:
[0031]在所述被搜索集中按二分法查找是否存在与所述目标参考对象相匹配的对象。
[0032]结合第一方面的第七种可能的实现方式,在第八种可能的实现方式中,所述参考集中包括的对象数不大于被搜索集中的对象数。
[0033]结合第一方面的第一种可能的实现方式,在第九种可能的实现方式中,还包括:
[0034]接收输入的新增对象的相关数据,所述相关数据至少包括属性值;
[0035]获取所述新增对象的属性值;
[0036]从所述对象索引中,获取关键字与所述属性值相匹配的列索引中的对象集;
[0037]将所述新增对象插入获取到的对象集中。
[0038]结合第一方面至第一方面的第九种可能的实现方式中的任一种可能的实现方式,在第二种可能的实现方式中,所述对象索引存储于缓存服务器中。
[0039]结合第一方面的第十种可能的实现方式,在第i^一种可能的实现方式中,所述获取与所述过滤条件中的属性值相匹配的列索引中的对象集包括:
[0040]向所述缓存服务器发送,至少包含过滤条件中的属性值的获取指令;以便所述缓存服务器寻找关键字与所述获取指令中的属性值相匹配的列索引中的对象集,并返回。
[0041]结合第一方面的第十种可能的实现方式,在第十二种可能的实现方式中,所述从所述对象索引中,获取关键字与所述属性值相匹配的列索引中的对象集包括:
[0042]向所述缓存服务器发送至少包含新增对象的属性值的获取指令;以便所述缓存服务器寻找关键字与所述获取指令中的属性值相匹配的列索引中的对象集作为目标对象集,并返回所述目标对象集;
[0043]所述将所述新增对象插入获取到的对象集中包括:
[0044]在本地将所述新增对象插入目标对象集中,得到更新后的目标对象集;
[0045]利用更新后的目标对象集替换缓存服务器中的目标对象集。
[0046]结合第一方面,在第十三种可能的实现方式中,所述过滤条件由前台发出;
[0047]所述方法还包括:
[0048]获取所述过滤结果对应的信息;
[0049]向所述前台返回所述信息,以便所述前台进行显示。
[0050]根据本发明实施例的第二方面,提供一种过滤服务器,基于预先建立的对象索引,所述对象索引包括针对属性值建立的列索引;所述过滤服务器至少包括:
[0051]第一接收单元,用于接收过滤条件,所述过滤条件包括至少一个属性值;
[0052]第一获取单元,用于获取与所述过滤条件中的属性值相匹配的列索引中的对象集,所述对象集中的对象均拥有所述属性值;
[0053]过滤单元,用于对获取到的对象集取交集,取交集后得到的对象作为过滤结果。
[0054]结合第一方面,在第一种可能的实现方式中,所述列索引包括关键字和对象集,所述关键字至少包括属性值;任一列索引中的属性值不同于其他列索引中的属性值;
[0055]所述服务器还包括:
[0056]对象索引建立单元,用于将每一对象的每一属性值分别作为目标属性值,建立针对所述目标属性值的列索引;
[0057]所述对象索引建立单元包括:
[0058]第一对象索引建立子单元,用于在不存在针对所述目标属性值的列索引时,新建列索引,令新建的列索引的关键词包含所述目标属性值,并且,所述新建的列索引的对象集,包含所述目标属性值对应的对象;
[0059]第二对象索引建立子单元,在存在针对所述目标属性值的列索引时,将所述目标属性值对应的对象插入到,针对所述目标属性值的列索引的对象集中。
[0060]结合第一方面,或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,还包括:
[0061]第二接收单元,用于接收输入的新增对象的相关数据,所述相关数据至少包括属性值;
[0062]第二获取单元,用于获取所述新增对象的属性值;
[0063]第三获取单元,从所述对象索引中,获取关键字与所述属性值相匹配的列索引中的对象集;
[0064]插入单元,用于将所述新增对象插入获取到的对象集中。
[0065]结合第一方面,或第一方面的第一种可能的实现方式,或第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述过滤条件由前台发出;
[0066]所述的过滤服务器还包括:
[0067]第四获取单元,用于获取所述过滤结果对应的信息;
[0068]返回单元,用于向所述前台返回所述信息,以便所述前台进行显示。
[0069]可见,在本发明实施例中,由于针对每一属性值设置了对象集,这样,在过滤时,可获取到与过滤条件中的属性值相匹配的列索引的对象集,再通过对对象集取交集,即可实现过滤。

【专利附图】

【附图说明】
[0070]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0071]图1为本发明实施例提供的通用计算机结构示意图;
[0072]图2为本发明实施例提供的过滤方法流程图;
[0073]图3a为本发明实施例提供的列索引示意图;
[0074]图3b为本发明实施例提供的列索引另一不意图;
[0075]图4为本发明实施例提供的列索引又一示意图;
[0076]图5为本发明实施例提供的取交集示意图;
[0077]图6为本发明实施例提供的二分法查找示意图;
[0078]图7为本发明实施例提供的过滤方法另一流程图;
[0079]图8为本发明实施例提供的前、后台交互流程图;
[0080]图9为本发明实施例提供的过滤方法又一流程图;
[0081]图10为本发明实施例提供的前、后台交互另一流程图;
[0082]图11为本发明实施例提供的缓存方法流程图;
[0083]图12为本发明实施例提供的过滤服务器结构示意图;
[0084]图13为本发明实施例提供的过滤服务器另一结构示意图;
[0085]图14为本发明实施例提供的缓存服务器结构示意图;
[0086]图15为本发明实施例提供的缓存服务器另一结构示意图。

【具体实施方式】
[0087]例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0088]在数据查询、信息检索等领域,经常会对对象进行查询、检索。上述对象可能是产品(例如手机)、人员等等。对象一般具有多对属性和属性值。其中,属性和属性值是相关联的,比如,某款手机的“手机操作系统”(OS)为Android,则“OS”是手机的一种属性,而Android是“OS”这一属性对应的属性值。如何对对象进行过滤、查询,是时下研究的热门。
[0089]有鉴于此,本发明实施例提供过滤方法和过滤服务器,以至少实现对对象进行过滤。
[0090]上述过滤服务器作为过滤方法的执行主体,其通用计算机结构如图1所示,可包括CPU101、存储器102和收发器104。其中,收发器104可用于收、发一切数据和指令,CPUlOl通过运行存储在存储器102内的软件程序103,调用存储在存储器102内的数据,以及调用收发器104,执行过滤方法中的各步骤。
[0091]需要说明的是,本发明所提供的技术方案,基于预先建立的对象索引。上述对象索引包括针对属性值建立的列索引。
[0092]上述对象索引是实现快速过滤的基础。基于对象索引,参见图2,过滤服务器所执行的过滤方法可包括如下步骤:
[0093]S1、接收过滤条件,上述过滤条件包括至少一个属性值;
[0094]S2、获取与上述过滤条件中的属性值相匹配的列索引中的对象集,该对象集中的对象均拥有过滤条件中的属性值;
[0095]S3、对获取到的对象集取交集,取交集后得到的对象作为过滤结果。
[0096]可见,在本发明实施例中,由于针对每一属性值设置了对象集,在过滤时,可获取到与过滤条件中的属性值相匹配的列索引的对象集,再通过取交集,即可实现过滤。
[0097]在本发明其他实施例中,请参见图3a,每一列索引可包括关键字和对象集。由于列索引是针对属性值建立,因此,关键字中至少包括属性值,而与之对应的对象集中所包括的对象都拥有同一属性值,也即关键字中的属性值。并且,任一列索引所针对的属性值不同于其他列索引所针对的属性值。或者可以说,每一属性值对应一个对象集。
[0098]需要说明的是,由于关键词中包含属性值,因此,上述(步骤S2) “获取与上述过滤条件中的属性值相匹配的列索引中的对象集”中的“相匹配”,可指过滤条件中的属性值与关键词相匹配。
[0099]更具体的,上述关键字可同时包括属性和属性值,而上述对象可为产品ID、人名等,也可为其他。
[0100]以手机为例,请参见图3b,列索引I中的关键字为“OS:Android”,其对象集包括Galaxy S4、HTC G20、MX2等手机产品ID。同理,列索引2中的关键字为“OS:10S”,其对象集包括IPhone4、IPhone4S、IPhone5等手机产品ID。而列索引3中的关键字为“制造商:HTC”,其对象集包括HTC G20、HTCS5等手机产品ID。
[0101]如以图3b为例,假定步骤SI中的过滤条件,包括OS=Android以及制造商=HTC。也即,上述过滤条件包括属性(OS和制造商)以及,属性值(Android和HTC)。则在步骤S2中,根据属性值Android和HTCS3,可获取到列索引I和列索引N的对象集。而在步骤S3中,则可对列索引I的对象集和列索引N的对象集取交集,则至少可得到HTC G20这一对象(产品ID),从而,HTC G20将作为过滤结果。
[0102]在本发明其他实施例中,上述对象索引可通过如下方式建立:将每一对象的每一属性值分别作为目标属性值,建立针对该目标属性值的列索引。
[0103]更具体的,上述建立针对所述目标属性值的列索引可包括:
[0104]在不存在针对上述目标属性值的列索引时,新建列索引,令新建的列索引的关键词包含该目标属性值,并且,上述新建的列索引的对象集,包含上述目标属性值对应的对象;
[0105]在存在针对上述目标属性值的列索引时,将上述目标属性值对应的对象插入到,针对该目标属性值的列索引的对象集中。
[0106]举例来讲,假定欲对所有的手机产品建立对象索引。则遍历所有手机型号(手机ID),获取每一手机型号的属性及属性值。针对每一属性值建立列索引:
[0107]假定HTC G20具有两个属性OS和制造商,其对应的属性值分别为Android和HTC ;
[0108]则针对Android这一属性值,查找是否存在针对Android的列索引;
[0109]如果不存在,则新建一列索引,该新建列索引的关键词为“OS:Android”,其对象集中包含“ HTC G20” ;
[0110]如果存在关键词为“OS:Android”的列索引,则可在其对象集中插入“HTC G20”(可使用二分法查找存储位置插入,本文后续将介绍二分法);
[0111]同理,对于HTC这一属性值,也进行类似的处理过程。
[0112]在本发明其他实施例中,上述对象索引可存储于缓存服务器中。缓存服务器启动时,可将对象索引加载到缓存服务器中,以供过滤查询使用。或者,对象索引也可存储于过滤服务器的本地存储中,在此不作限定。
[0113]过滤服务器与缓存服务器之间,可通过基于现有的TCP/IP协议之上的socket接口进行通信。
[0114]当对象索引存储在缓存服务器中时,上述步骤S2可具体包括:
[0115]向缓存服务器发送至少包含查询条件中的属性值的获取指令。以便缓存服务器寻找关键字与获取指令中的属性值相匹配的列索引中的对象集,并返回找到的对象集。此外,如未找到相匹配的列索引,则缓存服务器返回空对象集。
[0116]在本发明其他实施例中,请参见图4,上述实施例中的列索引采用Hash结构存储。也即,对象索引为一大的Hash (哈希)表,而每一列索引可作为Hash表的一个项。Hash数据结构中的Key用于存储关键词,Value用于存储对象集。
[0117]列索引采用Hash结构存储,可以非常方便部署到独立的缓存服务器中。现有大部分独立缓存服务器以Hash结构来存储数据,这样,上述对象索引数据能完美的存储到这类缓存服务器中。
[0118]在本发明其他实施例中,还可将上述所有实施例中,关键字所对应的哈希值(上述哈希值至少是根据属性值计算得出)作为该列索引的存储位置。
[0119]仍请参见图3b或图4,以关键字为OS =Android的列索引为例,可计算“OS:Android”或“Android”的哈希值,假定其哈希值等于I,则将关键字为“OS:Android”的列索引存储在Hash表的第一项;同理,假定关键字为OS:10S的哈希值等于50,则将关键字为“OS:10S”的列索引存储在Hash表的第五十项。
[0120]基于上述存储方式,则前述的“寻找关键字与上述获取指令中的属性值相匹配的列索引中的对象集”可包括:
[0121]步骤A,至少根据获取指令中的属性值计算得出第一哈希值;
[0122]假定获取指令中包括“0S=Android”,可计算“OS:Android”或“Android”的哈希值作为第一哈希值。
[0123]步骤B,从等于上述第一哈希值的存储位置处获取对象集。
[0124]假定第一哈希值的取值为1,则从Hash表的第一项处获取对象集,获得GalaxyS4、HTC G20、MX2 等手机产品 ID。
[0125]需要说明的是,由于是直接从等于第一哈希值的存储位置处获取对象集,因此,不需要对整个Hash表中的表项进行遍历,其算法效率为0(1)。
[0126]需要说明的是,如果获取指令中包括多个属性值,则针对每一属性值,都要执行步骤A和B —次,以获取到该属性值对应的对象集。
[0127]在本发明其他实施例中,上述所有实施例中的对象集中的对象可按自然序排列。所谓按自然序排列可指按ASCII码大小排序。
[0128]在计算机【技术领域】,每一字符有一个相应的ASCII码相对应。以图3b中的列索引I为例,其对象集中的对象“Galaxy S4、HTC G20、MX2”可视为字符串。
[0129]在排序时,先比较两个字符串第I个字符,例如,将“Galaxy S4”中的“G”与“HTCG20”中的“H”相比较,如果相等,则再比较两个字符串中的第2个字符,如再相等,则比较第3个字符,直到比较出较小的字符,则与之对应的字符串就排在前面或后面。
[0130]需要说明的是,按ASCII码大小排序,可按从大到小排,也可按从小到大排。按ASCII码大小排序,在对获取到的对象集取交集时,将发挥作用。本文后续将进行介绍。
[0131]步骤S3涉及对获取到的对象集取交集。在取交集时,可使用两两归并原则。
[0132]因此,在本发明其他实施例中,上述所有实施例中的步骤S3可细化包括:当获取到N个对象集时,进行N-1轮匹配查找处理,上述N为不小于2的自然数。
[0133]更具体的,每一轮或者称第i轮(i为不小于I并且不大于N-1的自然数)匹配查找处理,可包括第一处理和第二处理。其中:
[0134]第一处理可包括:任选两个未参与匹配查找处理的对象集,其中一个对象集作为参考集,另一个对象集作为被搜索集;
[0135]依次将上述参考集中的对象作为目标参考对象;
[0136]在上述被搜索集中查找是否存在与上述目标参考对象相匹配的对象;
[0137]而第二处理可包括:
[0138]当不满足预设条件时,保留匹配成功的对象至中间对象集,并将上述中间对象集作为未参与匹配查找处理的对象集;
[0139]当满足预设条件时,保留匹配成功的对象到最终对象集;
[0140]上述预设条件包括i=N_l。
[0141]请参见图5,假定经过步骤S2后,获取到了列索引1、2、X的对象集。由于一共有3个对象集,则需要进行2轮匹配查找处理。
[0142]在第I轮匹配查找处理中,假定选择了列索引I的对象集作为参考集,列索引2作为被搜索集,则依次将Galaxy S4、HTC G20、MX2等手机产品ID作为目标参考对象。在被搜索集(HTC G20、HTCS5)中查找是否存在与上述目标参考对象相匹配的对象。
[0143]在本实施例中,相匹配具体指相同。举例来讲,Galaxy S4作为目标参考对象时,如在被搜索集(HTC G20、HTCS5)中存在与Galaxy S4相同的对象,则将Galaxy S4保留至中间对象集,如不存在,则Galaxy S4不会保留至中间对象集。在HTC G20作为目标参考对象,也是如此。
[0144]之所以将匹配成功的对象保留至中间对象集,是因为,此为第I轮匹配查找处理,而I小于2 (3-1=2),所以要保留至中间对象集而非最终对象集。
[0145]在将参考集中的所有对象都匹配完后,将中间对象集作为未参与匹配查找处理的对象集。开始第2轮匹配查找处理。
[0146]在第2轮匹配查找处理中,是中间对象集和列索引X的对象集,一个作为参考集、一个作为被搜索集。依次将参考集中的对象作为目标参考对象,在被搜索集中查找是否存在与目标参考对象相匹配的对象。由于是最后一轮匹配查找处理,因此,要将匹配成功的对象保留至最终对象集。
[0147]在将参考集中的所有对象都匹配完后,上述最终对象集中的对象即为过滤结果。因此,步骤S3中的“将取交集后得到的对象作为过滤结果”可具体包括:将上述最终对象集中的对象作为过滤结果。
[0148]下面,将对“在上述被搜索集中查找是否存在与上述目标参考对象相匹配的对象”进行详细介绍。
[0149]在本发明其他实施例中,可以将目标参考对象与被搜索集中的对象逐一进行匹配。或者,也可在被搜索集中按二分法查找是否存在与目标参考对象相匹配的对象。
[0150]前述提及了,对象集中的对象可按ASCII码大小排序。二分法查找就是基于ASCII码大小来实现的。
[0151]二分法查找原理是:对于给定值X,从序列的中间位置开始比较。如果当前位置值等于X,则查找成功;若X小于当前位置值,则在序列的前半段中查找;若X大于当前位置值,则在序列的后半段中继续查找。
[0152]现举例说明二分法查找,请参见图6,假定目标参考对象对应的ASCII码为50,被搜索集有5个对象(对象1-对象5),并且,假定对象1-5对应的SCII码为20、30、40、50、60。可见,被搜索集中的对象是按ASCII码从小到大排列的。
[0153]目标参考对象对应的ASCII码一50作为上述给定值X,而对象I至对象5则为序列,其二分法查找过程如下:从对象I至对象5的中间位置开始比较,也即,将对象3与目标参考对象比较。对象3的ASCII码为40,小于X (50),则在对象I至对象5的后半段(也即对象4至对象5)中查找。
[0154]对象4至对象5的中间位置为对象4,将对象4与目标参考对象比较,对象3的ASCII码为50,等于上述给定值X,则查找成功。
[0155]通过上例可看出,通过两次查找,就找到了与目标参考对象相匹配的对象。而如将目标参考对象与被搜索集中的对象逐一进行匹配,则需要进行4次查找。实际上,二分法的运算总次数为P*log2R。其中,P表示参考集中对象的个数,而R表示被搜索集中对象的个数。可以看出,效率是非常高的。
[0156]在数学上容易证明:当R>P大时,P*log2R〈R*log2P。
[0157]因此,为进一步节省时间,上述参考集中包括的对象数不大于被搜索集中的对象数。也即,选择对象数较少的对象集作为参考集。
[0158]当然,也可对对象集中的每一对象计算哈希值,基于哈希值进行二分法查找。由于原理相似,在此不作赘述。
[0159]基于上述过滤,在本发明其他实施例中,还可进一步实现用户通过前台查询对象。在本实施例中,参见图7,过滤服务器(后台)至少可包括如下步骤:
[0160]S701、接收来自前台的查询条件,上述查询条件包括至少一个属性值;
[0161]S702、获取关键字与上述查询条件中的属性值相匹配的列索引中的对象集;
[0162]如何获取对象集可参见本文前述记载,在此不作赘述。
[0163]S703、对获取到的对象集取交集;
[0164]如何取交集可参见本文前述记载,在此不作赘述。
[0165]S704、获取取交集后得到的对象所对应的信息;
[0166]在前已述及,对象可为产品ID、人名等,因此,过滤服务器可根据产品ID向数据库查询产品ID所对应的信息、人名的相应信息等。
[0167]S705、向上述前台返回上述信息,以便上述前台进行显示。
[0168]需要说明的是,前台与后台之间,可采用基于http协议之上的webservice接口进行通信。
[0169]上述过滤方法有广泛的应用场景。例如,其可应用在网站,尤其是网上商城中,以便于用户从成千上万的产品(商品)中,快速查询到符合条件的产品。需要说明的是,对于网站而言,所有列索引中的对象集取并集,就为网站(网上商城)中的所有产品。
[0170]更具体,请参见图8,前、后台相关交互流程如下:
[0171]S801、假定,用户在前台页面所提供的手机产品列表中选择OS为“Android”,制造商为“HTC”,状态(Condit1n)为“新”(New),则用户输入了用于查询的属性和属性值;
[0172]S802、前台系统组装用户查询条件(在本实施例中,OS=Android ;制造商=HTC ;Condit1n=New)后,提交给过滤服务器;
[0173]S803、过滤服务器根据查询条件,向缓存服务器发送包含查询条件中的属性值的获取指令。
[0174]图8 中的 getCache (OS: Android)、getCache (制造商:HTC),以及getCache (Condit1n:New),就是获取指令。
[0175]S804、缓存服务器返回找到的对象集;
[0176]缓存服务器如何获取对象集可参见本文前述记载,在此不作赘述。
[0177]S805、过滤服务器对获取到的对象集取交集,各对象集的交集即是最终需要查询的产品ID,也即过滤结果;
[0178]如何取交集可参见本文前述记载,在此不作赘述。
[0179]S806、过滤服务器向数据库查询过滤结果所对应的信息,返回给前台系统;
[0180]S807、前台系统根据过滤服务器的返回结果组织前台页面,并展示给用户。
[0181]此外,在实际中,不可避免的会需要新增对象。因此,参见图9,在本发明其他实施例中,上述过滤方法还可包括如下步骤:
[0182]S91、接收输入的新增对象的相关数据,上述相关数据至少包括属性值;
[0183]S92、获取上述新增对象的属性值;
[0184]S93、从上述对象索引中,获取关键字与新增对象的属性值相匹配的对象集;
[0185]S94、将上述新增对象插入获取到的对象集中。
[0186]在对象索引存储于缓存服务器中时,上述步骤S93可具体包括:
[0187]向缓存服务器发送至少包含新增对象的属性值的获取指令;以便缓存服务器寻找关键字与上述获取指令中的属性值,相匹配的列索引中的对象集,作为目标对象集,并返回上述目标对象集。
[0188]缓存服务器如何根据获取指令寻找对象集,可参见本文前述记载,在此不作赘述。
[0189]此外,需要说明的是,对于新增对象的某一属性值,如缓存服务器未寻找到相匹配的对象集,则新建一个列索引,该新建的列索引的关键词包含该属性值。
[0190]与之相对应,上述步骤S94可包括:
[0191](过滤服务器)在本地将新增对象插入目标对象集中,得到更新后的目标对象集;
[0192]利用更新后的目标对象集替换缓存服务器中的目标对象集。
[0193]请参见图10,设备间的交互流程如下:
[0194]S101、产品管理员在后台录入新增对象的基本信息和属性后,提交到过滤服务器;
[0195]S102、过滤服务器将新增对象添加到数据库;
[0196]S103、过滤服务器获取新增对象的属性值;
[0197]S104、过滤服务器从缓存服务器处获取属性值对应的对象集(列索引);
[0198]S105、在获取到对象集后,过滤服务器将新增对象按自然序插入到对象集中(可使用二分法查找存储位置插入);
[0199]S106、插入完成后,过滤服务器重新PUT更新后的目标对象集到缓存服务器;更具体的,过滤服务器把构建好的列索引,按HASH数据结构方式存储到缓存服务器中。
[0200]S107、缓存服务器返回成功,表示该新增对象的这一属性值对应的列索引已经缓存更新完成。
[0201]需要说明的是,如果新增对象有多个属性值,则重复执行步骤S104至S107 ;
[0202]S108、所有属性值的列索引缓存更新后,过滤服务器返回操作成功。
[0203]需要说明的是,在一现有技术中,网站(商城)为过滤出产品,使用的是产品逐行全量缓存方式:在启动时,将产品与产品所对应的属性值从数据库中全部查询出来,并逐个将产品与属性值组成一行后,全部加载到服务器中进行缓存,以便供查询使用。也即,其是将产品作为关键词,每一产品占一行记录的方式进行缓存的。
[0204]商城用户在点击前台某个产品种类的属性值后(所点击的属性值作为过滤属性值),服务器遍历该类型每一产品,在遍历中将每一个产品的每一属性值与过滤属性值相匹配,如匹配成功,则匹配成功的产品被过滤出来。
[0205]上述产品逐行全量缓存方式存在下述缺点:
[0206]一,缓存部署问题:对产品的缓存、过滤查询必须在同一台服务器,也即,该方式没有将缓存数据与过滤相分离。在网上商城多服务器部署(现中、大型商城基本都是多机部署)环境下,每台服务器都需要有本地缓存,这对服务器有限且宝贵的内存资源来说,是一种很大的浪费。
[0207]另外,多服务器部署商城系统条件下,后台如对产品进行更新后,需同步更新多台服务器中的产品缓存,如某台服务器更新异常,还易产生数据不同步问题。
[0208]二,扩容性问题:由于缓存的数据量庞大,在实行本地缓存时,扩容将受本地内存空间的限制。
[0209]一般在商城运营初期,由于产品数量不多,上述扩容问题并不太明显,到了运营成长期,产品量将成倍增长,扩容问题将会日益严重。
[0210]三,响应速度问题:查询产品这一功能,要求前台响应速度一般在2秒以内,考虑到网络延迟,给后台计算的时间不足0.5秒。而在网站(商城)中,由于产品数量众多,采用产品逐行全量缓存则需要从成千上万的产品中遍历匹配,需要大量的循环计算匹配,在响应速度具有一定的改进空间。
[0211]与上述现有技术的缺点相对应,本发明以上实施例可带来的好处包括以下几点:
[0212]一,在本发明实施例中,缓存服务器可与过滤服务器相分离,从而将缓存存储与过滤计算相分离。其直接带来的好处是:缓存存储可以在分布式环境下独立部署,降低对本地缓存需求,提高资源利用率;而由于缓存存储的独立性与公共性,缓存的对象集结构简单,使后台对象数据的更新可以高可靠、同步更新;
[0213]二,兼容性好:由于使用属性值(Key)-对象集(Value)这种结构方式,可很好与目前绝大独立缓存服务器的结合,而这类缓存服务器(如Memcached、Redis等)对于缓存分布式、多级缓存体系统(Cahe-内存-磁盘等)有很成熟的功能;
[0214]三,查找速度快:以关键字所对应的哈希值作为该列索引的存储位置进行查找,算法效率为0(1)。并且,对获得的对象集取交集时采用“二分法查找”运算,都可以提高查找速度,从而可非常快速得响应前台查询。
[0215]与之相对应,本发明实施例还提供一种缓存方法,其执行主体为缓存服务器,参见图11,该缓存方法亦基于前述对象索引,其至少包括如下步骤:
[0216]S111、接收至少包含属性值的获取指令;
[0217]S112、寻找关键字与上述获取指令中的属性值相匹配的列索引中的对象集,并返回。
[0218]本文前述已经记载了上述列索引采用Hash结构存储。在本发明其他实施例中,上述列索引中关键字所对应的哈希值,作为上述列索引的存储位置,上述哈希值至少是根据属性值计算得出。
[0219]相应的,上述步骤SI 12可包括如下步骤:
[0220]至少根据获取指令中的属性值计算得出第一哈希值;
[0221]从等于第一哈希值的存储位置处获取对象集。
[0222]相关内容可参见本文前述记载,在此不作赘述。
[0223]与上述过滤方法相对应,本发明实施例还提供一种过滤服务器。图12示出了上述过滤服务器的一种结构,其至少可包括:
[0224]第一接收单元1,用于接收查询条件,上述查询条件包括至少一个属性值;
[0225]第一获取单元2,用于获取与上述查询条件中的属性值相匹配的列索引中的对象集;
[0226]过滤单元3,用于对获取到的对象集取交集,取交集后得到的对象作为过滤结果。
[0227]相关内容请参见本文前述记载,在此不作赘述。
[0228]在本发明其他实施例中,上述过滤服务器还可包括对象索引建立单元,其用于将每一对象的每一属性值分别作为目标属性值,建立针对目标属性值的列索引。
[0229]更具体的,上述对象索引建立单元可进一步包括第一对象索引建立子单元和第二对象索引建立子单元,其中:
[0230]第一对象索引建立子单元,用于在不存在针对目标属性值的列索引时,新建列索弓I,令新建的列索引的关键词包含上述目标属性值,并且,新建的列索引的对象集,包含该目标属性值对应的对象;
[0231]第二对象索引建立子单元,用于在存在针对上述目标属性值的列索引时,将上述目标属性值对应的对象,插入到针对目标属性值的列索引的对象集中。
[0232]相关内容请参见本文前述记载,在此不作赘述。
[0233]在本发明其他实施例中,针对新增对象,上述过滤服务器还可包括:
[0234]第二接收单元,用于接收输入的新增对象的相关数据,上述相关数据至少包括属性值;
[0235]第二获取单元,用于获取上述新增对象的属性值;
[0236]第三获取单元,从上述对象索引中,获取关键字与上述属性值相匹配的列索引中的对象集;需要说明的是,对于新增对象的某一属性值,如缓存服务器未寻找到相匹配的对象集,则新建一个列索引,该新建的列索引的关键词包含该属性值。
[0237]插入单元,用于将上述新增对象插入获取到的对象集中。
[0238]在本发明其他实施例中,上述过滤服务器还可包括:
[0239]第四获取单元,用于获取取交集后得到的对象所对应的信息;
[0240]返回单元,用于向前台返回上述信息,以便上述前台进行显示。
[0241]图13给出了上述过滤服务器130的一种硬件结构,其可包括CPU131、存储器132和收发器134。其中,收发器134可用于收、发一切数据和指令,CPU131通过运行存储在存储器132内的软件程序133,调用存储在存储器132内的数据,以及调用收发器134,至少可执行如下步骤:
[0242]接收过滤条件,上述过滤条件包括至少一个属性值;
[0243]获取与上述过滤条件中的属性值相匹配的列索引中的对象集;
[0244]对获取到的对象集取交集,取交集后得到的对象作为过滤结果。
[0245]此外,上述过滤服务器130亦可完成本文方法部分所介绍的、过滤服务器可执行的其他步骤,以及各步骤的细化,在此不作赘述。
[0246]与之相对应,本发明实施例还提供了缓存服务器。图14示出了上述缓存服务器的一种结构,其至少可包括:
[0247]第四接收单元7,用于接收至少包含属性值的获取指令;
[0248]寻找单元8,用于寻找关键字与上述获取指令中的属性值相匹配的列索引中的对象集,并返回。
[0249]图15给出了上述缓存服务器150的一种硬件结构,其可包括CPU151、存储器152和收发器154。其中,收发器154可用于收、发一切数据和指令,CPU151通过运行存储在存储器152内的软件程序153,调用存储在存储器152内的数据及调用收发器154,至少可执行如下步骤:
[0250]接收至少包含属性值的获取指令;
[0251]寻找关键字与上述获取指令中的属性值相匹配的列索引中的对象集,并返回。
[0252]此外,上述缓存服务器150亦可完成本文方法部分所介绍的缓存服务器可执行的其他步骤,以及各步骤的细化,在此不作赘述。
[0253]在本发明中,上述存储器具体可为DDR SDRAM、SRAM、FLASH、SSD、RAM、ROM等,其主要包括程序存储区和数据存储区,其中,程序存储区可存储操作系统,以及至少一个功能所需的应用程序等;数据存储区可存储根据CPU的执行情况而最终产生的数据,至于CPU在执行上述步骤所产生的中间数据,则存储在内存中。需要说明的是,在本发明中,CPU和存储器可集成于同一芯片内,也可为独立的两个器件。
[0254]本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
[0255]结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或【技术领域】内所公知的任意其它形式的存储介质中。
[0256]对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
【权利要求】
1.一种过滤方法,其特征在于,基于预先建立的对象索引,所述对象索引包括针对属性值建立的列索引; 所述方法包括: 接收过滤条件,所述过滤条件包括至少一个属性值; 获取与所述过滤条件中的属性值相匹配的列索引中的对象集,所述对象集中的对象均拥有所述属性值; 对获取到的对象集取交集,取交集后得到的对象作为过滤结果。
2.如权利要求1所述的方法,其特征在于,所述列索引包括关键字和对象集,所述关键字至少包括属性值;任一列索引中的属性值不同于其他列索引中的属性值; 所述对象索引通过如下方式建立: 将每一对象的每一属性值分别作为目标属性值,建立针对所述目标属性值的列索引; 所述建立针对所述目标属性值的列索引包括: 在不存在针对所述目标属性值的列索引时,新建列索引,令新建的列索引的关键词包含所述目标属性值,并且,所述新建的列索引的对象集,包含所述目标属性值对应的对象;在存在针对所述目标属性值的列索引时,将所述目标属性值对应的对象插入到,针对所述目标属性值的列索引的对象集中。
3.如权利要求1或2所述的方法,其特征在于,所述列索引采用Hash结构存储。
4.如权利要求1-3任一项所述的方法,其特征在于,所述对象集中的对象按自然序排列。
5.如权利要求1-4任一项所述的方法,其特征在于,所述对获取到的对象集取交集包括: 当获取到N个对象集时,进行N-1轮匹配查找处理,所述N为不小于2的自然数。
6.如权利要求5所述的方法,其特征在于,第i轮匹配查找处理包括第一处理和第二处理,所述i为不小于I并且不大于N-1的自然数,其中: 所述第一处理包括:任选两个未参与匹配查找处理的对象集,其中一个对象集作为参考集,另一个对象集作为被搜索集; 依次将所述参考集中的对象作为目标参考对象; 在所述被搜索集中查找是否存在与所述目标参考对象相匹配的对象; 所述第二处理包括: 当不满足预设条件时,保留匹配成功的对象至中间对象集,并将所述中间对象集作为未参与匹配查找处理的对象集; 当满足预设条件时,保留匹配成功的对象到最终对象集; 所述预设条件包括i=N-l。
7.如权利要求6所述的方法,其特征在于,所述将取交集后得到的对象作为过滤结果包括: 将所述最终对象集中的对象作为过滤结果。
8.如权利要求6或7所述的方法,其特征在于,所述在所述被搜索集中查找是否存在与所述目标参考对象相匹配的对象包括: 在所述被搜索集中按二分法查找是否存在与所述目标参考对象相匹配的对象。
9.如权利要求8所述的方法,其特征在于,所述参考集中包括的对象数不大于被搜索集中的对象数。
10.如权利要求2所述的方法,其特征在于,还包括: 接收输入的新增对象的相关数据,所述相关数据至少包括属性值; 获取所述新增对象的属性值; 从所述对象索引中,获取关键字与所述新增对象的属性值相匹配的列索引中的对象集; 将所述新增对象插入获取到的对象集中。
11.如权利要求1-10任一项所述的方法,其特征在于,所述对象索引存储于缓存服务器中。
12.如权利要求11所述的方法,其特征在于,所述获取与所述过滤条件中的属性值相匹配的列索引中的对象集包括: 向所述缓存服务器发送,至少包含过滤条件中的属性值的获取指令;以便所述缓存服务器寻找关键字与所述获取指令中的属性值相匹配的列索引中的对象集,并返回。
13.如权利要求11所述的方法,其特征在于, 所述从所述对象索引中,获取关键字与所述属性值相匹配的列索引中的对象集包括:向所述缓存服务器发送至少包含新增对象的属性值的获取指令;以便所述缓存服务器寻找关键字与所述获取指令中的属性值相匹配的列索引中的对象集作为目标对象集,并返回所述目标对象集; 所述将所述新增对象插入获取到的对象集中包括: 在本地将所述新增对象插入目标对象集中,得到更新后的目标对象集; 利用更新后的目标对象集替换缓存服务器中的目标对象集。
14.如权利要求1所述的方法,其特征在于, 所述过滤条件由前台发出; 所述方法还包括: 获取所述过滤结果对应的信息; 向所述前台返回所述信息,以便所述前台进行显示。
15.一种过滤服务器,其特征在于,基于预先建立的对象索引,所述对象索引包括针对属性值建立的列索引;所述过滤服务器至少包括: 第一接收单元,用于接收过滤条件,所述过滤条件包括至少一个属性值; 第一获取单元,用于获取与所述过滤条件中的属性值相匹配的列索引中的对象集,所述对象集中的对象均拥有所述属性值; 过滤单元,用于对获取到的对象集取交集,取交集后得到的对象作为过滤结果。
16.如权利要求15所述的服务器,其特征在于,所述列索引包括关键字和对象集,所述关键字至少包括属性值;任一列索引中的属性值不同于其他列索引中的属性值; 所述服务器还包括: 对象索引建立单元,用于将每一对象的每一属性值分别作为目标属性值,建立针对所述目标属性值的列索引; 所述对象索引建立单元包括: 第一对象索引建立子单元,用于在不存在针对所述目标属性值的列索引时,新建列索弓I,令新建的列索引的关键词包含所述目标属性值,并且,所述新建的列索引的对象集,包含所述目标属性值对应的对象; 第二对象索引建立子单元,在存在针对所述目标属性值的列索引时,将所述目标属性值对应的对象插入到,针对所述目标属性值的列索引的对象集中。
17.如权利要求15或16所述的过滤服务器,其特征在于,还包括: 第二接收单元,用于接收输入的新增对象的相关数据,所述相关数据至少包括属性值; 第二获取单元,用于获取所述新增对象的属性值; 第三获取单元,从所述对象索引中,获取关键字与所述属性值相匹配的列索引中的对象集; 插入单元,用于将所述新增对象插入获取到的对象集中。
18.如权利要求15至17任一项所述的过滤服务器,其特征在于, 所述过滤条件由前台发出; 所述的过滤服务器还包括: 第四获取单元,用于获取所述过滤结果对应的信息; 返回单元,用于向所述前台返回所述信息,以便所述前台进行显示。
【文档编号】G06F17/30GK104462104SQ201310422744
【公开日】2015年3月25日 申请日期:2013年9月16日 优先权日:2013年9月16日
【发明者】郭光明 申请人:华为软件技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1