Elasticsearch作為一個成熟的開源框架,對主流的多種客戶端語言都支持,比如Java,JavaScript ,PHP,.Net,Python,Ruby,CURL當然還有一些小眾的語言,雖然es官網沒支持,但是個人開發者也有一些開源的,具體的可在es官網clients地址查看:
https://www.elastic.co/guide/en/elasticsearch/client/index.html
開發過程中,基本最常用的就是Java和curl的方式了,因為es本身就是使用java語言開發的,所以對Java的支持應該是最到位了,此外es也支持rest ful的DSL的訪問方式,我們可以在linux上輕鬆的使用curl命令來對es進行增刪改查,curl的操作方式大多數都是臨時的,實際開發的我們還是用程式語言來訪問的:
es支持Java API的訪問方式,支持非常全面,唯一的缺點就是依賴有點多,代碼稍臃腫,有時候我們想簡單的開發一個非常小的功能,又不想使用java笨重的客戶端方式,應該怎麼辦?
上文說到es支持rest的訪問方式,那麼我們完全可以使用httpclient或者jsoup來直接發送http請求不就行了嗎?其實是可以的,使用httpclient和jsoup來發送curl的命令也能操作es,獲取結果。這裡面有一個需要注意的地方。
httpclient和jsoup都不直接支持發送DELETE方法帶參數的請求,這一點是個小缺陷,如果這個不支持,意味著一些刪除操作比如delete by query可能支持不太好。jsoup是完全不支持,而在httpclient裡面我們可以通過繼承重寫HttpEntityEnclosingRequestBase來滿足,刪除請求帶參數體,下面來看下如何使用:
繼承重寫的代碼:
然後使用httpclient發送一個刪除請求:
httpclient還是比較強大的,但是上面的代碼還是有點複雜,而且涉及連接的地方是有問題的,我們都知道es一般都是多臺機器組成集群,而使用原生的httpclient請求建立的連結只能是某一臺機器的ip這樣一來,如果這臺機器掛掉這個客戶端程序就完全不能使用了,所以風險還是比較大的,不過也不用擔心,es官網也提供了ES Java RestClient的方式來訪問es,這個庫底層用的也是httpclient的組件,只不過es官網做了封裝,支持多機器ip,以及對請求方法做了簡化,所以想減少項目的依賴,又對支持功能要求比較健壯,我們就可以使用這個庫來開發我們的業務。
官網文檔地址:
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html
maven依賴:
下面來看下,如何使用ES的RestClient來操作ES:
總結:
ES官網提供的RestClient還支持nio實現的異步非阻塞的方式多線程多送請求,通過回調函數來處理響應的結果,當然了權限認證,超時中斷,失敗重試,線程數都有對應的設置選項,感興趣的朋友可自行查閱嘗試。
通過對比我們發現官網封裝的RestClient使用起來更加簡單和健壯,比起來沒有包裝的httpclient原生的方式更加符合生產環境的標準,對於不想熟悉標準的java api的es操作方法,又想通過java來訪問es的朋友們,RestClient是一個不錯的選擇。
有什麼問題可以掃碼關注微信公眾號:我是攻城師(woshigcs),在後臺留言諮詢。 技術債不能欠,健康債更不能欠, 求道之路,與君同行。