本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,特別是涉及一種查詢方法及裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)的迅猛發(fā)展,網(wǎng)絡(luò)信息數(shù)據(jù)量呈現(xiàn)指數(shù)級(jí)的迅猛增長(zhǎng)。互聯(lián)網(wǎng)用戶對(duì)數(shù)據(jù)的搜索需求量越來越大,而且對(duì)從海量數(shù)據(jù)中抓取數(shù)據(jù)準(zhǔn)確度的要求也越來越高。elasticsearch是一個(gè)基于lucence的搜索服務(wù)器,提供了多用戶分布式搜索能力的全文引擎。
但是,elasticsearh所需要的學(xué)習(xí)和維護(hù)成本較高,特別是以json(javascriptobjectnotation)為數(shù)據(jù)格式的restful查詢api(applicationprogramminginterface,應(yīng)用程序編程接口),查詢語(yǔ)法復(fù)雜多樣,對(duì)于習(xí)慣于使用關(guān)系型數(shù)據(jù)庫(kù)sql(structuredquerylanguage,結(jié)構(gòu)化查詢語(yǔ)言)的用戶來說存在一定難度。其中,json是一種輕量級(jí)的數(shù)據(jù)交換格式,易于用戶閱讀和編寫,同時(shí)也易于機(jī)器解析和生成。因此,用戶使用elasticsearch搜索服務(wù)器時(shí),學(xué)習(xí)和開發(fā)成本較高。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例的目的在于提供一種查詢方法及裝置,以降低elasticsearch用戶的學(xué)習(xí)難度和開發(fā)成本。具體技術(shù)方案如下:
本發(fā)明實(shí)施例公開了一種查詢方法,包括:
獲取查詢參數(shù),判斷所述查詢參數(shù)是否符合語(yǔ)法規(guī)范;
當(dāng)判斷所述查詢參數(shù)符合語(yǔ)法規(guī)范時(shí),提取所述查詢參數(shù)包含的自定義查詢語(yǔ)言;
解析所述自定義查詢語(yǔ)言,并將所述查詢參數(shù)封裝為搜索服務(wù)器對(duì)應(yīng)的結(jié)構(gòu)化查詢語(yǔ)言;
根據(jù)所述結(jié)構(gòu)化查詢語(yǔ)言向所述搜索服務(wù)器的集群發(fā)送查詢請(qǐng)求,得到所述搜索服務(wù)器的集群針對(duì)所述查詢參數(shù)反饋的查詢結(jié)果。
可選的,位于所述得到所述搜索服務(wù)器的集群針對(duì)所述查詢參數(shù)反饋的查詢結(jié)果,之后,所述方法還包括:
封裝所述搜索服務(wù)器的集群針對(duì)所述查詢參數(shù)反饋的查詢結(jié)果,得到并返回封裝后的查詢結(jié)果。
可選的,位于所述判斷所述查詢參數(shù)是否符合語(yǔ)法規(guī)范,之后,所述方法還包括:
當(dāng)判斷所述查詢參數(shù)不符合語(yǔ)法規(guī)范時(shí),返回異常。
可選的,所述判斷所述查詢參數(shù)是否符合語(yǔ)法規(guī)范的步驟,包括:
通過正則表達(dá)式判斷所述查詢參數(shù),確定所述查詢參數(shù)是否符合語(yǔ)法規(guī)范;
所述判斷所述查詢參數(shù)符合語(yǔ)法規(guī)范的步驟,包括:
確定所述查詢參數(shù)中不包含未定義的查詢匹配條件;
確定所述查詢參數(shù)中的同一查詢子句的關(guān)系表達(dá)式符合邏輯關(guān)系;
所述判斷所述查詢參數(shù)不符合語(yǔ)法規(guī)范的步驟,包括:
確定所述查詢參數(shù)中包含未定義的查詢匹配條件;或,
確定所述查詢參數(shù)中的同一查詢子句的關(guān)系表達(dá)式存在沖突的邏輯關(guān)系。
可選的,所述將所述查詢參數(shù)封裝為搜索服務(wù)器對(duì)應(yīng)的結(jié)構(gòu)化查詢語(yǔ)言的步驟,包括:
根據(jù)所述查詢參數(shù)中查詢表達(dá)式的匹配條件,建立符合所述搜索服務(wù)器查詢規(guī)范的查詢過濾器;
將所述查詢參數(shù)中的關(guān)系表達(dá)式轉(zhuǎn)化為所述搜索服務(wù)器的關(guān)系表達(dá)式;
將所述查詢過濾器和所述搜索服務(wù)器的關(guān)系表達(dá)式封裝為所述搜索服務(wù)器的結(jié)構(gòu)化查詢語(yǔ)言。
可選的,所述獲取查詢參數(shù)的步驟,包括:
通過遠(yuǎn)程過程調(diào)用,獲取遠(yuǎn)程計(jì)算機(jī)發(fā)送的所述查詢參數(shù)。
可選的,所述封裝所述搜索服務(wù)器的集群針對(duì)所述查詢參數(shù)反饋的查詢結(jié)果的步驟,包括:
將所述查詢結(jié)果轉(zhuǎn)化為自定義的json格式的查詢結(jié)果。
可選的,所述自定義查詢語(yǔ)言包括:json格式的自定義查詢語(yǔ)言。
本發(fā)明實(shí)施例還公開了一種查詢裝置,包括:
獲取及判斷模塊,用于獲取查詢參數(shù),判斷所述查詢參數(shù)是否符合語(yǔ)法規(guī)范;
提取模塊,用于當(dāng)判斷所述查詢參數(shù)符合語(yǔ)法規(guī)范時(shí),提取所述查詢參數(shù)包含的自定義查詢語(yǔ)言;
語(yǔ)言封裝模塊,用于解析所述自定義查詢語(yǔ)言,并將所述查詢參數(shù)封裝為搜索服務(wù)器對(duì)應(yīng)的結(jié)構(gòu)化查詢語(yǔ)言;
結(jié)果獲取模塊,用于根據(jù)所述結(jié)構(gòu)化查詢語(yǔ)言向所述搜索服務(wù)器的集群發(fā)送查詢請(qǐng)求,得到所述搜索服務(wù)器的集群針對(duì)所述查詢參數(shù)反饋的查詢結(jié)果。
可選的,本發(fā)明實(shí)施例的查詢裝置,還包括:
結(jié)果封裝模塊,用于封裝所述搜索服務(wù)器的集群針對(duì)所述查詢參數(shù)反饋的查詢結(jié)果,得到并返回封裝后的查詢結(jié)果。
可選的,本發(fā)明實(shí)施例的查詢裝置,還包括:
異常返回模塊,用于當(dāng)判斷所述查詢參數(shù)不符合語(yǔ)法規(guī)范時(shí),返回異常。
可選的,所述獲取及判斷模塊具體用于,通過正則表達(dá)式判斷所述查詢參數(shù),確定所述查詢參數(shù)是否符合語(yǔ)法規(guī)范;
所述提取模塊包括:
第一語(yǔ)法確定子模塊,用于確定所述查詢參數(shù)中不包含未定義的查詢匹配條件;
第二語(yǔ)法確定子模塊,用于確定所述查詢參數(shù)中的同一查詢子句的關(guān)系表達(dá)式符合邏輯關(guān)系;
所述異常返回模塊包括:
第一異常子模塊,用于確定所述查詢參數(shù)中包含未定義的查詢匹配條件;
第二異常子模塊,用于確定所述查詢參數(shù)中的同一查詢子句的關(guān)系表達(dá)式存在沖突的邏輯關(guān)系。
可選的,所述語(yǔ)言封裝模塊包括:
第一轉(zhuǎn)化子模塊,用于根據(jù)所述查詢參數(shù)中查詢表達(dá)式的匹配條件,建立符合所述搜索服務(wù)器查詢規(guī)范的查詢過濾器;
第二轉(zhuǎn)化子模塊,用于將所述查詢參數(shù)中的關(guān)系表達(dá)式轉(zhuǎn)化為所述搜索服務(wù)器的關(guān)系表達(dá)式;
封裝子模塊,用于將所述查詢過濾器和所述搜索服務(wù)器的關(guān)系表達(dá)式封裝為所述搜索服務(wù)器的結(jié)構(gòu)化查詢語(yǔ)言。
可選的,所述語(yǔ)法判斷模塊包括:
查詢參數(shù)獲取子模塊,用于通過遠(yuǎn)程過程調(diào)用,獲取遠(yuǎn)程計(jì)算機(jī)發(fā)送的所述查詢參數(shù)。
可選的,所述結(jié)果封裝模塊具體用于將所述查詢結(jié)果轉(zhuǎn)化為自定義的json格式的查詢結(jié)果。
可選的,所述自定義查詢語(yǔ)言包括:json格式的自定義查詢語(yǔ)言。
本發(fā)明實(shí)施例提供的查詢方法及裝置,通過獲取查詢參數(shù),提取查詢參數(shù)包含的自定義查詢語(yǔ)言;當(dāng)判斷自定義查詢語(yǔ)言符合語(yǔ)法規(guī)范時(shí),解析自定義查詢語(yǔ)言,并將查詢參數(shù)封裝為搜索服務(wù)器對(duì)應(yīng)的結(jié)構(gòu)化查詢語(yǔ)言;根據(jù)結(jié)構(gòu)化查詢語(yǔ)言向搜索服務(wù)器的集群發(fā)送查詢請(qǐng)求,得到搜索服務(wù)器的集群針對(duì)查詢參數(shù)反饋的查詢結(jié)果。本發(fā)明實(shí)施例的查詢方法及裝置,由于自定義查詢語(yǔ)言不僅語(yǔ)法簡(jiǎn)潔,具有良好的可讀性,使得使用搜索服務(wù)器的用戶,例如:使用elasticsearch搜索服務(wù)器的用戶,學(xué)習(xí)難度降低,同時(shí)降低了開發(fā)成本,提高了開發(fā)效率。當(dāng)然,實(shí)施本發(fā)明的任一產(chǎn)品或方法必不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例的查詢方法的一種流程圖;
圖2為本發(fā)明實(shí)施例的查詢方法的另一種流程圖;
圖3為本發(fā)明實(shí)施例的查詢裝置的一種結(jié)構(gòu)圖;
圖4為本發(fā)明實(shí)施例的查詢裝置的另一種結(jié)構(gòu)圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例提出了一種查詢方法及裝置,將用戶的符合自定義規(guī)范、仿sql的查詢語(yǔ)言轉(zhuǎn)化為elasticsearch的查詢api,可降低elasticsearch用戶的開發(fā)成本和學(xué)習(xí)難度,下面首先對(duì)查詢方法進(jìn)行詳細(xì)說明。
參見圖1,圖1為本發(fā)明實(shí)施例的查詢方法的一種流程圖,包括以下步驟:
s101,獲取查詢參數(shù)。
本發(fā)明實(shí)施例中,用戶根據(jù)自己的需求進(jìn)行搜索查詢,查詢參數(shù)是由用戶輸入的,那么,搜索服務(wù)器首先獲取到用戶的查詢參數(shù),然后,再進(jìn)行后續(xù)的查詢處理。
s102,判斷判斷查詢參數(shù)是否符合語(yǔ)法規(guī)范。
需要說明的是,由于本發(fā)明實(shí)施例中的搜索服務(wù)器中存儲(chǔ)的是自定義查詢語(yǔ)言,且自定義查詢語(yǔ)言具有語(yǔ)法規(guī)范。為了可以根據(jù)查詢參數(shù)提取自定義查詢語(yǔ)言,查詢參數(shù)也具有與自定義查詢語(yǔ)言相匹配的語(yǔ)法規(guī)范。因此,在獲取用戶輸入的查詢參數(shù)之后,首先需要對(duì)查詢參數(shù)進(jìn)行語(yǔ)法判斷。
s103,提取查詢參數(shù)包含的自定義查詢語(yǔ)言。
在判斷查詢參數(shù)符合語(yǔ)法規(guī)范時(shí),提取查詢參數(shù)包含的自定義查詢語(yǔ)言。通常,查詢參數(shù)的語(yǔ)法格式包括:json格式。相應(yīng)地,自定義查詢語(yǔ)言包括:json格式的自定義查詢語(yǔ)言。下文將對(duì)查詢參數(shù)的語(yǔ)法規(guī)范進(jìn)行詳細(xì)說明,在此不再贅述。
s104,解析自定義查詢語(yǔ)言,并將查詢參數(shù)封裝為搜索服務(wù)器對(duì)應(yīng)的結(jié)構(gòu)化查詢語(yǔ)言。
需要說明的是,在進(jìn)行搜索時(shí),查詢結(jié)果是由搜索服務(wù)器的集群反饋的,如果直接通過查詢參數(shù)向搜索服務(wù)器發(fā)送查詢請(qǐng)求,搜索服務(wù)器是無法識(shí)別的。因此,在判斷自定義查詢語(yǔ)言符合語(yǔ)法規(guī)范之后,對(duì)自定義查詢語(yǔ)言進(jìn)行解析,并將查詢參數(shù)封裝為與搜索服務(wù)器對(duì)應(yīng)的結(jié)構(gòu)化查詢語(yǔ)言,這樣,搜索服務(wù)器才可以識(shí)別進(jìn)而執(zhí)行s105。
s105,根據(jù)結(jié)構(gòu)化查詢語(yǔ)言向搜索服務(wù)器的集群發(fā)送查詢請(qǐng)求,得到搜索服務(wù)器的集群針對(duì)查詢參數(shù)反饋的查詢結(jié)果。
具體的,在通過s104得到搜索服務(wù)器可識(shí)別的結(jié)構(gòu)化查詢語(yǔ)言后,向搜索服務(wù)器的集群發(fā)送查詢請(qǐng)求,需要說明的是,搜索服務(wù)器的集群是指將很多搜索服務(wù)器集中起來一起進(jìn)行同一種搜索服務(wù)。然后,搜索服務(wù)器的集群反饋針對(duì)查詢參數(shù)的查詢結(jié)果給用戶。
可見,本發(fā)明實(shí)施例的查詢方法,通過獲取查詢參數(shù),提取查詢參數(shù)包含的自定義查詢語(yǔ)言。解析自定義查詢語(yǔ)言,并將查詢參數(shù)封裝為搜索服務(wù)器對(duì)應(yīng)的結(jié)構(gòu)化查詢語(yǔ)言。根據(jù)結(jié)構(gòu)化查詢語(yǔ)言向搜索服務(wù)器的集群發(fā)送查詢請(qǐng)求,得到搜索服務(wù)器的集群針對(duì)查詢參數(shù)反饋的查詢結(jié)果。本發(fā)明實(shí)施例的查詢方法及裝置,由于自定義查詢語(yǔ)言不僅語(yǔ)法簡(jiǎn)潔,具有良好的可讀性,使得使用搜索服務(wù)器的用戶,例如:使用elasticsearch搜索服務(wù)器的用戶,學(xué)習(xí)難度降低,同時(shí)降低了開發(fā)成本,提高了開發(fā)效率。
參見圖2,圖2為本發(fā)明實(shí)施例的查詢方法的另一種流程圖,在圖1實(shí)施例的基礎(chǔ)上,還包括:
s201,當(dāng)判斷查詢參數(shù)不符合語(yǔ)法規(guī)范時(shí),返回異常。
具體的,當(dāng)判斷查詢參數(shù)不符合語(yǔ)法規(guī)范時(shí),返回異常,用戶的程序捕獲到該異常之后進(jìn)行相應(yīng)的處理。
s202,封裝搜索服務(wù)器的集群針對(duì)查詢參數(shù)反饋的查詢結(jié)果,得到并返回封裝后的查詢結(jié)果。
具體的,在搜索服務(wù)器的集群得到針對(duì)查詢參數(shù)的查詢結(jié)果后,為了給用戶提供方便查看的查詢結(jié)果,通常情況下,需要對(duì)查詢結(jié)果進(jìn)行封裝,得到封裝后的查詢結(jié)果,并返回給用戶。
在本發(fā)明實(shí)施例的一種實(shí)現(xiàn)方式中,判斷查詢參數(shù)是否符合語(yǔ)法規(guī)范的步驟,包括:
通過正則表達(dá)式判斷查詢參數(shù),確定查詢參數(shù)是否符合語(yǔ)法規(guī)范。
其中,正則表達(dá)式是一種規(guī)則表達(dá)式,正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,該“規(guī)則字符串”用來表達(dá)對(duì)字符串的一種過濾邏輯。通過正則表達(dá)式可減少對(duì)查詢參數(shù)的判斷時(shí)間,提高查詢效率。需要強(qiáng)調(diào)的是,通過其他任何方法來確定查詢參數(shù)是否符合語(yǔ)法規(guī)范,這都是可以的。
在本發(fā)明實(shí)施例的一種實(shí)現(xiàn)方式中,判斷查詢參數(shù)符合語(yǔ)法規(guī)范的步驟,包括:
確定查詢參數(shù)中不包含未定義的查詢匹配條件。
確定查詢參數(shù)中的同一查詢子句的關(guān)系表達(dá)式符合邏輯關(guān)系。
在本發(fā)明實(shí)施例的一種實(shí)現(xiàn)方式中,判斷查詢參數(shù)不符合語(yǔ)法規(guī)范的步驟,包括:
確定查詢參數(shù)中包含未定義的查詢匹配條件。或,
確定查詢參數(shù)中的同一查詢子句的關(guān)系表達(dá)式存在沖突的邏輯關(guān)系。
本發(fā)明實(shí)施例中,在判斷查詢參數(shù)符合語(yǔ)法規(guī)范時(shí),如果查詢參數(shù)中不包含未定義的查詢匹配條件,即,查詢參數(shù)中的查詢匹配條件都是定義過的,那么,判斷查詢參數(shù)中的同一查詢子句的關(guān)系表達(dá)式是否存在沖突的邏輯關(guān)系。需要說明的是,確定查詢參數(shù)中不包含未定義的查詢匹配條件、和確定查詢參數(shù)中的同一查詢字句的關(guān)系表達(dá)式符合邏輯關(guān)系之間沒有先后關(guān)系。
同樣地,在判斷查詢參數(shù)不符合語(yǔ)法規(guī)范時(shí),如果確定查詢參數(shù)中包含未定義的查詢匹配條件,那么,判斷查詢參數(shù)不符合語(yǔ)法規(guī)范;或者,如果確定查詢參數(shù)中的同一查詢子句的關(guān)系表達(dá)式存在沖突的邏輯關(guān)系,判斷查詢參數(shù)不符合語(yǔ)法規(guī)范。確定查詢參數(shù)中包含未定義的查詢匹配條件、和確定查詢參數(shù)中的同一查詢子句的關(guān)系表達(dá)式存在沖突的邏輯關(guān)系之間沒有先后關(guān)系。
需要說明的是,判斷查詢參數(shù)符合語(yǔ)法規(guī)范和判斷查詢參數(shù)不符合語(yǔ)法規(guī)范的方法包括其他任何關(guān)于語(yǔ)法的判斷方法,在此不一一列舉。
更為具體的,本發(fā)明實(shí)施例中,查詢表達(dá)式的格式為:eqs_name=匹配條件+數(shù)據(jù)類型+“_”+”字段名稱”。其中,本發(fā)明實(shí)施例支持的匹配條件包括:eq、like、lt、gt、le、ge、neq等。其中,eq表示相等,可以是字符串的相等,也可以是數(shù)值的相等,數(shù)值的類型可以為任意的數(shù)值類型,包括:整型、浮點(diǎn)型等等。like表示查找字符串的子串,也就是字符串中只要包含用戶查找的字符串,就會(huì)顯示在查詢結(jié)果中。lt表示小于,gt表示大于,le表示小于或等于,ge表示大于或等于,lt、gt、le和ge對(duì)應(yīng)的數(shù)據(jù)類型為數(shù)值類型的,可以是整數(shù)類型、長(zhǎng)整型、也可以是單精度浮點(diǎn)型等等。neq表示不等于,與eq類似,neq可以是字符串的相等,也可以是數(shù)值的相等。當(dāng)然,本發(fā)明實(shí)施例還支持除上述匹配條件之外的其他匹配條件,在此不一一列舉。
本發(fā)明實(shí)施例支持的數(shù)據(jù)類型包括:s(string,字符串類型)、i(integer,整數(shù)類型)、l(long,長(zhǎng)整型)、n(double,雙精度浮點(diǎn)型)、d(date,日期類型)、b(boolean,布爾型)、t(timestamp,時(shí)間戳類型)、f(float,單精度浮點(diǎn)型),可實(shí)現(xiàn)對(duì)各種數(shù)據(jù)類型的兼容,字段名稱為用戶搜索查詢參數(shù)中的字段的名稱。
舉例而言,查詢參數(shù)中的查詢表達(dá)式為:{"eqs_sex":"男"},其中,eq表示相等,s表示的數(shù)據(jù)類型為字符串string。因此,該查詢表達(dá)式表示的是字符串相等的匹配,也就是查詢的字段名稱sex為“男”的數(shù)據(jù)。顯然,eq和s在本發(fā)明實(shí)施例中都有定義,因此,該查詢表達(dá)式對(duì)應(yīng)的自定義查詢語(yǔ)言是符合語(yǔ)法規(guī)范的。
本發(fā)明實(shí)施例中定義的關(guān)系表達(dá)式包括:and、union等。其中,and表示“且”的關(guān)系,例如:查詢參數(shù)中的查詢表達(dá)式為:{"eqs_name_and_eql_id":"洪秀全_and_8"},表示的是查詢name為“洪秀全”、id為8的數(shù)據(jù)信息,兩個(gè)條件必須同時(shí)滿足,記錄才會(huì)在查詢結(jié)果中顯示。union表示“或”的關(guān)系,例如:{"eql_id_union_eql_id":"7_union_8"}表示id的值為7或者8。只要有一個(gè)條件滿足,即id為7或者id為8,則該查詢記錄會(huì)出現(xiàn)在查詢結(jié)果中。
由上述可知,查詢表達(dá)式{"eqs_name_and_eql_id":"洪秀全_and_8"}和{"eql_id_union_eql_id":"7_union_8"}是符合邏輯的。如果查詢表達(dá)式為:{"eql_id_and_eql_id":"7_union_8"},可以看出,查詢表達(dá)式里面同時(shí)含有“且”和“或”,是存在沖突的邏輯關(guān)系的,因此,該查詢表達(dá)式是不符合語(yǔ)法規(guī)范的,該查詢表達(dá)式對(duì)應(yīng)的查詢參數(shù)是不符合語(yǔ)法規(guī)范的。
可選的,本發(fā)明實(shí)施例的查詢方法中,將查詢參數(shù)封裝為搜索服務(wù)器對(duì)應(yīng)的結(jié)構(gòu)化查詢語(yǔ)言的步驟,包括:
根據(jù)查詢參數(shù)中查詢表達(dá)式的匹配條件,建立符合搜索服務(wù)器查詢規(guī)范的查詢過濾器。
將查詢參數(shù)中的關(guān)系表達(dá)式轉(zhuǎn)化為搜索服務(wù)器的關(guān)系表達(dá)式。
將查詢過濾器和搜索服務(wù)器的關(guān)系表達(dá)式封裝為搜索服務(wù)器的結(jié)構(gòu)化查詢語(yǔ)言。
需要說明的是,在向搜索服務(wù)器的集群發(fā)送查詢請(qǐng)求之前,需要將查詢參數(shù)轉(zhuǎn)化為搜索服務(wù)器的集群可識(shí)別的查詢方式,即,現(xiàn)有技術(shù)中的javaapi。
舉例而言,如果用戶輸入的查詢參數(shù)為:{"likes_description":"音樂"},表示查詢結(jié)果中的描述部分的字符串的子串中包含“音樂”。
轉(zhuǎn)化后的搜索服務(wù)器的查詢語(yǔ)言為:
prefixfilterbuilderprefixfilterbuilder=filterbuilders.prefixfilter("description","音樂")。
如果用戶輸入的查詢參數(shù)為:{"eqs_sex":"男"},表示查詢結(jié)果的字符串中的性別部分等于“男”,轉(zhuǎn)化后的搜索服務(wù)器的查詢語(yǔ)言為:
termfilterbuildertermfilterbuilder=filterbuilders.termfilter("sex","男")。
可見,本發(fā)明實(shí)施例的查詢語(yǔ)言結(jié)構(gòu)簡(jiǎn)單,易于學(xué)習(xí),降低了開發(fā)成本,提高了開發(fā)效率。
在本發(fā)明實(shí)施例的一種實(shí)現(xiàn)方式中,獲取查詢參數(shù)的步驟,包括:
通過遠(yuǎn)程過程調(diào)用,獲取遠(yuǎn)程計(jì)算機(jī)發(fā)送的查詢參數(shù)。
需要說明的是,rpc(remoteprocedurecall,遠(yuǎn)程過程調(diào)用)是一種協(xié)議,程序可使用這種協(xié)議向網(wǎng)絡(luò)中的另一臺(tái)計(jì)算機(jī)上的程序請(qǐng)求服務(wù)。由于使用rpc的程序不必了解支持通信的網(wǎng)絡(luò)協(xié)議的情況,因此,rpc提高了程序的互操作性。在rpc中,發(fā)出請(qǐng)求的程序是客戶程序,而提供服務(wù)的程序是服務(wù)器。本發(fā)明實(shí)施例中,用戶在個(gè)人計(jì)算機(jī)上發(fā)送查詢請(qǐng)求的程序,相應(yīng)地,搜索服務(wù)器提供查詢服務(wù)。由于rpc屬于現(xiàn)有技術(shù),這里不進(jìn)行詳細(xì)描述。
在本發(fā)明實(shí)施例的一種實(shí)現(xiàn)方式中,封裝搜索服務(wù)器的集群針對(duì)查詢參數(shù)反饋的查詢結(jié)果,包括:
將查詢結(jié)果轉(zhuǎn)化為自定義的json格式的查詢結(jié)果。
一般的,搜索服務(wù)器輸出的查詢結(jié)果的數(shù)據(jù)格式與用戶輸入的查詢參數(shù)的數(shù)據(jù)格式是保持一致的,由于用戶的查詢參數(shù)為json格式的查詢參數(shù),那么,搜索服務(wù)器在向用戶反饋查詢結(jié)果時(shí),需要將查詢結(jié)果轉(zhuǎn)化為自定義的json格式的查詢結(jié)果,這樣,用戶可方便地查看查詢結(jié)果。
相應(yīng)于上述方法實(shí)施例,本發(fā)明實(shí)施例還公開了一種查詢裝置,參見圖3,圖3為本發(fā)明實(shí)施例的查詢裝置的一種結(jié)構(gòu)圖,包括:
獲取及判斷模塊301,用于獲取查詢參數(shù),判斷查詢參數(shù)是否符合語(yǔ)法規(guī)范。
提取模塊302,用于當(dāng)判斷查詢參數(shù)符合語(yǔ)法規(guī)范時(shí),提取查詢參數(shù)包含的自定義查詢語(yǔ)言。
語(yǔ)言封裝模塊303,用于解析自定義查詢語(yǔ)言,并將查詢參數(shù)封裝為搜索服務(wù)器對(duì)應(yīng)的結(jié)構(gòu)化查詢語(yǔ)言。
結(jié)果獲取模塊304,用于根據(jù)結(jié)構(gòu)化查詢語(yǔ)言向搜索服務(wù)器的集群發(fā)送查詢請(qǐng)求,得到搜索服務(wù)器的集群針對(duì)查詢參數(shù)反饋的查詢結(jié)果。
可見,本發(fā)明實(shí)施例的查詢裝置,通過獲取查詢參數(shù),提取查詢參數(shù)包含的自定義查詢語(yǔ)言。解析自定義查詢語(yǔ)言,并將查詢參數(shù)封裝為搜索服務(wù)器對(duì)應(yīng)的結(jié)構(gòu)化查詢語(yǔ)言。根據(jù)結(jié)構(gòu)化查詢語(yǔ)言向搜索服務(wù)器的集群發(fā)送查詢請(qǐng)求,得到搜索服務(wù)器的集群針對(duì)查詢參數(shù)反饋的查詢結(jié)果。本發(fā)明實(shí)施例的查詢方法及裝置,由于自定義查詢語(yǔ)言不僅語(yǔ)法簡(jiǎn)潔,具有良好的可讀性,使得使用搜索服務(wù)器的用戶,例如:使用elasticsearch搜索服務(wù)器的用戶,學(xué)習(xí)難度降低,同時(shí)降低了開發(fā)成本,提高了開發(fā)效率。
需要說明的是,本發(fā)明實(shí)施例的查詢裝置是應(yīng)用上述查詢方法的裝置,則上述查詢方法的所有實(shí)施例均適用于該裝置,且均能達(dá)到相同或相似的有益效果。
參見圖4,圖4為本發(fā)明實(shí)施例的查詢裝置的另一種結(jié)構(gòu)圖,在圖3實(shí)施例的基礎(chǔ)上,還包括:
異常返回模塊401,用于當(dāng)判斷查詢參數(shù)不符合語(yǔ)法規(guī)范時(shí),返回異常。
結(jié)果封裝模塊402,用于封裝搜索服務(wù)器的集群針對(duì)查詢參數(shù)反饋的查詢結(jié)果,得到并返回封裝后的查詢結(jié)果。
可選的,本發(fā)明實(shí)施例的查詢裝置中,獲取及判斷模塊具體用于,通過正則表達(dá)式判斷查詢參數(shù),確定查詢參數(shù)是否符合語(yǔ)法規(guī)范。
提取模塊包括:
第一語(yǔ)法確定子模塊,用于確定查詢參數(shù)中不包含未定義的查詢匹配條件。
第二語(yǔ)法確定子模塊,用于確定查詢參數(shù)中的同一查詢子句的關(guān)系表達(dá)式符合邏輯關(guān)系。
異常返回模塊包括:
第一異常子模塊,用于確定查詢參數(shù)中包含未定義的查詢匹配條件。
第二異常子模塊,用于確定查詢參數(shù)中的同一查詢子句的關(guān)系表達(dá)式存在沖突的邏輯關(guān)系。
可選的,本發(fā)明實(shí)施例的查詢裝置中,語(yǔ)言封裝模塊包括:
第一轉(zhuǎn)化子模塊,用于根據(jù)查詢參數(shù)中查詢表達(dá)式的匹配條件,建立符合搜索服務(wù)器查詢規(guī)范的查詢過濾器。
第二轉(zhuǎn)化子模塊,用于將查詢參數(shù)中的關(guān)系表達(dá)式轉(zhuǎn)化為搜索服務(wù)器的關(guān)系表達(dá)式。
封裝子模塊,用于將查詢過濾器和搜索服務(wù)器的關(guān)系表達(dá)式封裝為搜索服務(wù)器的結(jié)構(gòu)化查詢語(yǔ)言。
可選的,本發(fā)明實(shí)施例的查詢裝置中,語(yǔ)法判斷模塊包括:
查詢參數(shù)獲取子模塊,用于通過遠(yuǎn)程過程調(diào)用,獲取遠(yuǎn)程計(jì)算機(jī)發(fā)送的查詢參數(shù)。
可選的,本發(fā)明實(shí)施例的查詢裝置中,結(jié)果封裝模塊具體用于將查詢結(jié)果轉(zhuǎn)化為自定義的json格式的查詢結(jié)果。
可選的,本發(fā)明實(shí)施例的查詢裝置中,自定義查詢語(yǔ)言包括:json格式的自定義查詢語(yǔ)言。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語(yǔ)僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
本說明書中的各個(gè)實(shí)施例均采用相關(guān)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見即可,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處。尤其,對(duì)于系統(tǒng)實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。