本發明涉及互聯網技術領域,尤其涉及一種操作elasticsearch的方法及裝置。
背景技術:
elasticsearch是一個基于lucene的搜索服務器,通常被應用于云計算中,具有能夠實時搜索、穩定、可靠、快速以及安裝方便的特點。然而,現有的操作elasticsearch的方案一般是對elasticsearch官方提供的客戶端工具包進行封裝,該封裝過程和具體的業務邏輯耦合緊密,因此,采用上述方式操作elasticsearch,配置靈活性差,在應用中代碼編譯量大,并且,當業務發生變更時,代碼的修改量大。
技術實現要素:
鑒于上述問題,提出了本發明以便提供一種克服上述問題或者至少部分地解決上述問題的操作elasticsearch的方法及裝置。
本發明實施例提供一種操作elasticsearch的方法,所述方法包括:
從所述elasticsearch的上游獲取待操作數據;
利用sql對所述待操作數據進行轉換操作,將所述待操作數據轉換為目標操作數據,所述目標操作數據具有與所述elasticsearch對應的數據結構;
將所述目標操作數據和所述轉換操作的類型封裝為一個action類;
利用所述action類對elasticsearch進行操作。
優選的,所述利用sql對所述待操作數據進行轉換操作,將所述待操作數據轉換為目標操作數據,包括:
獲取目標sql語句;
解析所述目標sql語句,獲得所述目標sql語句的語義信息;
根據所述語義信息,將所述待操作數據轉換為所述目標操作數據。
優選的,在所述獲得所述目標sql語句的語義信息之后,所述方法還包括:
根據所述語義信息確定出所述轉換操作的類型。
優選的,所述根據所述語義信息,將所述待操作數據轉換為所述目標操作數據,包括:
從所述語義信息中提取出目標轉換結構和目標轉換參數;
對所述目標轉換結構、所述目標轉換參數和所述待操作數據進行整合,獲得所述目標操作數據。
優選的,所述轉換操作的類型包括插入、選擇、刪除和更新中的任意一種。
基于同一發明構思,本發明實施例還提供一種操作elasticsearch的裝置,所述裝置包括:
獲取模塊,用于從所述elasticsearch的上游獲取待操作數據;
轉換模塊,用于利用sql對所述待操作數據進行轉換操作,將所述待操作數據轉換為目標操作數據,所述目標操作數據具有與所述elasticsearch對應的數據結構;
封裝模塊,用于將所述目標操作數據和所述轉換操作的類型封裝為一個action類;
操作模塊,用于利用所述action類對elasticsearch進行操作。
優選的,所述轉換模塊,包括:
獲取單元,用于獲取目標sql語句;
解析單元,用于解析所述目標sql語句,獲得所述目標sql語句的語義信息;
轉換單元,用于根據所述語義信息,將所述待操作數據轉換為所述目標操作數據。
優選的,所述裝置還包括:
根據所述語義信息確定出所述轉換操作的類型。
優選的,所述轉換單元,包括:
提取子單元,用于從所述語義信息中提取出目標轉換結構和目標轉換參數;
整合子單元,用于對所述目標轉換結構、所述目標轉換參數和所述待操作數據進行整合,獲得所述目標操作數據。
優選的,所述轉換操作的類型包括插入、選擇、刪除和更新中的任意一種。
本發明實施例中的一個或多個技術方案,至少具有如下技術效果或優點:
本發明在從elasticsearch的上游獲取到待操作數據之后,利用sql對待操作數據進行轉換操作,將待操作數據轉換為目標操作數據,目標操作數據具有與所述elasticsearch對應的數據結構,再將目標操作數據和轉換操作的類型封裝為一個action類,最終利用action類對elasticsearch進行操作,代碼編譯量小,即便業務發生變更,代碼的修改量也會較小,而且配置靈活,支持批量操作。
附圖說明
通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優選實施方式的目的,而并不認為是對本發明的限制。而且在整個附圖中,用相同的參考圖形表示相同的部件。在附圖中:
圖1示出了本發明實施例中的一種操作elasticsearch的方法的流程圖;
圖2示出了本發明實施例中的一種操作elasticsearch的裝置的結構圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。
本發明實施例提供一種操作elasticsearch的方法,如圖1所示,所述方法包括:
步驟101:從所述elasticsearch的上游獲取待操作數據。
在本申請中,待操作數據為list<map<string,object>>valuesmap4param,待操作數據可以從hive中查詢得到,可以從數據庫中查詢得到,還可以從指定文件中得到。需要說明的是,本申請獲取的可以是多組待操作數據,例如,從指定文件中獲取到第一組待操作數據:[1,"zzz1",26],以及第二組待操作數據:[2,"zzz2",27]。
步驟102:利用sql對所述待操作數據進行轉換操作,將所述待操作數據轉換為目標操作數據,所述目標操作數據具有與所述elasticsearch對應的數據結構。
本申請利用sql(structuredquerylanguage,結構化查詢語言)將待操作數據轉換為具有與elasticsearch對應的數據結構的目標操作數據。在一種具體的實現方式中,步驟102包括步驟:
獲取目標sql語句;
解析所述目標sql語句,獲得所述目標sql語句的語義信息;
根據所述語義信息,將所述待操作數據轉換為所述目標操作數據。
具體來講,目標sql語句用于執行轉換操作,在獲取到目標sql語句之后,對目標sql語句進行解析,從而能夠得到目標sql語句的語義信息,語義信息中包含了轉換操作的類型、目標轉換結構和目標轉換參數。其中,對于目標sql語句的解析可以采用開源的sql解析工具jsqlparser中的ccjsqlparserutil類的parse方法進行解析,例如,當目標sql語句為“insertintouser(id,name,age)values(:id,:name,:age)”時,對目標sql語句解析的代碼為:
stringsql="insertintouser(id,name,age)values(:id,:name,:age)";//解析“insertintouser(id,name,age)values(:id,:name,:age)”
在解析出語義信息之后,可以將語義信息保存到statement對象中,保存的代碼為:
statementstatement=ccjsqlparserutil.parse(sql);//將語義信息保存到statement對象
進一步,在本申請中,根據所述語義信息,將所述待操作數據轉換為所述目標操作數據,包括:
從所述語義信息中提取出目標轉換結構和目標轉換參數;
對所述目標轉換結構、所述目標轉換參數和所述待操作數據進行整合,獲得所述目標操作數據。
具體來講,可以先根據所述語義信息確定出所述轉換操作的類型,接著根據轉換操作的類型從語義信息中提取出目標轉換結構和目標轉換參數。其中,可以通過判斷statement的類型來確定出轉換操作的類型,轉換操作的類型包括插入(insert)、選擇(select)、刪除(delete)和更新(update)中的任意一種,確定轉換操作的類型的代碼如下:
通過上述代碼確定出轉換操作的類型為插入操作(insert),接著,對于目標轉換結構的提取方法可以為:通過insert的getcolumns方法,本申請中的目標轉換結構也即目標sql語句的列,目標轉換結構被封裝在column對象中,目標sql語句的列相當于elasticsearch中的索引的屬性名稱,提取目標轉換結構的代碼如下:
list<column>columns=insert.getcolumns();
通過上述代碼能夠獲得目標轉換結構為:[id、name、age]。
在確定出轉換操作的類型之后,對于目標轉換參數的提取方法可以為:通過insert的itemslistvisitoradapter類的obtainparameters方法,目標轉換參數被封裝在param對象,提取目標轉換參數的代碼如下:
list<param>paramlist=itemslistvisitor.obtainparameters();
通過上述代碼能夠獲得目標轉換參數為:[:id,:name,:age]。
需要說明的是,在本申請中,目標轉換參數與轉換操作的類型相對應,例如,當轉換操作的類型為插入時,目標轉換參數即為占位符。
進一步,在提取出目標轉換結構和目標轉換參數之后,對所述目標轉換結構、所述目標轉換參數和所述待操作數據進行整合,獲得所述目標操作數據。具體地,可以采用fillparamvalue方法進行整合,該方法可以批量處理入參,還可以對入參進行定制處理,擴展性強,執行整合過程的代碼如下:
publiclist<map<string,string>>fillparamvalue(list<map<string,object>>valuesmap4param);
通過上述代碼最終能夠獲得目標操作數據list<map<string,string>>valuesmap4es。
需要說明的是,針對一組待操作數據而言,通過執行上述過程能夠獲得對應的一組目標操作數據,針對多組待操作數據而言,通過循環執行上述過程能夠獲得對應的多組目標操作數據。例如,針對前述第一組待操作數據和第二組待操作數據而言,將第一組待操作數據作為輸入參數時,通過執行上述過程,最終得到對應的第一組目標操作數據為:{id:1,name:"zzz1",age:26},將第二組待操作數據作為輸入參數時,循環執行上述過程,最終得到對應的第二組目標操作數據為:{id:2,name:"zzz2",age:27}。
步驟103:將所述目標操作數據和所述轉換操作的類型封裝為一個action類。
其中,實現步驟103的代碼如下:
步驟104:利用所述action類對elasticsearch進行操作。
在具體實現過程中,利用elasticsearch官方提供的一個使用純java來操作elasticsearch的客戶端工具類,操作過程的代碼如下:
其中,client即為客戶端工具類,本申請將。并且我們將action類封裝到client中,從而,操作elasticsearch就是調用的client里面的方法,例如,針對insert操作,調用過程的代碼如下:
其中,list<map<string,string>>valuesmap4es為目標操作數據。
最后通過hasfailures()方法來獲取操作的結果,本申請通過多次調用該方法來完成目標操作數據的批量插入。
基于同一發明構思,本發明實施例還提供一種操作elasticsearch的裝置,如圖2所示,所述裝置包括:
獲取模塊201,用于從所述elasticsearch的上游獲取待操作數據;
轉換模塊202,用于利用sql對所述待操作數據進行轉換操作,將所述待操作數據轉換為目標操作數據,所述目標操作數據具有與所述elasticsearch對應的數據結構;
封裝模塊203,用于將所述目標操作數據和所述轉換操作的類型封裝為一個action類;
操作模塊204,用于利用所述action類對elasticsearch進行操作。
優選的,轉換模塊202,包括:
獲取單元,用于獲取目標sql語句;
解析單元,用于解析所述目標sql語句,獲得所述目標sql語句的語義信息;
轉換單元,用于根據所述語義信息,將所述待操作數據轉換為所述目標操作數據。
優選的,所述裝置還包括:
根據所述語義信息確定出所述轉換操作的類型。
優選的,所述轉換單元,包括:
提取子單元,用于從所述語義信息中提取出目標轉換結構和目標轉換參數;
整合子單元,用于對所述目標轉換結構、所述目標轉換參數和所述待操作數據進行整合,獲得所述目標操作數據。
優選的,所述轉換操作的類型包括插入、選擇、刪除和更新中的任意一種。
上述本申請實施例中的技術方案,至少具有如下的技術效果或優點:
本發明在從elasticsearch的上游獲取到待操作數據之后,利用sql對待操作數據進行轉換操作,將待操作數據轉換為目標操作數據,目標操作數據具有與所述elasticsearch對應的數據結構,再將目標操作數據和轉換操作的類型封裝為一個action類,最終利用action類對elasticsearch進行操作,代碼編譯量小,即便業務發生變更,代碼的修改量也會較小,而且配置靈活,支持批量操作。另外,本申請還能夠減少開發人員學習elasticsearch的成本,同時,可以無縫整合elasticsearch上游記錄到elasticsearch的持久化。
在此提供的算法和顯示不與任何特定計算機、虛擬系統或者其它設備固有相關。各種通用系統也可以與基于在此的示教一起使用。根據上面的描述,構造這類系統所要求的結構是顯而易見的。此外,本發明也不針對任何特定編程語言。應當明白,可以利用各種編程語言實現在此描述的本發明的內容,并且上面對特定語言所做的描述是為了披露本發明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節。然而,能夠理解,本發明的實施例可以在沒有這些具體細節的情況下實踐。在一些實例中,并未詳細示出公知的方法、結構和技術,以便不模糊對本說明書的理解。
類似地,應當理解,為了精簡本公開并幫助理解各個發明方面中的一個或多個,在上面對本發明的示例性實施例的描述中,本發明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應將該公開的方法解釋成反映如下意圖:即所要求保護的本發明要求比在每個權利要求中所明確記載的特征更多的特征。更確切地說,如下面的權利要求書所反映的那樣,發明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權利要求書由此明確地并入該具體實施方式,其中每個權利要求本身都作為本發明的單獨實施例。
本領域那些技術人員可以理解,可以對實施例中的設備中的模塊進行自適應性地改變并且把它們設置在與該實施例不同的一個或多個設備中。可以把實施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領域的技術人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發明的范圍之內并且形成不同的實施例。例如,在下面的權利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
本發明的各個部件實施例可以以硬件實現,或者以在一個或者多個處理器上運行的軟件模塊實現,或者以它們的組合實現。本領域的技術人員應當理解,可以在實踐中使用微處理器或者數字信號處理器(dsp)來實現根據本發明實施例的操作elasticsearch的裝置中的一些或者全部部件的一些或者全部功能。本發明還可以實現為用于執行這里所描述的方法的一部分或者全部的設備或者裝置程序(例如,計算機程序和計算機程序產品)。這樣的實現本發明的程序可以存儲在計算機可讀介質上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網網站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應該注意的是上述實施例對本發明進行說明而不是對本發明進行限制,并且本領域技術人員在不脫離所附權利要求的范圍的情況下可設計出替換實施例。在權利要求中,不應將位于括號之間的任何參考符號構造成對權利要求的限制。單詞“包含”不排除存在未列在權利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來實現。在列舉了若干裝置的單元權利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。