專利名稱:一種實(shí)現(xiàn)基于規(guī)則引擎的規(guī)則匹配方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)匹配技術(shù)領(lǐng)域,具體涉及一種實(shí)現(xiàn)基于規(guī)則引擎的規(guī)則匹配方法和裝置。
背景技術(shù):
規(guī)則引擎是一種嵌入到應(yīng)用程序中的組件,大多數(shù)規(guī)則引擎都支持簡(jiǎn)單腳本語(yǔ)言的規(guī)則實(shí)現(xiàn),支持通用開發(fā)語(yǔ)言的嵌入開發(fā)。規(guī)則引擎實(shí)現(xiàn)了將業(yè)務(wù)決策從應(yīng)用程序代碼中分離出來(lái),并使用預(yù)定義的語(yǔ)義模塊編寫業(yè)務(wù)決策,應(yīng)用程序通過(guò)向規(guī)則引擎提交數(shù)據(jù)或者對(duì)象來(lái)觸發(fā)規(guī)則引擎,由規(guī)則引擎來(lái)調(diào)用相應(yīng)的規(guī)則,進(jìn) 而觸發(fā)相應(yīng)的操作。通常一個(gè)規(guī)則包含一組規(guī)則條件和在此規(guī)則條件下執(zhí)行的操作,當(dāng)且僅當(dāng)該規(guī)則中的所有規(guī)則條件都匹配成功時(shí),規(guī)則引擎將會(huì)觸發(fā)此規(guī)則下的所有操作執(zhí)行。因此,當(dāng)規(guī)則數(shù)量較多時(shí),使用現(xiàn)有技術(shù)進(jìn)行規(guī)則匹配,對(duì)于每個(gè)規(guī)則的所有規(guī)則條件都需要匹配成功,才能匹配到所需規(guī)則。目前,在規(guī)則數(shù)量較多的情況下,通過(guò)匹配每個(gè)規(guī)則的所有規(guī)則條件來(lái)查找出需要匹配的規(guī)則的方法,使得在查找需要匹配的規(guī)則的過(guò)程中需要判斷是否匹配的規(guī)則較多,一定程度上降低了規(guī)則引擎的性能,使得規(guī)則匹配的效率較低。
發(fā)明內(nèi)容
為了解決規(guī)則匹配的效率低的問(wèn)題,本發(fā)明提供了一種實(shí)現(xiàn)基于規(guī)則引擎的規(guī)則匹配方法和裝置。本發(fā)明提供了一種實(shí)現(xiàn)基于規(guī)則引擎的規(guī)則匹配方法,所述方法包括,接收需要匹配的事件,所述事件包括至少一個(gè)屬性值;判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配;如果是,則確定匹配的索引項(xiàng)所對(duì)應(yīng)的目標(biāo)待匹配規(guī)則;對(duì)所述目標(biāo)待匹配規(guī)則的規(guī)則條件與所述事件中的屬性值進(jìn)行匹配。優(yōu)選地,所述判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配之前,還包括按照預(yù)設(shè)排序規(guī)則對(duì)任一所述規(guī)則預(yù)設(shè)的索引項(xiàng)集合進(jìn)行排序;根據(jù)排序后的各個(gè)索引項(xiàng)的順序,設(shè)置索引項(xiàng)集合中各個(gè)索引項(xiàng)的優(yōu)先級(jí)。優(yōu)選地,所述按照預(yù)設(shè)排序規(guī)則對(duì)任一所述規(guī)則預(yù)設(shè)的索引項(xiàng)集合進(jìn)行排序,具體為;將任一相等關(guān)系的索引項(xiàng)設(shè)置為第一優(yōu)先級(jí);將所述索引項(xiàng)集合中除了設(shè)置為第一優(yōu)先級(jí)的索引項(xiàng)的其他索引項(xiàng),按照預(yù)設(shè)順序規(guī)則進(jìn)行排序;相應(yīng)的,所述根據(jù)排序后的各個(gè)索引項(xiàng)的順序,設(shè)置索引項(xiàng)集合中各個(gè)索引項(xiàng)的優(yōu)先級(jí),具體為
根據(jù)排序后的各個(gè)索引項(xiàng)的順序,設(shè)置索引項(xiàng)集合中除了設(shè)置為第一優(yōu)先級(jí)的索引項(xiàng)的其他索引項(xiàng)的優(yōu)先級(jí)。優(yōu)選地,所述判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配,具體為假設(shè)所述待匹配 規(guī)則的數(shù)量為N,則第η個(gè)待匹配規(guī)則的索引項(xiàng)數(shù)量為Mn,所述η為不大于N的自然數(shù);如果第η個(gè)規(guī)則的索引項(xiàng)數(shù)量Mn等于1,則判斷所述事件中是否存在一個(gè)屬性值與所述第η個(gè)規(guī)則的一個(gè)索引項(xiàng)匹配。優(yōu)選地,所述判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配,具體為假設(shè)所述待匹配規(guī)則數(shù)量為N,則第η個(gè)待匹配規(guī)則的索引項(xiàng)數(shù)量為Mn,所述η為不大于N的自然數(shù);如果第η個(gè)規(guī)則的索引項(xiàng)數(shù)量Mn大于1,則判斷所述事件中是否存在一個(gè)屬性值與所述第η個(gè)規(guī)則的第一優(yōu)先級(jí)索引項(xiàng)匹配;如果是,則根據(jù)第一優(yōu)先級(jí)索引項(xiàng)與第二優(yōu)先級(jí)索引項(xiàng)的對(duì)應(yīng)關(guān)系,確定所述第η個(gè)規(guī)則的第二優(yōu)先級(jí)索引項(xiàng),并判斷所述事件中是否存在一個(gè)屬性值與所述第二優(yōu)先級(jí)索引項(xiàng)匹配,依此類推,直到判斷是否存在所述事件中的一個(gè)屬性值與所述第η個(gè)規(guī)則的第Mn優(yōu)先級(jí)索引項(xiàng)匹配。本發(fā)明還提供一種實(shí)現(xiàn)基于規(guī)則引擎的規(guī)則匹配裝置,所述裝置包括接收模塊,用于接收需要匹配的事件,所述事件包括至少一個(gè)屬性值;判斷模塊,用于判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配;第一確定模塊,用于在所述判斷模塊的結(jié)果為是時(shí),確定匹配的索引項(xiàng)所對(duì)應(yīng)的目標(biāo)待匹配規(guī)則;匹配模塊,用于對(duì)所述目標(biāo)待匹配規(guī)則的規(guī)則條件與所述事件中的屬性值進(jìn)行匹配。 優(yōu)選地,所述裝置還包括排序模塊,用于按照預(yù)設(shè)排序規(guī)則對(duì)任一所述規(guī)則預(yù)設(shè)的索引項(xiàng)集合進(jìn)行排序;第一設(shè)置模塊,用于根據(jù)排序后的各個(gè)索引項(xiàng)的順序,設(shè)置索引項(xiàng)集合中各個(gè)索引項(xiàng)的優(yōu)先級(jí)。優(yōu)選地,所述排序模塊包括第二設(shè)置模塊,用于將任一相等關(guān)系的索引項(xiàng)設(shè)置為第一優(yōu)先級(jí);排序子模塊,用于將所述索引項(xiàng)集合中除了設(shè)置為第一優(yōu)先級(jí)的索引項(xiàng)的其他索引項(xiàng),按照預(yù)設(shè)順序規(guī)則進(jìn)行排序;相應(yīng)的,所述第一設(shè)置模塊,具體用于根據(jù)所述排序子模塊中排序后的各個(gè)索引項(xiàng)的順序,設(shè)置索引項(xiàng)集合中除了設(shè)置為第一優(yōu)先級(jí)的索引項(xiàng)的其他索引項(xiàng)的優(yōu)先級(jí)。優(yōu)選地,所述判斷模塊包括獲取子模塊,用于獲取所述待匹配規(guī)則的數(shù)量為N,以及第η個(gè)待匹配規(guī)則的索引項(xiàng)數(shù)量為Mn,所述η為不大于N的自然數(shù);第一判斷子模塊,用于在第η個(gè)規(guī)則的索引項(xiàng)數(shù)量Mn等于I的情況下,判斷所述事件中是否存在一個(gè)屬性值與所述第η個(gè)規(guī)則的一個(gè)索引項(xiàng)匹配。優(yōu)選地,所述判斷模塊包括獲取子模塊,用于獲取所述待匹配規(guī)則的數(shù)量為N,以及第η個(gè)待匹配規(guī)則的索引項(xiàng)數(shù)量為Mn,所述η為不大于N的自然數(shù);第二判斷模塊,用于在第η個(gè)規(guī)則的索引項(xiàng)數(shù)量Mn大于I的情況下,判斷所述事件中是否存在一個(gè)屬性值與所述第η個(gè)規(guī)則的第一優(yōu)先級(jí)索引項(xiàng)匹配;第三判斷子模塊,用于所述第二判斷子模塊的結(jié)果為是時(shí),根據(jù)第一優(yōu)先級(jí)索引 項(xiàng)與第二優(yōu)先級(jí)索引項(xiàng)的對(duì)應(yīng)關(guān)系,確定所述第η個(gè)規(guī)則的第二優(yōu)先級(jí)索引項(xiàng),并判斷所述事件中是否存在一個(gè)屬性值與所述第二優(yōu)先級(jí)索引項(xiàng)匹配,依此類推,直到判斷是否存在所述事件中的一個(gè)屬性值與所述第η個(gè)規(guī)則的第Mn優(yōu)先級(jí)索引項(xiàng)匹配。與現(xiàn)有技術(shù)相比,本發(fā)明首先接收需要匹配的事件,所述事件包括至少一個(gè)屬性值;判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配;如果是,則確定匹配的索引項(xiàng)所對(duì)應(yīng)的目標(biāo)待匹配規(guī)則;對(duì)所述目標(biāo)待匹配規(guī)則的規(guī)則條件與所述事件中的屬性值進(jìn)行匹配。本發(fā)明利用索引來(lái)進(jìn)行需要匹配的規(guī)則的篩選,使得在需要規(guī)則匹配時(shí),減少了需要匹配的規(guī)則的數(shù)量,提高了規(guī)則引擎的性能以及規(guī)則匹配的效率。
為了更清楚地說(shuō)明本申請(qǐng)實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請(qǐng)的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖I為本發(fā)明實(shí)施例一的實(shí)現(xiàn)基于規(guī)則引擎的規(guī)則匹配方法的流程圖;圖2為本發(fā)明實(shí)施例二的實(shí)現(xiàn)基于規(guī)則引擎的規(guī)則匹配方法的流程圖;圖3為本發(fā)明實(shí)施例三的實(shí)現(xiàn)基于規(guī)則引擎的規(guī)則匹配裝置的結(jié)構(gòu)圖;圖4為本發(fā)明實(shí)施例三的排序模塊302的裝置結(jié)構(gòu)圖;圖5為本發(fā)明實(shí)施例三的在規(guī)則的索引項(xiàng)數(shù)量等于I時(shí)的判斷模塊304結(jié)構(gòu)圖;圖6為本發(fā)明實(shí)施例三的在規(guī)則的索引項(xiàng)數(shù)量大于I時(shí)的判斷模塊304結(jié)構(gòu)圖。
具體實(shí)施例方式下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。實(shí)施例一、參考圖1,圖I為本發(fā)明提供的一種實(shí)現(xiàn)基于規(guī)則引擎的規(guī)則匹配方法實(shí)施例一的流程圖,本實(shí)施例具體可以包括步驟101、接收需要匹配的事件,所述事件包括至少一個(gè)屬性值。
本領(lǐng)域中,規(guī)則引擎通過(guò)接收事件被觸發(fā),進(jìn)而根據(jù)接收的事件來(lái)調(diào)用相應(yīng)的規(guī)則與事件進(jìn)行匹配,如果匹配成功,則觸發(fā)此匹配成功的規(guī)則所能夠觸發(fā)的所有操作。本實(shí)施例主要解決了如何根據(jù)接收到的事件,在存儲(chǔ)所有規(guī)則的規(guī)則列表中匹配到與該事件對(duì)應(yīng)的規(guī)則。本實(shí)施例中,首先接收需要匹配的事件,事件可以理解為“被控件識(shí)別的操作”,此處所說(shuō)的事件可以包括一個(gè)屬性值,也可以包括多個(gè)屬性值,所述事件的任意一個(gè)屬性值可以與規(guī)則的任一規(guī)則條件相匹配。例如,任一事件可以為“紅色信號(hào)燈亮了”,此時(shí)“紅色信號(hào)燈亮了”為該事件的一個(gè)屬性值,可以與任一規(guī)則的規(guī)則條件相匹配;任一事件也可以為“紅色信號(hào)燈亮了,同時(shí)綠色信號(hào)燈也亮了”,其中,“紅色信號(hào)燈亮了” “綠色信號(hào)燈也亮了”分別為該事件的屬性值,上述兩個(gè)事件的屬性值也可以與任一規(guī)則的兩個(gè)規(guī)則條件相匹配。
實(shí)際操作中,接收需要匹配事件的方式很多,屬于現(xiàn)有技術(shù),所以在此不再贅述,同時(shí)接收需要匹配的事件的方式不影響本實(shí)施例的實(shí)施。步驟102、判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配,如果是,則進(jìn)入步驟103。本實(shí)施例中,每個(gè)待匹配的規(guī)則包括若干規(guī)則條件,例如,“如果紅色信號(hào)燈亮了,同時(shí)綠色信號(hào)燈也亮了,則會(huì)觸發(fā)A程序自動(dòng)運(yùn)行”為一條規(guī)則,其中,“紅色信號(hào)燈亮了 ”和“綠色信號(hào)燈也亮了”分別為其中的規(guī)則條件,“觸發(fā)A程序自動(dòng)運(yùn)行”為該規(guī)則的規(guī)則條件均被匹配成功時(shí)被觸發(fā)的操作。首先預(yù)先將每個(gè)待匹配規(guī)則的符合索引項(xiàng)設(shè)置條件的規(guī)則條件設(shè)置為索引項(xiàng),例如,可以將“紅色信號(hào)燈亮了”設(shè)置為索引項(xiàng)。其次,將接收到的事件的屬性值與設(shè)置的索引項(xiàng)相匹配,例如,如果接收的事件中的任一屬性值為“紅色信號(hào)燈亮了”,那么該屬性值能夠與被設(shè)置為索引項(xiàng)的“紅色信號(hào)燈亮了”這一規(guī)則條件匹配成功,總之,如果事件中的屬性值能與任意一個(gè)規(guī)則所設(shè)置的所有索引項(xiàng)匹配,則進(jìn)入步驟103。具體的,索引項(xiàng)設(shè)置條件可以為“相等關(guān)系”的規(guī)則條件,例如,如果某個(gè)規(guī)則的一個(gè)規(guī)則條件為“年齡等于20”,則可以將“年齡等于20”這一規(guī)則條件設(shè)置為該規(guī)則的索引項(xiàng)。實(shí)際操作中,每個(gè)待匹配規(guī)則可以設(shè)置一個(gè)索引項(xiàng),也可以設(shè)置多個(gè)索引項(xiàng)。具體的,根據(jù)“相等關(guān)系”的設(shè)置條件設(shè)置的索引項(xiàng)為“年齡等于20”時(shí),如果接收的事件中的一個(gè)屬性值也為“年齡等于20”,那么,作為事件屬性值的“年齡等于20”可以與作為索引項(xiàng)的“年齡等于20”相匹配。值得注意的是,實(shí)際操作中,通常規(guī)則索引項(xiàng)的第一優(yōu)先級(jí)索引項(xiàng)被設(shè)置為具有“相等關(guān)系”規(guī)則條件,除第一優(yōu)先級(jí)以外的其他優(yōu)先級(jí)索引項(xiàng)可以被設(shè)置為具有“相等關(guān)系”或者“不等關(guān)系”的規(guī)則條件。如果不存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配,則說(shuō)明沒有與接收的事件相匹配的規(guī)則。步驟103、確定匹配的索引項(xiàng)所對(duì)應(yīng)的目標(biāo)待匹配規(guī)則。本實(shí)施例中,所有索引項(xiàng)都被匹配的待匹規(guī)則都被作為目標(biāo)待匹配規(guī)則,例如,如果一個(gè)規(guī)則的索引項(xiàng)為“年齡大于18”,同時(shí)另一個(gè)規(guī)則的索引項(xiàng)為“年齡等于20”,并且接收的事件的一個(gè)屬性值為“年齡大于18”,那么作為該事件的一個(gè)屬性值的“年齡大于18”與分別作為兩個(gè)規(guī)則的索引項(xiàng)的“年齡大于18”和“年齡等于20”均能匹配,說(shuō)明被匹配了所有索引項(xiàng)的上述兩個(gè)規(guī)則均被作為目標(biāo)待匹配規(guī)則,用于后續(xù)步驟的規(guī)則條件的進(jìn)一步匹配。步驟104、對(duì)所述目標(biāo)待匹配規(guī)則的規(guī)則條件與所述事件中的屬性值進(jìn)行匹配。本實(shí)施例中,將確定了的目標(biāo)待匹配規(guī)則的規(guī)則條件與接收到的事件中的屬性值進(jìn)行匹配。實(shí)際操作中,本實(shí)施例可以將確定了的目標(biāo)待匹配規(guī)則的所有規(guī)則條件 與接收到的事件中的所有屬性值相匹配,如果完全匹配成功,說(shuō)明該目標(biāo)待匹配規(guī)則與接收到的事件匹配成功,否則,匹配失敗。實(shí)際操作中,本實(shí)施例也可以將目標(biāo)待匹配規(guī)則的除了已經(jīng)匹配成功的索引項(xiàng)部分的其他規(guī)則條件與接收到的事件中的除匹配成功的屬性值以外的其他屬性值相匹配,如果匹配成功,則說(shuō)明該目標(biāo)待匹配規(guī)則與接收到的事件匹配成功,否則,匹配失敗。例如,假設(shè)一個(gè)規(guī)則的規(guī)則條件為“紅色信號(hào)燈亮了”和“綠色信號(hào)燈也亮了”,如果將上述的“紅色信號(hào)燈亮了”這一規(guī)則條件作為索引項(xiàng),在接收的事件的一個(gè)屬性值也為“紅色信號(hào)燈亮了 ”的情況下,可以確定上述規(guī)則的被作為索引項(xiàng)的“紅色信號(hào)燈亮了 ”這一規(guī)則條件與接收的事件的一個(gè)屬性值匹配成功,此時(shí)想要達(dá)到上述規(guī)則被匹配成功的目的,只需將除了“紅色信號(hào)燈亮了”之外的未匹配成功的“綠色信號(hào)燈也亮了”索引規(guī)則與接收的事件的其他屬性值匹配成功即可。本實(shí)施例首先接收需要匹配的事件,所述事件包括至少一個(gè)屬性值,其次判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配;如果是,則確定匹配的索引項(xiàng)所對(duì)應(yīng)的目標(biāo)待匹配規(guī)則,最后對(duì)所述目標(biāo)待匹配規(guī)則的規(guī)則條件與所述事件中的屬性值進(jìn)行匹配。與現(xiàn)有技術(shù)相比,本實(shí)施例利用索引來(lái)進(jìn)行需要匹配的規(guī)則的篩選,使得在需要規(guī)則匹配時(shí),減少了需要匹配的規(guī)則的數(shù)量,提高了規(guī)則引擎的性能以及規(guī)則匹配的效率。實(shí)施例二、參考圖2,圖2為本發(fā)明提供的一種實(shí)現(xiàn)基于規(guī)則引擎的規(guī)則匹配方法實(shí)施例二的流程圖,由于實(shí)施例二中的步驟201和步驟205 206與實(shí)施例一中的步驟101、步驟103 104相同,所以在本實(shí)施例中不再對(duì)其贅述。本實(shí)施例具體可以包括步驟201、接收需要匹配的事件,所述事件包括至少一個(gè)屬性值。步驟202、按照預(yù)設(shè)排序規(guī)則對(duì)任一所述規(guī)則預(yù)設(shè)的索引項(xiàng)集合進(jìn)行排序。本實(shí)施例中,首先設(shè)置各個(gè)規(guī)則的索引項(xiàng),將各個(gè)規(guī)則的索引項(xiàng)分別作為其對(duì)應(yīng)的索引項(xiàng)集合,其次設(shè)置將索引項(xiàng)排序的排序規(guī)則,最后,按照預(yù)先設(shè)置的排序規(guī)則,將各個(gè)規(guī)則對(duì)應(yīng)的索引項(xiàng)集合進(jìn)行排序。具體的,預(yù)先設(shè)置的排序順序可以是將“等于關(guān)系”的規(guī)則索引項(xiàng)設(shè)置為高優(yōu)先級(jí)。例如,假設(shè)一個(gè)規(guī)則的規(guī)則條件為“年齡等于20”和“身高大于170”,則可以按照“等于關(guān)系”為高優(yōu)先級(jí)的索引項(xiàng)設(shè)置條件,將“年齡等于20”這一 “等于關(guān)系”的規(guī)則條件設(shè)置為索引項(xiàng)。步驟203、根據(jù)排序后的各個(gè)索引項(xiàng)的順序,設(shè)置索引項(xiàng)集合中各個(gè)索引項(xiàng)的優(yōu)先級(jí)。本實(shí)施例中,根據(jù)預(yù)先設(shè)置的用于排序的排序規(guī)則對(duì)索引項(xiàng)集合進(jìn)行排序,按照排序后的索引項(xiàng)順序,對(duì)索引項(xiàng)進(jìn)行優(yōu)先級(jí)設(shè)置。具體的,位于索引項(xiàng)順序中的前面位置的索引項(xiàng)可以設(shè)置為較高優(yōu)先級(jí)。例如,一個(gè)規(guī)則的索引項(xiàng)集合包括A、B、C和D四個(gè)索引項(xiàng),其根據(jù)預(yù)設(shè)的排序規(guī)則排序后為B、C、A、D的順序,那么優(yōu)先級(jí)順序即為B > C > A > D。具體的,上述規(guī)則的索引項(xiàng)集合 中的B索引項(xiàng)為第一優(yōu)先級(jí)索弓I項(xiàng),第一優(yōu)先級(jí)索引項(xiàng)可以為“相等關(guān)系”的規(guī)則條件,在實(shí)施例一中的步驟102中已詳細(xì)介紹,在此不再贅述。同時(shí)該索引項(xiàng)集合中的C、A和D索引項(xiàng)分別為第二、三、四級(jí)索引項(xiàng),它們可以為“相等關(guān)系”的規(guī)則條件,也可以為“不相等”關(guān)系的規(guī)則條件,例如,如果某條規(guī)則的一個(gè)規(guī)則條件為“年齡大于20”,則也可以將“年齡大于20”設(shè)置為該規(guī)則的第二、三或四級(jí)索引項(xiàng)。步驟204、判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配,如果是,則進(jìn)入步驟205。本實(shí)施例中,假設(shè)待匹配規(guī)則的數(shù)量為N,則第n個(gè)待匹配規(guī)則的索引項(xiàng)數(shù)量為Mn,此n為不大于N的自然數(shù);如果第n個(gè)規(guī)則的索引項(xiàng)數(shù)量Mn等于1,則判斷接收的事件中是否存在一個(gè)屬性值與該第n個(gè)規(guī)則的一個(gè)索引項(xiàng)匹配,如果存在,則進(jìn)入步驟205。如果第n個(gè)規(guī)則的索引項(xiàng)數(shù)量Mn大于1,則判斷接收的事件中是否存在一個(gè)屬性值與所述第n個(gè)規(guī)則的第一優(yōu)先級(jí)索引項(xiàng)匹配,如果存在,則根據(jù)第一優(yōu)先級(jí)索引項(xiàng)與第二優(yōu)先級(jí)索引項(xiàng)的對(duì)應(yīng)關(guān)系,確定該第n個(gè)規(guī)則的第二優(yōu)先級(jí)索引項(xiàng),并判斷接收的事件中是否存在一個(gè)屬性值與所述第二優(yōu)先級(jí)索引項(xiàng)匹配,依此類推,直到判斷是否存在接收的事件中的一個(gè)屬性值與所述第n個(gè)規(guī)則的第Mn優(yōu)先級(jí)索引項(xiàng)匹配。值得注意的是,本實(shí)施例中的N、n和Mn均取自然數(shù)。下面以n = 5、Mn = 2的規(guī)則為例參考表I、表2,表I為第5個(gè)規(guī)則的第一優(yōu)先級(jí)的索引項(xiàng)與第二優(yōu)先級(jí)的索引項(xiàng)的對(duì)應(yīng)表,表2為第5個(gè)規(guī)則的第二優(yōu)先級(jí)的索引項(xiàng)與規(guī)則標(biāo)識(shí)的對(duì)應(yīng)表。假設(shè)規(guī)則引擎接收的事件的屬性值為“年齡等于20” “身高大于170”以及“本科學(xué)歷”。首先,通過(guò)規(guī)則引擎的處理,作為第一優(yōu)先級(jí)的“年齡等于20”與作為接收的事件的一個(gè)屬性值的“年齡等于20”能夠相匹配。其次,參考表1,通過(guò)第一優(yōu)先級(jí)索引項(xiàng)與第二優(yōu)先級(jí)索引項(xiàng)的對(duì)應(yīng)關(guān)系,確定與已匹配成功的第一優(yōu)先級(jí)索引項(xiàng)對(duì)應(yīng)的第二優(yōu)先級(jí)索引項(xiàng)。再次,判斷接收的事件中除了與第一優(yōu)先級(jí)索引項(xiàng)匹配成功的屬性值以外的其他屬性值是否有與第二優(yōu)先級(jí)索引相相匹配的,對(duì)于此時(shí)規(guī)則引擎接收的事件中的“身高大于170”屬性值正好與該規(guī)則的第二優(yōu)先級(jí)索引項(xiàng)“身高大于170”相匹配。最后,參考表2,通過(guò)第二優(yōu)先級(jí)索引項(xiàng)與規(guī)則標(biāo)識(shí)的對(duì)應(yīng)關(guān)系,確定與已匹配成功的第二優(yōu)先級(jí)索引項(xiàng)對(duì)應(yīng)的規(guī)則標(biāo)識(shí),進(jìn)而便于后續(xù)步驟中的完全被匹配的規(guī)則的確定。表I
權(quán)利要求
1.一種實(shí)現(xiàn)基于規(guī)則引擎的規(guī)則匹配方法,其特征在于,所述方法包括, 接收需要匹配的事件,所述事件包括至少一個(gè)屬性值; 判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配; 如果是,則確定匹配的索引項(xiàng)所對(duì)應(yīng)的目標(biāo)待匹配規(guī)則; 對(duì)所述目標(biāo)待匹配規(guī)則的規(guī)則條件與所述事件中的屬性值進(jìn)行匹配。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配之前,還包括 按照預(yù)設(shè)排序規(guī)則對(duì)任一所述規(guī)則預(yù)設(shè)的索引項(xiàng)集合進(jìn)行排序; 根據(jù)排序后的各個(gè)索引項(xiàng)的順序,設(shè)置索引項(xiàng)集合中各個(gè)索引項(xiàng)的優(yōu)先級(jí)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述按照預(yù)設(shè)排序規(guī)則對(duì)任一所述規(guī)則預(yù)設(shè)的索引項(xiàng)集合進(jìn)行排序,具體為; 將任一相等關(guān)系的索引項(xiàng)設(shè)置為第一優(yōu)先級(jí); 將所述索引項(xiàng)集合中除了設(shè)置為第一優(yōu)先級(jí)的索引項(xiàng)的其他索引項(xiàng),按照預(yù)設(shè)順序規(guī)則進(jìn)行排序; 相應(yīng)的,所述根據(jù)排序后的各個(gè)索引項(xiàng)的順序,設(shè)置索引項(xiàng)集合中各個(gè)索引項(xiàng)的優(yōu)先級(jí),具體為 根據(jù)排序后的各個(gè)索引項(xiàng)的順序,設(shè)置索引項(xiàng)集合中除了設(shè)置為第一優(yōu)先級(jí)的索引項(xiàng)的其他索引項(xiàng)的優(yōu)先級(jí)。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配,具體為 假設(shè)所述待匹配規(guī)則的數(shù)量為N,則第η個(gè)待匹配規(guī)則的索引項(xiàng)數(shù)量為Mn,所述η為不大于N的自然數(shù); 如果第η個(gè)規(guī)則的索引項(xiàng)數(shù)量Mn等于1,則判斷所述事件中是否存在一個(gè)屬性值與所述第η個(gè)規(guī)則的一個(gè)索引項(xiàng)匹配。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配,具體為 假設(shè)所述待匹配規(guī)則數(shù)量為N,則第η個(gè)待匹配規(guī)則的索引項(xiàng)數(shù)量為Mn,所述η為不大于N的自然數(shù); 如果第η個(gè)規(guī)則的索引項(xiàng)數(shù)量Mn大于1,則判斷所述事件中是否存在一個(gè)屬性值與所述第η個(gè)規(guī)則的第一優(yōu)先級(jí)索引項(xiàng)匹配; 如果是,則根據(jù)第一優(yōu)先級(jí)索引項(xiàng)與第二優(yōu)先級(jí)索引項(xiàng)的對(duì)應(yīng)關(guān)系,確定所述第η個(gè)規(guī)則的第二優(yōu)先級(jí)索引項(xiàng),并判斷所述事件中是否存在一個(gè)屬性值與所述第二優(yōu)先級(jí)索引項(xiàng)匹配,依此類推,直到判斷是否存在所述事件中的一個(gè)屬性值與所述第η個(gè)規(guī)則的第Mn優(yōu)先級(jí)索引項(xiàng)匹配。
6.一種實(shí)現(xiàn)基于規(guī)則引擎的規(guī)則匹配裝置,其特征在于,所述裝置包括 接收模塊,用于接收需要匹配的事件,所述事件包括至少一個(gè)屬性值; 判斷模塊,用于判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配; 第一確定模塊,用于在所述判斷模塊的結(jié)果為是時(shí),確定匹配的索引項(xiàng)所對(duì)應(yīng)的目標(biāo)待匹配規(guī)則; 匹配模塊,用于對(duì)所述目標(biāo)待匹配規(guī)則的規(guī)則條件與所述事件中的屬性值進(jìn)行匹配。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述裝置還包括 排序模塊,用于按照預(yù)設(shè)排序規(guī)則對(duì)任一所述規(guī)則預(yù)設(shè)的索引項(xiàng)集合進(jìn)行排序; 第一設(shè)置模塊,用于根據(jù)排序后的各個(gè)索引項(xiàng)的順序,設(shè)置索引項(xiàng)集合中各個(gè)索引項(xiàng)的優(yōu)先級(jí)。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述排序模塊包括 第二設(shè)置模塊,用于將任一相等關(guān)系的索引項(xiàng)設(shè)置為第一優(yōu)先級(jí); 排序子模塊,用于將所述索引項(xiàng)集合中除了設(shè)置為第一優(yōu)先級(jí)的索引項(xiàng)的其他索引項(xiàng),按照預(yù)設(shè)順序規(guī)則進(jìn)行排序; 相應(yīng)的,所述第一設(shè)置模塊,具體用于 根據(jù)所述排序子模塊中排序后的各個(gè)索引項(xiàng)的順序,設(shè)置索引項(xiàng)集合中除了設(shè)置為第一優(yōu)先級(jí)的索引項(xiàng)的其他索弓I項(xiàng)的優(yōu)先級(jí)。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述判斷模塊包括 獲取子模塊,用于獲取所述待匹配規(guī)則的數(shù)量為N,以及第η個(gè)待匹配規(guī)則的索引項(xiàng)數(shù)量為Mn,所述η為不大于N的自然數(shù); 第一判斷子模塊,用于在第η個(gè)規(guī)則的索引項(xiàng)數(shù)量Mn等于I的情況下,判斷所述事件中是否存在一個(gè)屬性值與所述第η個(gè)規(guī)則的一個(gè)索引項(xiàng)匹配。
10.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述判斷模塊包括 獲取子模塊,用于獲取所述待匹配規(guī)則的數(shù)量為N,以及第η個(gè)待匹配規(guī)則的索引項(xiàng)數(shù)量為Mn,所述η為不大于N的自然數(shù); 第二判斷模塊,用于在第η個(gè)規(guī)則的索引項(xiàng)數(shù)量Mn大于I的情況下,判斷所述事件中是否存在一個(gè)屬性值與所述第η個(gè)規(guī)則的第一優(yōu)先級(jí)索引項(xiàng)匹配; 第三判斷子模塊,用于所述第二判斷子模塊的結(jié)果為是時(shí),根據(jù)第一優(yōu)先級(jí)索引項(xiàng)與第二優(yōu)先級(jí)索引項(xiàng)的對(duì)應(yīng)關(guān)系,確定所述第η個(gè)規(guī)則的第二優(yōu)先級(jí)索引項(xiàng),并判斷所述事件中是否存在一個(gè)屬性值與所述第二優(yōu)先級(jí)索引項(xiàng)匹配,依此類推,直到判斷是否存在所述事件中的一個(gè)屬性值與所述第η個(gè)規(guī)則的第Mn優(yōu)先級(jí)索引項(xiàng)匹配。
全文摘要
本發(fā)明實(shí)施例公開了一種實(shí)現(xiàn)基于規(guī)則引擎的規(guī)則匹配方法和裝置,該方法具體為,接收需要匹配的事件,所述事件包括至少一個(gè)屬性值;判斷是否存在任一待匹配規(guī)則預(yù)設(shè)的索引項(xiàng)與所述事件中的屬性值匹配;如果是,則確定匹配的索引項(xiàng)所對(duì)應(yīng)的目標(biāo)待匹配規(guī)則;對(duì)所述目標(biāo)待匹配規(guī)則的規(guī)則條件與所述事件中的屬性值進(jìn)行匹配。本發(fā)明利用索引來(lái)進(jìn)行需要匹配的規(guī)則的篩選,使得在需要規(guī)則匹配時(shí),減少了需要匹配的規(guī)則的數(shù)量,提高了規(guī)則引擎的性能以及規(guī)則匹配的效率。
文檔編號(hào)G06F17/30GK102968309SQ20121050730
公開日2013年3月13日 申請(qǐng)日期2012年11月30日 優(yōu)先權(quán)日2012年11月30日
發(fā)明者林強(qiáng) 申請(qǐng)人:亞信聯(lián)創(chuàng)科技(中國(guó))有限公司