過濾方法和服務(wù)器的制造方法
【專利摘要】本發(fā)明實(shí)施例公開了過濾方法和服務(wù)器?;陬A(yù)先建立的對象索引,所述對象索引包括針對屬性值建立的列索引;上述過濾方法包括:接收過濾條件,所述過濾條件包括至少一個(gè)屬性值;獲取與所述過濾條件中的屬性值相匹配的列索引中的對象集,所述對象集中的對象均擁有所述屬性值;對獲取到的對象集取交集,取交集后得到的對象作為過濾結(jié)果??梢?,在本發(fā)明實(shí)施例中,由于針對每一屬性值設(shè)置了對象集,這樣,在過濾時(shí),可獲取到與過濾條件中的屬性值相匹配的列索引的對象集,再通過對對象集取交集,即可實(shí)現(xiàn)過濾。
【專利說明】過濾方法和服務(wù)器
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及查詢【技術(shù)領(lǐng)域】,更具體地說,涉及過濾方法和服務(wù)器。
【背景技術(shù)】
[0002]在數(shù)據(jù)查詢、信息檢索等領(lǐng)域,經(jīng)常需要對對象進(jìn)行過濾(查詢、檢索)。上述對象可能是產(chǎn)品(例如手機(jī))、人員等等。對象一般具有屬性和屬性值。其中,屬性和屬性值相關(guān)聯(lián),比如,某款手機(jī)的“手機(jī)操作系統(tǒng)”(OS)為Android,則“OS”是手機(jī)的一種屬性,而Android是“OS”這一屬性對應(yīng)的屬性值。如何對對象進(jìn)行過濾、查詢,是時(shí)下研究的熱門。
【發(fā)明內(nèi)容】
[0003]有鑒于此,本發(fā)明實(shí)施例的目的在于提供過濾方法和服務(wù)器,以解決上述問題。
[0004]為實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例提供如下技術(shù)方案:
[0005]根據(jù)本發(fā)明實(shí)施例的第一方面,提供一種過濾方法,基于預(yù)先建立的對象索引,所述對象索引包括針對屬性值建立的列索引;
[0006]所述方法包括:
[0007]接收過濾條件,所述過濾條件包括至少一個(gè)屬性值;
[0008]獲取與所述過濾條件中的屬性值相匹配的列索引中的對象集,所述對象集中的對象均擁有所述屬性值;
[0009]對獲取到的對象集取交集,取交集后得到的對象作為過濾結(jié)果。
[0010]結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,所述列索引包括關(guān)鍵字和對象集,所述關(guān)鍵字至少包括屬性值;任一列索引中的屬性值不同于其他列索引中的屬性值;
[0011]所述對象索引通過如下方式建立:
[0012]將每一對象的每一屬性值分別作為目標(biāo)屬性值,建立針對所述目標(biāo)屬性值的列索弓I ;
[0013]所述建立針對所述目標(biāo)屬性值的列索引包括:
[0014]在不存在針對所述目標(biāo)屬性值的列索引時(shí),新建列索引,令新建的列索引的關(guān)鍵詞包含所述目標(biāo)屬性值,并且,所述新建的列索引的對象集,包含所述目標(biāo)屬性值對應(yīng)的對象;
[0015]在存在針對所述目標(biāo)屬性值的列索引時(shí),將所述目標(biāo)屬性值對應(yīng)的對象插入到,針對所述目標(biāo)屬性值的列索引的對象集中。
[0016]結(jié)合第一方面,或第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述列索引采用Hash結(jié)構(gòu)存儲。
[0017]結(jié)合第一方面,或第一方面的第一種可能的實(shí)現(xiàn)方式,或第一方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述對象集中的對象按自然序排列。
[0018]結(jié)合第一方面,或第一方面的第一種可能的實(shí)現(xiàn)方式,或第一方面的第二種可能的實(shí)現(xiàn)方式,或第一方面的第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述對獲取到的對象集取交集包括:
[0019]當(dāng)獲取到N個(gè)對象集時(shí),進(jìn)行N-1輪匹配查找處理,所述N為不小于2的自然數(shù)。
[0020]結(jié)合第一方面的第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,第i輪匹配查找處理包括第一處理和第二處理,所述i為不小于I并且不大于N-1的自然數(shù),其中:
[0021]所述第一處理包括:任選兩個(gè)未參與匹配查找處理的對象集,其中一個(gè)對象集作為參考集,另一個(gè)對象集作為被搜索集;
[0022]依次將所述參考集中的對象作為目標(biāo)參考對象;
[0023]在所述被搜索集中查找是否存在與所述目標(biāo)參考對象相匹配的對象;
[0024]所述第二處理包括:
[0025]當(dāng)不滿足預(yù)設(shè)條件時(shí),保留匹配成功的對象至中間對象集,并將所述中間對象集作為未參與匹配查找處理的對象集;
[0026]當(dāng)滿足預(yù)設(shè)條件時(shí),保留匹配成功的對象到最終對象集;
[0027]所述預(yù)設(shè)條件包括i=N_l。
[0028]結(jié)合第一方面的第五種可能的實(shí)現(xiàn)方式,在第六種可能的實(shí)現(xiàn)方式中,所述將取交集后得到的對象作為過濾結(jié)果包括:
[0029]將所述最終對象集中的對象作為過濾結(jié)果。
[0030]結(jié)合第一方面的第五種可能的實(shí)現(xiàn)方式,或第一方面的第六種可能的實(shí)現(xiàn)方式,在第七種可能的實(shí)現(xiàn)方式中,所述在所述被搜索集中查找是否存在與所述目標(biāo)參考對象相匹配的對象包括:
[0031]在所述被搜索集中按二分法查找是否存在與所述目標(biāo)參考對象相匹配的對象。
[0032]結(jié)合第一方面的第七種可能的實(shí)現(xiàn)方式,在第八種可能的實(shí)現(xiàn)方式中,所述參考集中包括的對象數(shù)不大于被搜索集中的對象數(shù)。
[0033]結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第九種可能的實(shí)現(xiàn)方式中,還包括:
[0034]接收輸入的新增對象的相關(guān)數(shù)據(jù),所述相關(guān)數(shù)據(jù)至少包括屬性值;
[0035]獲取所述新增對象的屬性值;
[0036]從所述對象索引中,獲取關(guān)鍵字與所述屬性值相匹配的列索引中的對象集;
[0037]將所述新增對象插入獲取到的對象集中。
[0038]結(jié)合第一方面至第一方面的第九種可能的實(shí)現(xiàn)方式中的任一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述對象索引存儲于緩存服務(wù)器中。
[0039]結(jié)合第一方面的第十種可能的實(shí)現(xiàn)方式,在第i^一種可能的實(shí)現(xiàn)方式中,所述獲取與所述過濾條件中的屬性值相匹配的列索引中的對象集包括:
[0040]向所述緩存服務(wù)器發(fā)送,至少包含過濾條件中的屬性值的獲取指令;以便所述緩存服務(wù)器尋找關(guān)鍵字與所述獲取指令中的屬性值相匹配的列索引中的對象集,并返回。
[0041]結(jié)合第一方面的第十種可能的實(shí)現(xiàn)方式,在第十二種可能的實(shí)現(xiàn)方式中,所述從所述對象索引中,獲取關(guān)鍵字與所述屬性值相匹配的列索引中的對象集包括:
[0042]向所述緩存服務(wù)器發(fā)送至少包含新增對象的屬性值的獲取指令;以便所述緩存服務(wù)器尋找關(guān)鍵字與所述獲取指令中的屬性值相匹配的列索引中的對象集作為目標(biāo)對象集,并返回所述目標(biāo)對象集;
[0043]所述將所述新增對象插入獲取到的對象集中包括:
[0044]在本地將所述新增對象插入目標(biāo)對象集中,得到更新后的目標(biāo)對象集;
[0045]利用更新后的目標(biāo)對象集替換緩存服務(wù)器中的目標(biāo)對象集。
[0046]結(jié)合第一方面,在第十三種可能的實(shí)現(xiàn)方式中,所述過濾條件由前臺發(fā)出;
[0047]所述方法還包括:
[0048]獲取所述過濾結(jié)果對應(yīng)的信息;
[0049]向所述前臺返回所述信息,以便所述前臺進(jìn)行顯示。
[0050]根據(jù)本發(fā)明實(shí)施例的第二方面,提供一種過濾服務(wù)器,基于預(yù)先建立的對象索引,所述對象索引包括針對屬性值建立的列索引;所述過濾服務(wù)器至少包括:
[0051]第一接收單元,用于接收過濾條件,所述過濾條件包括至少一個(gè)屬性值;
[0052]第一獲取單元,用于獲取與所述過濾條件中的屬性值相匹配的列索引中的對象集,所述對象集中的對象均擁有所述屬性值;
[0053]過濾單元,用于對獲取到的對象集取交集,取交集后得到的對象作為過濾結(jié)果。
[0054]結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,所述列索引包括關(guān)鍵字和對象集,所述關(guān)鍵字至少包括屬性值;任一列索引中的屬性值不同于其他列索引中的屬性值;
[0055]所述服務(wù)器還包括:
[0056]對象索引建立單元,用于將每一對象的每一屬性值分別作為目標(biāo)屬性值,建立針對所述目標(biāo)屬性值的列索引;
[0057]所述對象索引建立單元包括:
[0058]第一對象索引建立子單元,用于在不存在針對所述目標(biāo)屬性值的列索引時(shí),新建列索引,令新建的列索引的關(guān)鍵詞包含所述目標(biāo)屬性值,并且,所述新建的列索引的對象集,包含所述目標(biāo)屬性值對應(yīng)的對象;
[0059]第二對象索引建立子單元,在存在針對所述目標(biāo)屬性值的列索引時(shí),將所述目標(biāo)屬性值對應(yīng)的對象插入到,針對所述目標(biāo)屬性值的列索引的對象集中。
[0060]結(jié)合第一方面,或第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,還包括:
[0061]第二接收單元,用于接收輸入的新增對象的相關(guān)數(shù)據(jù),所述相關(guān)數(shù)據(jù)至少包括屬性值;
[0062]第二獲取單元,用于獲取所述新增對象的屬性值;
[0063]第三獲取單元,從所述對象索引中,獲取關(guān)鍵字與所述屬性值相匹配的列索引中的對象集;
[0064]插入單元,用于將所述新增對象插入獲取到的對象集中。
[0065]結(jié)合第一方面,或第一方面的第一種可能的實(shí)現(xiàn)方式,或第一方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述過濾條件由前臺發(fā)出;
[0066]所述的過濾服務(wù)器還包括:
[0067]第四獲取單元,用于獲取所述過濾結(jié)果對應(yīng)的信息;
[0068]返回單元,用于向所述前臺返回所述信息,以便所述前臺進(jìn)行顯示。
[0069]可見,在本發(fā)明實(shí)施例中,由于針對每一屬性值設(shè)置了對象集,這樣,在過濾時(shí),可獲取到與過濾條件中的屬性值相匹配的列索引的對象集,再通過對對象集取交集,即可實(shí)現(xiàn)過濾。
【專利附圖】
【附圖說明】
[0070]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0071]圖1為本發(fā)明實(shí)施例提供的通用計(jì)算機(jī)結(jié)構(gòu)示意圖;
[0072]圖2為本發(fā)明實(shí)施例提供的過濾方法流程圖;
[0073]圖3a為本發(fā)明實(shí)施例提供的列索引示意圖;
[0074]圖3b為本發(fā)明實(shí)施例提供的列索引另一不意圖;
[0075]圖4為本發(fā)明實(shí)施例提供的列索引又一示意圖;
[0076]圖5為本發(fā)明實(shí)施例提供的取交集示意圖;
[0077]圖6為本發(fā)明實(shí)施例提供的二分法查找示意圖;
[0078]圖7為本發(fā)明實(shí)施例提供的過濾方法另一流程圖;
[0079]圖8為本發(fā)明實(shí)施例提供的前、后臺交互流程圖;
[0080]圖9為本發(fā)明實(shí)施例提供的過濾方法又一流程圖;
[0081]圖10為本發(fā)明實(shí)施例提供的前、后臺交互另一流程圖;
[0082]圖11為本發(fā)明實(shí)施例提供的緩存方法流程圖;
[0083]圖12為本發(fā)明實(shí)施例提供的過濾服務(wù)器結(jié)構(gòu)示意圖;
[0084]圖13為本發(fā)明實(shí)施例提供的過濾服務(wù)器另一結(jié)構(gòu)示意圖;
[0085]圖14為本發(fā)明實(shí)施例提供的緩存服務(wù)器結(jié)構(gòu)示意圖;
[0086]圖15為本發(fā)明實(shí)施例提供的緩存服務(wù)器另一結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0087]例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0088]在數(shù)據(jù)查詢、信息檢索等領(lǐng)域,經(jīng)常會對對象進(jìn)行查詢、檢索。上述對象可能是產(chǎn)品(例如手機(jī))、人員等等。對象一般具有多對屬性和屬性值。其中,屬性和屬性值是相關(guān)聯(lián)的,比如,某款手機(jī)的“手機(jī)操作系統(tǒng)”(OS)為Android,則“OS”是手機(jī)的一種屬性,而Android是“OS”這一屬性對應(yīng)的屬性值。如何對對象進(jìn)行過濾、查詢,是時(shí)下研究的熱門。
[0089]有鑒于此,本發(fā)明實(shí)施例提供過濾方法和過濾服務(wù)器,以至少實(shí)現(xiàn)對對象進(jìn)行過濾。
[0090]上述過濾服務(wù)器作為過濾方法的執(zhí)行主體,其通用計(jì)算機(jī)結(jié)構(gòu)如圖1所示,可包括CPU101、存儲器102和收發(fā)器104。其中,收發(fā)器104可用于收、發(fā)一切數(shù)據(jù)和指令,CPUlOl通過運(yùn)行存儲在存儲器102內(nèi)的軟件程序103,調(diào)用存儲在存儲器102內(nèi)的數(shù)據(jù),以及調(diào)用收發(fā)器104,執(zhí)行過濾方法中的各步驟。
[0091]需要說明的是,本發(fā)明所提供的技術(shù)方案,基于預(yù)先建立的對象索引。上述對象索引包括針對屬性值建立的列索引。
[0092]上述對象索引是實(shí)現(xiàn)快速過濾的基礎(chǔ)?;趯ο笏饕瑓⒁妶D2,過濾服務(wù)器所執(zhí)行的過濾方法可包括如下步驟:
[0093]S1、接收過濾條件,上述過濾條件包括至少一個(gè)屬性值;
[0094]S2、獲取與上述過濾條件中的屬性值相匹配的列索引中的對象集,該對象集中的對象均擁有過濾條件中的屬性值;
[0095]S3、對獲取到的對象集取交集,取交集后得到的對象作為過濾結(jié)果。
[0096]可見,在本發(fā)明實(shí)施例中,由于針對每一屬性值設(shè)置了對象集,在過濾時(shí),可獲取到與過濾條件中的屬性值相匹配的列索引的對象集,再通過取交集,即可實(shí)現(xiàn)過濾。
[0097]在本發(fā)明其他實(shí)施例中,請參見圖3a,每一列索引可包括關(guān)鍵字和對象集。由于列索引是針對屬性值建立,因此,關(guān)鍵字中至少包括屬性值,而與之對應(yīng)的對象集中所包括的對象都擁有同一屬性值,也即關(guān)鍵字中的屬性值。并且,任一列索引所針對的屬性值不同于其他列索引所針對的屬性值?;蛘呖梢哉f,每一屬性值對應(yīng)一個(gè)對象集。
[0098]需要說明的是,由于關(guān)鍵詞中包含屬性值,因此,上述(步驟S2) “獲取與上述過濾條件中的屬性值相匹配的列索引中的對象集”中的“相匹配”,可指過濾條件中的屬性值與關(guān)鍵詞相匹配。
[0099]更具體的,上述關(guān)鍵字可同時(shí)包括屬性和屬性值,而上述對象可為產(chǎn)品ID、人名等,也可為其他。
[0100]以手機(jī)為例,請參見圖3b,列索引I中的關(guān)鍵字為“OS:Android”,其對象集包括Galaxy S4、HTC G20、MX2等手機(jī)產(chǎn)品ID。同理,列索引2中的關(guān)鍵字為“OS:10S”,其對象集包括IPhone4、IPhone4S、IPhone5等手機(jī)產(chǎn)品ID。而列索引3中的關(guān)鍵字為“制造商:HTC”,其對象集包括HTC G20、HTCS5等手機(jī)產(chǎn)品ID。
[0101]如以圖3b為例,假定步驟SI中的過濾條件,包括OS=Android以及制造商=HTC。也即,上述過濾條件包括屬性(OS和制造商)以及,屬性值(Android和HTC)。則在步驟S2中,根據(jù)屬性值A(chǔ)ndroid和HTCS3,可獲取到列索引I和列索引N的對象集。而在步驟S3中,則可對列索引I的對象集和列索引N的對象集取交集,則至少可得到HTC G20這一對象(產(chǎn)品ID),從而,HTC G20將作為過濾結(jié)果。
[0102]在本發(fā)明其他實(shí)施例中,上述對象索引可通過如下方式建立:將每一對象的每一屬性值分別作為目標(biāo)屬性值,建立針對該目標(biāo)屬性值的列索引。
[0103]更具體的,上述建立針對所述目標(biāo)屬性值的列索引可包括:
[0104]在不存在針對上述目標(biāo)屬性值的列索引時(shí),新建列索引,令新建的列索引的關(guān)鍵詞包含該目標(biāo)屬性值,并且,上述新建的列索引的對象集,包含上述目標(biāo)屬性值對應(yīng)的對象;
[0105]在存在針對上述目標(biāo)屬性值的列索引時(shí),將上述目標(biāo)屬性值對應(yīng)的對象插入到,針對該目標(biāo)屬性值的列索引的對象集中。
[0106]舉例來講,假定欲對所有的手機(jī)產(chǎn)品建立對象索引。則遍歷所有手機(jī)型號(手機(jī)ID),獲取每一手機(jī)型號的屬性及屬性值。針對每一屬性值建立列索引:
[0107]假定HTC G20具有兩個(gè)屬性O(shè)S和制造商,其對應(yīng)的屬性值分別為Android和HTC ;
[0108]則針對Android這一屬性值,查找是否存在針對Android的列索引;
[0109]如果不存在,則新建一列索引,該新建列索引的關(guān)鍵詞為“OS:Android”,其對象集中包含“ HTC G20” ;
[0110]如果存在關(guān)鍵詞為“OS:Android”的列索引,則可在其對象集中插入“HTC G20”(可使用二分法查找存儲位置插入,本文后續(xù)將介紹二分法);
[0111]同理,對于HTC這一屬性值,也進(jìn)行類似的處理過程。
[0112]在本發(fā)明其他實(shí)施例中,上述對象索引可存儲于緩存服務(wù)器中。緩存服務(wù)器啟動時(shí),可將對象索引加載到緩存服務(wù)器中,以供過濾查詢使用。或者,對象索引也可存儲于過濾服務(wù)器的本地存儲中,在此不作限定。
[0113]過濾服務(wù)器與緩存服務(wù)器之間,可通過基于現(xiàn)有的TCP/IP協(xié)議之上的socket接口進(jìn)行通信。
[0114]當(dāng)對象索引存儲在緩存服務(wù)器中時(shí),上述步驟S2可具體包括:
[0115]向緩存服務(wù)器發(fā)送至少包含查詢條件中的屬性值的獲取指令。以便緩存服務(wù)器尋找關(guān)鍵字與獲取指令中的屬性值相匹配的列索引中的對象集,并返回找到的對象集。此外,如未找到相匹配的列索引,則緩存服務(wù)器返回空對象集。
[0116]在本發(fā)明其他實(shí)施例中,請參見圖4,上述實(shí)施例中的列索引采用Hash結(jié)構(gòu)存儲。也即,對象索引為一大的Hash (哈希)表,而每一列索引可作為Hash表的一個(gè)項(xiàng)。Hash數(shù)據(jù)結(jié)構(gòu)中的Key用于存儲關(guān)鍵詞,Value用于存儲對象集。
[0117]列索引采用Hash結(jié)構(gòu)存儲,可以非常方便部署到獨(dú)立的緩存服務(wù)器中。現(xiàn)有大部分獨(dú)立緩存服務(wù)器以Hash結(jié)構(gòu)來存儲數(shù)據(jù),這樣,上述對象索引數(shù)據(jù)能完美的存儲到這類緩存服務(wù)器中。
[0118]在本發(fā)明其他實(shí)施例中,還可將上述所有實(shí)施例中,關(guān)鍵字所對應(yīng)的哈希值(上述哈希值至少是根據(jù)屬性值計(jì)算得出)作為該列索引的存儲位置。
[0119]仍請參見圖3b或圖4,以關(guān)鍵字為OS =Android的列索引為例,可計(jì)算“OS:Android”或“Android”的哈希值,假定其哈希值等于I,則將關(guān)鍵字為“OS:Android”的列索引存儲在Hash表的第一項(xiàng);同理,假定關(guān)鍵字為OS:10S的哈希值等于50,則將關(guān)鍵字為“OS:10S”的列索引存儲在Hash表的第五十項(xiàng)。
[0120]基于上述存儲方式,則前述的“尋找關(guān)鍵字與上述獲取指令中的屬性值相匹配的列索引中的對象集”可包括:
[0121]步驟A,至少根據(jù)獲取指令中的屬性值計(jì)算得出第一哈希值;
[0122]假定獲取指令中包括“0S=Android”,可計(jì)算“OS:Android”或“Android”的哈希值作為第一哈希值。
[0123]步驟B,從等于上述第一哈希值的存儲位置處獲取對象集。
[0124]假定第一哈希值的取值為1,則從Hash表的第一項(xiàng)處獲取對象集,獲得GalaxyS4、HTC G20、MX2 等手機(jī)產(chǎn)品 ID。
[0125]需要說明的是,由于是直接從等于第一哈希值的存儲位置處獲取對象集,因此,不需要對整個(gè)Hash表中的表項(xiàng)進(jìn)行遍歷,其算法效率為0(1)。
[0126]需要說明的是,如果獲取指令中包括多個(gè)屬性值,則針對每一屬性值,都要執(zhí)行步驟A和B —次,以獲取到該屬性值對應(yīng)的對象集。
[0127]在本發(fā)明其他實(shí)施例中,上述所有實(shí)施例中的對象集中的對象可按自然序排列。所謂按自然序排列可指按ASCII碼大小排序。
[0128]在計(jì)算機(jī)【技術(shù)領(lǐng)域】,每一字符有一個(gè)相應(yīng)的ASCII碼相對應(yīng)。以圖3b中的列索引I為例,其對象集中的對象“Galaxy S4、HTC G20、MX2”可視為字符串。
[0129]在排序時(shí),先比較兩個(gè)字符串第I個(gè)字符,例如,將“Galaxy S4”中的“G”與“HTCG20”中的“H”相比較,如果相等,則再比較兩個(gè)字符串中的第2個(gè)字符,如再相等,則比較第3個(gè)字符,直到比較出較小的字符,則與之對應(yīng)的字符串就排在前面或后面。
[0130]需要說明的是,按ASCII碼大小排序,可按從大到小排,也可按從小到大排。按ASCII碼大小排序,在對獲取到的對象集取交集時(shí),將發(fā)揮作用。本文后續(xù)將進(jìn)行介紹。
[0131]步驟S3涉及對獲取到的對象集取交集。在取交集時(shí),可使用兩兩歸并原則。
[0132]因此,在本發(fā)明其他實(shí)施例中,上述所有實(shí)施例中的步驟S3可細(xì)化包括:當(dāng)獲取到N個(gè)對象集時(shí),進(jìn)行N-1輪匹配查找處理,上述N為不小于2的自然數(shù)。
[0133]更具體的,每一輪或者稱第i輪(i為不小于I并且不大于N-1的自然數(shù))匹配查找處理,可包括第一處理和第二處理。其中:
[0134]第一處理可包括:任選兩個(gè)未參與匹配查找處理的對象集,其中一個(gè)對象集作為參考集,另一個(gè)對象集作為被搜索集;
[0135]依次將上述參考集中的對象作為目標(biāo)參考對象;
[0136]在上述被搜索集中查找是否存在與上述目標(biāo)參考對象相匹配的對象;
[0137]而第二處理可包括:
[0138]當(dāng)不滿足預(yù)設(shè)條件時(shí),保留匹配成功的對象至中間對象集,并將上述中間對象集作為未參與匹配查找處理的對象集;
[0139]當(dāng)滿足預(yù)設(shè)條件時(shí),保留匹配成功的對象到最終對象集;
[0140]上述預(yù)設(shè)條件包括i=N_l。
[0141]請參見圖5,假定經(jīng)過步驟S2后,獲取到了列索引1、2、X的對象集。由于一共有3個(gè)對象集,則需要進(jìn)行2輪匹配查找處理。
[0142]在第I輪匹配查找處理中,假定選擇了列索引I的對象集作為參考集,列索引2作為被搜索集,則依次將Galaxy S4、HTC G20、MX2等手機(jī)產(chǎn)品ID作為目標(biāo)參考對象。在被搜索集(HTC G20、HTCS5)中查找是否存在與上述目標(biāo)參考對象相匹配的對象。
[0143]在本實(shí)施例中,相匹配具體指相同。舉例來講,Galaxy S4作為目標(biāo)參考對象時(shí),如在被搜索集(HTC G20、HTCS5)中存在與Galaxy S4相同的對象,則將Galaxy S4保留至中間對象集,如不存在,則Galaxy S4不會保留至中間對象集。在HTC G20作為目標(biāo)參考對象,也是如此。
[0144]之所以將匹配成功的對象保留至中間對象集,是因?yàn)椋藶榈贗輪匹配查找處理,而I小于2 (3-1=2),所以要保留至中間對象集而非最終對象集。
[0145]在將參考集中的所有對象都匹配完后,將中間對象集作為未參與匹配查找處理的對象集。開始第2輪匹配查找處理。
[0146]在第2輪匹配查找處理中,是中間對象集和列索引X的對象集,一個(gè)作為參考集、一個(gè)作為被搜索集。依次將參考集中的對象作為目標(biāo)參考對象,在被搜索集中查找是否存在與目標(biāo)參考對象相匹配的對象。由于是最后一輪匹配查找處理,因此,要將匹配成功的對象保留至最終對象集。
[0147]在將參考集中的所有對象都匹配完后,上述最終對象集中的對象即為過濾結(jié)果。因此,步驟S3中的“將取交集后得到的對象作為過濾結(jié)果”可具體包括:將上述最終對象集中的對象作為過濾結(jié)果。
[0148]下面,將對“在上述被搜索集中查找是否存在與上述目標(biāo)參考對象相匹配的對象”進(jìn)行詳細(xì)介紹。
[0149]在本發(fā)明其他實(shí)施例中,可以將目標(biāo)參考對象與被搜索集中的對象逐一進(jìn)行匹配?;蛘?,也可在被搜索集中按二分法查找是否存在與目標(biāo)參考對象相匹配的對象。
[0150]前述提及了,對象集中的對象可按ASCII碼大小排序。二分法查找就是基于ASCII碼大小來實(shí)現(xiàn)的。
[0151]二分法查找原理是:對于給定值X,從序列的中間位置開始比較。如果當(dāng)前位置值等于X,則查找成功;若X小于當(dāng)前位置值,則在序列的前半段中查找;若X大于當(dāng)前位置值,則在序列的后半段中繼續(xù)查找。
[0152]現(xiàn)舉例說明二分法查找,請參見圖6,假定目標(biāo)參考對象對應(yīng)的ASCII碼為50,被搜索集有5個(gè)對象(對象1-對象5),并且,假定對象1-5對應(yīng)的SCII碼為20、30、40、50、60。可見,被搜索集中的對象是按ASCII碼從小到大排列的。
[0153]目標(biāo)參考對象對應(yīng)的ASCII碼一50作為上述給定值X,而對象I至對象5則為序列,其二分法查找過程如下:從對象I至對象5的中間位置開始比較,也即,將對象3與目標(biāo)參考對象比較。對象3的ASCII碼為40,小于X (50),則在對象I至對象5的后半段(也即對象4至對象5)中查找。
[0154]對象4至對象5的中間位置為對象4,將對象4與目標(biāo)參考對象比較,對象3的ASCII碼為50,等于上述給定值X,則查找成功。
[0155]通過上例可看出,通過兩次查找,就找到了與目標(biāo)參考對象相匹配的對象。而如將目標(biāo)參考對象與被搜索集中的對象逐一進(jìn)行匹配,則需要進(jìn)行4次查找。實(shí)際上,二分法的運(yùn)算總次數(shù)為P*log2R。其中,P表示參考集中對象的個(gè)數(shù),而R表示被搜索集中對象的個(gè)數(shù)??梢钥闯?,效率是非常高的。
[0156]在數(shù)學(xué)上容易證明:當(dāng)R>P大時(shí),P*log2R〈R*log2P。
[0157]因此,為進(jìn)一步節(jié)省時(shí)間,上述參考集中包括的對象數(shù)不大于被搜索集中的對象數(shù)。也即,選擇對象數(shù)較少的對象集作為參考集。
[0158]當(dāng)然,也可對對象集中的每一對象計(jì)算哈希值,基于哈希值進(jìn)行二分法查找。由于原理相似,在此不作贅述。
[0159]基于上述過濾,在本發(fā)明其他實(shí)施例中,還可進(jìn)一步實(shí)現(xiàn)用戶通過前臺查詢對象。在本實(shí)施例中,參見圖7,過濾服務(wù)器(后臺)至少可包括如下步驟:
[0160]S701、接收來自前臺的查詢條件,上述查詢條件包括至少一個(gè)屬性值;
[0161]S702、獲取關(guān)鍵字與上述查詢條件中的屬性值相匹配的列索引中的對象集;
[0162]如何獲取對象集可參見本文前述記載,在此不作贅述。
[0163]S703、對獲取到的對象集取交集;
[0164]如何取交集可參見本文前述記載,在此不作贅述。
[0165]S704、獲取取交集后得到的對象所對應(yīng)的信息;
[0166]在前已述及,對象可為產(chǎn)品ID、人名等,因此,過濾服務(wù)器可根據(jù)產(chǎn)品ID向數(shù)據(jù)庫查詢產(chǎn)品ID所對應(yīng)的信息、人名的相應(yīng)信息等。
[0167]S705、向上述前臺返回上述信息,以便上述前臺進(jìn)行顯示。
[0168]需要說明的是,前臺與后臺之間,可采用基于http協(xié)議之上的webservice接口進(jìn)行通信。
[0169]上述過濾方法有廣泛的應(yīng)用場景。例如,其可應(yīng)用在網(wǎng)站,尤其是網(wǎng)上商城中,以便于用戶從成千上萬的產(chǎn)品(商品)中,快速查詢到符合條件的產(chǎn)品。需要說明的是,對于網(wǎng)站而言,所有列索引中的對象集取并集,就為網(wǎng)站(網(wǎng)上商城)中的所有產(chǎn)品。
[0170]更具體,請參見圖8,前、后臺相關(guān)交互流程如下:
[0171]S801、假定,用戶在前臺頁面所提供的手機(jī)產(chǎn)品列表中選擇OS為“Android”,制造商為“HTC”,狀態(tài)(Condit1n)為“新”(New),則用戶輸入了用于查詢的屬性和屬性值;
[0172]S802、前臺系統(tǒng)組裝用戶查詢條件(在本實(shí)施例中,OS=Android ;制造商=HTC ;Condit1n=New)后,提交給過濾服務(wù)器;
[0173]S803、過濾服務(wù)器根據(jù)查詢條件,向緩存服務(wù)器發(fā)送包含查詢條件中的屬性值的獲取指令。
[0174]圖8 中的 getCache (OS: Android)、getCache (制造商:HTC),以及getCache (Condit1n:New),就是獲取指令。
[0175]S804、緩存服務(wù)器返回找到的對象集;
[0176]緩存服務(wù)器如何獲取對象集可參見本文前述記載,在此不作贅述。
[0177]S805、過濾服務(wù)器對獲取到的對象集取交集,各對象集的交集即是最終需要查詢的產(chǎn)品ID,也即過濾結(jié)果;
[0178]如何取交集可參見本文前述記載,在此不作贅述。
[0179]S806、過濾服務(wù)器向數(shù)據(jù)庫查詢過濾結(jié)果所對應(yīng)的信息,返回給前臺系統(tǒng);
[0180]S807、前臺系統(tǒng)根據(jù)過濾服務(wù)器的返回結(jié)果組織前臺頁面,并展示給用戶。
[0181]此外,在實(shí)際中,不可避免的會需要新增對象。因此,參見圖9,在本發(fā)明其他實(shí)施例中,上述過濾方法還可包括如下步驟:
[0182]S91、接收輸入的新增對象的相關(guān)數(shù)據(jù),上述相關(guān)數(shù)據(jù)至少包括屬性值;
[0183]S92、獲取上述新增對象的屬性值;
[0184]S93、從上述對象索引中,獲取關(guān)鍵字與新增對象的屬性值相匹配的對象集;
[0185]S94、將上述新增對象插入獲取到的對象集中。
[0186]在對象索引存儲于緩存服務(wù)器中時(shí),上述步驟S93可具體包括:
[0187]向緩存服務(wù)器發(fā)送至少包含新增對象的屬性值的獲取指令;以便緩存服務(wù)器尋找關(guān)鍵字與上述獲取指令中的屬性值,相匹配的列索引中的對象集,作為目標(biāo)對象集,并返回上述目標(biāo)對象集。
[0188]緩存服務(wù)器如何根據(jù)獲取指令尋找對象集,可參見本文前述記載,在此不作贅述。
[0189]此外,需要說明的是,對于新增對象的某一屬性值,如緩存服務(wù)器未尋找到相匹配的對象集,則新建一個(gè)列索引,該新建的列索引的關(guān)鍵詞包含該屬性值。
[0190]與之相對應(yīng),上述步驟S94可包括:
[0191](過濾服務(wù)器)在本地將新增對象插入目標(biāo)對象集中,得到更新后的目標(biāo)對象集;
[0192]利用更新后的目標(biāo)對象集替換緩存服務(wù)器中的目標(biāo)對象集。
[0193]請參見圖10,設(shè)備間的交互流程如下:
[0194]S101、產(chǎn)品管理員在后臺錄入新增對象的基本信息和屬性后,提交到過濾服務(wù)器;
[0195]S102、過濾服務(wù)器將新增對象添加到數(shù)據(jù)庫;
[0196]S103、過濾服務(wù)器獲取新增對象的屬性值;
[0197]S104、過濾服務(wù)器從緩存服務(wù)器處獲取屬性值對應(yīng)的對象集(列索引);
[0198]S105、在獲取到對象集后,過濾服務(wù)器將新增對象按自然序插入到對象集中(可使用二分法查找存儲位置插入);
[0199]S106、插入完成后,過濾服務(wù)器重新PUT更新后的目標(biāo)對象集到緩存服務(wù)器;更具體的,過濾服務(wù)器把構(gòu)建好的列索引,按HASH數(shù)據(jù)結(jié)構(gòu)方式存儲到緩存服務(wù)器中。
[0200]S107、緩存服務(wù)器返回成功,表示該新增對象的這一屬性值對應(yīng)的列索引已經(jīng)緩存更新完成。
[0201]需要說明的是,如果新增對象有多個(gè)屬性值,則重復(fù)執(zhí)行步驟S104至S107 ;
[0202]S108、所有屬性值的列索引緩存更新后,過濾服務(wù)器返回操作成功。
[0203]需要說明的是,在一現(xiàn)有技術(shù)中,網(wǎng)站(商城)為過濾出產(chǎn)品,使用的是產(chǎn)品逐行全量緩存方式:在啟動時(shí),將產(chǎn)品與產(chǎn)品所對應(yīng)的屬性值從數(shù)據(jù)庫中全部查詢出來,并逐個(gè)將產(chǎn)品與屬性值組成一行后,全部加載到服務(wù)器中進(jìn)行緩存,以便供查詢使用。也即,其是將產(chǎn)品作為關(guān)鍵詞,每一產(chǎn)品占一行記錄的方式進(jìn)行緩存的。
[0204]商城用戶在點(diǎn)擊前臺某個(gè)產(chǎn)品種類的屬性值后(所點(diǎn)擊的屬性值作為過濾屬性值),服務(wù)器遍歷該類型每一產(chǎn)品,在遍歷中將每一個(gè)產(chǎn)品的每一屬性值與過濾屬性值相匹配,如匹配成功,則匹配成功的產(chǎn)品被過濾出來。
[0205]上述產(chǎn)品逐行全量緩存方式存在下述缺點(diǎn):
[0206]一,緩存部署問題:對產(chǎn)品的緩存、過濾查詢必須在同一臺服務(wù)器,也即,該方式?jīng)]有將緩存數(shù)據(jù)與過濾相分離。在網(wǎng)上商城多服務(wù)器部署(現(xiàn)中、大型商城基本都是多機(jī)部署)環(huán)境下,每臺服務(wù)器都需要有本地緩存,這對服務(wù)器有限且寶貴的內(nèi)存資源來說,是一種很大的浪費(fèi)。
[0207]另外,多服務(wù)器部署商城系統(tǒng)條件下,后臺如對產(chǎn)品進(jìn)行更新后,需同步更新多臺服務(wù)器中的產(chǎn)品緩存,如某臺服務(wù)器更新異常,還易產(chǎn)生數(shù)據(jù)不同步問題。
[0208]二,擴(kuò)容性問題:由于緩存的數(shù)據(jù)量龐大,在實(shí)行本地緩存時(shí),擴(kuò)容將受本地內(nèi)存空間的限制。
[0209]一般在商城運(yùn)營初期,由于產(chǎn)品數(shù)量不多,上述擴(kuò)容問題并不太明顯,到了運(yùn)營成長期,產(chǎn)品量將成倍增長,擴(kuò)容問題將會日益嚴(yán)重。
[0210]三,響應(yīng)速度問題:查詢產(chǎn)品這一功能,要求前臺響應(yīng)速度一般在2秒以內(nèi),考慮到網(wǎng)絡(luò)延遲,給后臺計(jì)算的時(shí)間不足0.5秒。而在網(wǎng)站(商城)中,由于產(chǎn)品數(shù)量眾多,采用產(chǎn)品逐行全量緩存則需要從成千上萬的產(chǎn)品中遍歷匹配,需要大量的循環(huán)計(jì)算匹配,在響應(yīng)速度具有一定的改進(jìn)空間。
[0211]與上述現(xiàn)有技術(shù)的缺點(diǎn)相對應(yīng),本發(fā)明以上實(shí)施例可帶來的好處包括以下幾點(diǎn):
[0212]一,在本發(fā)明實(shí)施例中,緩存服務(wù)器可與過濾服務(wù)器相分離,從而將緩存存儲與過濾計(jì)算相分離。其直接帶來的好處是:緩存存儲可以在分布式環(huán)境下獨(dú)立部署,降低對本地緩存需求,提高資源利用率;而由于緩存存儲的獨(dú)立性與公共性,緩存的對象集結(jié)構(gòu)簡單,使后臺對象數(shù)據(jù)的更新可以高可靠、同步更新;
[0213]二,兼容性好:由于使用屬性值(Key)-對象集(Value)這種結(jié)構(gòu)方式,可很好與目前絕大獨(dú)立緩存服務(wù)器的結(jié)合,而這類緩存服務(wù)器(如Memcached、Redis等)對于緩存分布式、多級緩存體系統(tǒng)(Cahe-內(nèi)存-磁盤等)有很成熟的功能;
[0214]三,查找速度快:以關(guān)鍵字所對應(yīng)的哈希值作為該列索引的存儲位置進(jìn)行查找,算法效率為0(1)。并且,對獲得的對象集取交集時(shí)采用“二分法查找”運(yùn)算,都可以提高查找速度,從而可非??焖俚庙憫?yīng)前臺查詢。
[0215]與之相對應(yīng),本發(fā)明實(shí)施例還提供一種緩存方法,其執(zhí)行主體為緩存服務(wù)器,參見圖11,該緩存方法亦基于前述對象索引,其至少包括如下步驟:
[0216]S111、接收至少包含屬性值的獲取指令;
[0217]S112、尋找關(guān)鍵字與上述獲取指令中的屬性值相匹配的列索引中的對象集,并返回。
[0218]本文前述已經(jīng)記載了上述列索引采用Hash結(jié)構(gòu)存儲。在本發(fā)明其他實(shí)施例中,上述列索引中關(guān)鍵字所對應(yīng)的哈希值,作為上述列索引的存儲位置,上述哈希值至少是根據(jù)屬性值計(jì)算得出。
[0219]相應(yīng)的,上述步驟SI 12可包括如下步驟:
[0220]至少根據(jù)獲取指令中的屬性值計(jì)算得出第一哈希值;
[0221]從等于第一哈希值的存儲位置處獲取對象集。
[0222]相關(guān)內(nèi)容可參見本文前述記載,在此不作贅述。
[0223]與上述過濾方法相對應(yīng),本發(fā)明實(shí)施例還提供一種過濾服務(wù)器。圖12示出了上述過濾服務(wù)器的一種結(jié)構(gòu),其至少可包括:
[0224]第一接收單元1,用于接收查詢條件,上述查詢條件包括至少一個(gè)屬性值;
[0225]第一獲取單元2,用于獲取與上述查詢條件中的屬性值相匹配的列索引中的對象集;
[0226]過濾單元3,用于對獲取到的對象集取交集,取交集后得到的對象作為過濾結(jié)果。
[0227]相關(guān)內(nèi)容請參見本文前述記載,在此不作贅述。
[0228]在本發(fā)明其他實(shí)施例中,上述過濾服務(wù)器還可包括對象索引建立單元,其用于將每一對象的每一屬性值分別作為目標(biāo)屬性值,建立針對目標(biāo)屬性值的列索引。
[0229]更具體的,上述對象索引建立單元可進(jìn)一步包括第一對象索引建立子單元和第二對象索引建立子單元,其中:
[0230]第一對象索引建立子單元,用于在不存在針對目標(biāo)屬性值的列索引時(shí),新建列索弓I,令新建的列索引的關(guān)鍵詞包含上述目標(biāo)屬性值,并且,新建的列索引的對象集,包含該目標(biāo)屬性值對應(yīng)的對象;
[0231]第二對象索引建立子單元,用于在存在針對上述目標(biāo)屬性值的列索引時(shí),將上述目標(biāo)屬性值對應(yīng)的對象,插入到針對目標(biāo)屬性值的列索引的對象集中。
[0232]相關(guān)內(nèi)容請參見本文前述記載,在此不作贅述。
[0233]在本發(fā)明其他實(shí)施例中,針對新增對象,上述過濾服務(wù)器還可包括:
[0234]第二接收單元,用于接收輸入的新增對象的相關(guān)數(shù)據(jù),上述相關(guān)數(shù)據(jù)至少包括屬性值;
[0235]第二獲取單元,用于獲取上述新增對象的屬性值;
[0236]第三獲取單元,從上述對象索引中,獲取關(guān)鍵字與上述屬性值相匹配的列索引中的對象集;需要說明的是,對于新增對象的某一屬性值,如緩存服務(wù)器未尋找到相匹配的對象集,則新建一個(gè)列索引,該新建的列索引的關(guān)鍵詞包含該屬性值。
[0237]插入單元,用于將上述新增對象插入獲取到的對象集中。
[0238]在本發(fā)明其他實(shí)施例中,上述過濾服務(wù)器還可包括:
[0239]第四獲取單元,用于獲取取交集后得到的對象所對應(yīng)的信息;
[0240]返回單元,用于向前臺返回上述信息,以便上述前臺進(jìn)行顯示。
[0241]圖13給出了上述過濾服務(wù)器130的一種硬件結(jié)構(gòu),其可包括CPU131、存儲器132和收發(fā)器134。其中,收發(fā)器134可用于收、發(fā)一切數(shù)據(jù)和指令,CPU131通過運(yùn)行存儲在存儲器132內(nèi)的軟件程序133,調(diào)用存儲在存儲器132內(nèi)的數(shù)據(jù),以及調(diào)用收發(fā)器134,至少可執(zhí)行如下步驟:
[0242]接收過濾條件,上述過濾條件包括至少一個(gè)屬性值;
[0243]獲取與上述過濾條件中的屬性值相匹配的列索引中的對象集;
[0244]對獲取到的對象集取交集,取交集后得到的對象作為過濾結(jié)果。
[0245]此外,上述過濾服務(wù)器130亦可完成本文方法部分所介紹的、過濾服務(wù)器可執(zhí)行的其他步驟,以及各步驟的細(xì)化,在此不作贅述。
[0246]與之相對應(yīng),本發(fā)明實(shí)施例還提供了緩存服務(wù)器。圖14示出了上述緩存服務(wù)器的一種結(jié)構(gòu),其至少可包括:
[0247]第四接收單元7,用于接收至少包含屬性值的獲取指令;
[0248]尋找單元8,用于尋找關(guān)鍵字與上述獲取指令中的屬性值相匹配的列索引中的對象集,并返回。
[0249]圖15給出了上述緩存服務(wù)器150的一種硬件結(jié)構(gòu),其可包括CPU151、存儲器152和收發(fā)器154。其中,收發(fā)器154可用于收、發(fā)一切數(shù)據(jù)和指令,CPU151通過運(yùn)行存儲在存儲器152內(nèi)的軟件程序153,調(diào)用存儲在存儲器152內(nèi)的數(shù)據(jù)及調(diào)用收發(fā)器154,至少可執(zhí)行如下步驟:
[0250]接收至少包含屬性值的獲取指令;
[0251]尋找關(guān)鍵字與上述獲取指令中的屬性值相匹配的列索引中的對象集,并返回。
[0252]此外,上述緩存服務(wù)器150亦可完成本文方法部分所介紹的緩存服務(wù)器可執(zhí)行的其他步驟,以及各步驟的細(xì)化,在此不作贅述。
[0253]在本發(fā)明中,上述存儲器具體可為DDR SDRAM、SRAM、FLASH、SSD、RAM、ROM等,其主要包括程序存儲區(qū)和數(shù)據(jù)存儲區(qū),其中,程序存儲區(qū)可存儲操作系統(tǒng),以及至少一個(gè)功能所需的應(yīng)用程序等;數(shù)據(jù)存儲區(qū)可存儲根據(jù)CPU的執(zhí)行情況而最終產(chǎn)生的數(shù)據(jù),至于CPU在執(zhí)行上述步驟所產(chǎn)生的中間數(shù)據(jù),則存儲在內(nèi)存中。需要說明的是,在本發(fā)明中,CPU和存儲器可集成于同一芯片內(nèi),也可為獨(dú)立的兩個(gè)器件。
[0254]本說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。
[0255]結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲器(RAM)、內(nèi)存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或【技術(shù)領(lǐng)域】內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
[0256]對所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實(shí)施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。
【權(quán)利要求】
1.一種過濾方法,其特征在于,基于預(yù)先建立的對象索引,所述對象索引包括針對屬性值建立的列索引; 所述方法包括: 接收過濾條件,所述過濾條件包括至少一個(gè)屬性值; 獲取與所述過濾條件中的屬性值相匹配的列索引中的對象集,所述對象集中的對象均擁有所述屬性值; 對獲取到的對象集取交集,取交集后得到的對象作為過濾結(jié)果。
2.如權(quán)利要求1所述的方法,其特征在于,所述列索引包括關(guān)鍵字和對象集,所述關(guān)鍵字至少包括屬性值;任一列索引中的屬性值不同于其他列索引中的屬性值; 所述對象索引通過如下方式建立: 將每一對象的每一屬性值分別作為目標(biāo)屬性值,建立針對所述目標(biāo)屬性值的列索引; 所述建立針對所述目標(biāo)屬性值的列索引包括: 在不存在針對所述目標(biāo)屬性值的列索引時(shí),新建列索引,令新建的列索引的關(guān)鍵詞包含所述目標(biāo)屬性值,并且,所述新建的列索引的對象集,包含所述目標(biāo)屬性值對應(yīng)的對象;在存在針對所述目標(biāo)屬性值的列索引時(shí),將所述目標(biāo)屬性值對應(yīng)的對象插入到,針對所述目標(biāo)屬性值的列索引的對象集中。
3.如權(quán)利要求1或2所述的方法,其特征在于,所述列索引采用Hash結(jié)構(gòu)存儲。
4.如權(quán)利要求1-3任一項(xiàng)所述的方法,其特征在于,所述對象集中的對象按自然序排列。
5.如權(quán)利要求1-4任一項(xiàng)所述的方法,其特征在于,所述對獲取到的對象集取交集包括: 當(dāng)獲取到N個(gè)對象集時(shí),進(jìn)行N-1輪匹配查找處理,所述N為不小于2的自然數(shù)。
6.如權(quán)利要求5所述的方法,其特征在于,第i輪匹配查找處理包括第一處理和第二處理,所述i為不小于I并且不大于N-1的自然數(shù),其中: 所述第一處理包括:任選兩個(gè)未參與匹配查找處理的對象集,其中一個(gè)對象集作為參考集,另一個(gè)對象集作為被搜索集; 依次將所述參考集中的對象作為目標(biāo)參考對象; 在所述被搜索集中查找是否存在與所述目標(biāo)參考對象相匹配的對象; 所述第二處理包括: 當(dāng)不滿足預(yù)設(shè)條件時(shí),保留匹配成功的對象至中間對象集,并將所述中間對象集作為未參與匹配查找處理的對象集; 當(dāng)滿足預(yù)設(shè)條件時(shí),保留匹配成功的對象到最終對象集; 所述預(yù)設(shè)條件包括i=N-l。
7.如權(quán)利要求6所述的方法,其特征在于,所述將取交集后得到的對象作為過濾結(jié)果包括: 將所述最終對象集中的對象作為過濾結(jié)果。
8.如權(quán)利要求6或7所述的方法,其特征在于,所述在所述被搜索集中查找是否存在與所述目標(biāo)參考對象相匹配的對象包括: 在所述被搜索集中按二分法查找是否存在與所述目標(biāo)參考對象相匹配的對象。
9.如權(quán)利要求8所述的方法,其特征在于,所述參考集中包括的對象數(shù)不大于被搜索集中的對象數(shù)。
10.如權(quán)利要求2所述的方法,其特征在于,還包括: 接收輸入的新增對象的相關(guān)數(shù)據(jù),所述相關(guān)數(shù)據(jù)至少包括屬性值; 獲取所述新增對象的屬性值; 從所述對象索引中,獲取關(guān)鍵字與所述新增對象的屬性值相匹配的列索引中的對象集; 將所述新增對象插入獲取到的對象集中。
11.如權(quán)利要求1-10任一項(xiàng)所述的方法,其特征在于,所述對象索引存儲于緩存服務(wù)器中。
12.如權(quán)利要求11所述的方法,其特征在于,所述獲取與所述過濾條件中的屬性值相匹配的列索引中的對象集包括: 向所述緩存服務(wù)器發(fā)送,至少包含過濾條件中的屬性值的獲取指令;以便所述緩存服務(wù)器尋找關(guān)鍵字與所述獲取指令中的屬性值相匹配的列索引中的對象集,并返回。
13.如權(quán)利要求11所述的方法,其特征在于, 所述從所述對象索引中,獲取關(guān)鍵字與所述屬性值相匹配的列索引中的對象集包括:向所述緩存服務(wù)器發(fā)送至少包含新增對象的屬性值的獲取指令;以便所述緩存服務(wù)器尋找關(guān)鍵字與所述獲取指令中的屬性值相匹配的列索引中的對象集作為目標(biāo)對象集,并返回所述目標(biāo)對象集; 所述將所述新增對象插入獲取到的對象集中包括: 在本地將所述新增對象插入目標(biāo)對象集中,得到更新后的目標(biāo)對象集; 利用更新后的目標(biāo)對象集替換緩存服務(wù)器中的目標(biāo)對象集。
14.如權(quán)利要求1所述的方法,其特征在于, 所述過濾條件由前臺發(fā)出; 所述方法還包括: 獲取所述過濾結(jié)果對應(yīng)的信息; 向所述前臺返回所述信息,以便所述前臺進(jìn)行顯示。
15.一種過濾服務(wù)器,其特征在于,基于預(yù)先建立的對象索引,所述對象索引包括針對屬性值建立的列索引;所述過濾服務(wù)器至少包括: 第一接收單元,用于接收過濾條件,所述過濾條件包括至少一個(gè)屬性值; 第一獲取單元,用于獲取與所述過濾條件中的屬性值相匹配的列索引中的對象集,所述對象集中的對象均擁有所述屬性值; 過濾單元,用于對獲取到的對象集取交集,取交集后得到的對象作為過濾結(jié)果。
16.如權(quán)利要求15所述的服務(wù)器,其特征在于,所述列索引包括關(guān)鍵字和對象集,所述關(guān)鍵字至少包括屬性值;任一列索引中的屬性值不同于其他列索引中的屬性值; 所述服務(wù)器還包括: 對象索引建立單元,用于將每一對象的每一屬性值分別作為目標(biāo)屬性值,建立針對所述目標(biāo)屬性值的列索引; 所述對象索引建立單元包括: 第一對象索引建立子單元,用于在不存在針對所述目標(biāo)屬性值的列索引時(shí),新建列索弓I,令新建的列索引的關(guān)鍵詞包含所述目標(biāo)屬性值,并且,所述新建的列索引的對象集,包含所述目標(biāo)屬性值對應(yīng)的對象; 第二對象索引建立子單元,在存在針對所述目標(biāo)屬性值的列索引時(shí),將所述目標(biāo)屬性值對應(yīng)的對象插入到,針對所述目標(biāo)屬性值的列索引的對象集中。
17.如權(quán)利要求15或16所述的過濾服務(wù)器,其特征在于,還包括: 第二接收單元,用于接收輸入的新增對象的相關(guān)數(shù)據(jù),所述相關(guān)數(shù)據(jù)至少包括屬性值; 第二獲取單元,用于獲取所述新增對象的屬性值; 第三獲取單元,從所述對象索引中,獲取關(guān)鍵字與所述屬性值相匹配的列索引中的對象集; 插入單元,用于將所述新增對象插入獲取到的對象集中。
18.如權(quán)利要求15至17任一項(xiàng)所述的過濾服務(wù)器,其特征在于, 所述過濾條件由前臺發(fā)出; 所述的過濾服務(wù)器還包括: 第四獲取單元,用于獲取所述過濾結(jié)果對應(yīng)的信息; 返回單元,用于向所述前臺返回所述信息,以便所述前臺進(jìn)行顯示。
【文檔編號】G06F17/30GK104462104SQ201310422744
【公開日】2015年3月25日 申請日期:2013年9月16日 優(yōu)先權(quán)日:2013年9月16日
【發(fā)明者】郭光明 申請人:華為軟件技術(shù)有限公司