Elastic Search使用java代碼連接出錯的問題及其解決方式:java.net.UnknowHostException:http://127.0.0.1

Elastic Search使用java代碼連接出錯的問題及其解決方式

 

      昨天將elastic Search 以及他的可視化界面管理工具 head 安裝好了之後,今天便進入了 Elastic Search 整合 java 代碼的操作,首先是連接指定地址、端口的es。

 

連接指定地址以及指定端口的es

   代碼如下:

final String Host = "http://127.0.0.1";
final int port = 9300;
/**
 *  新建一個settings
 *  這裏返回的其實是BUILDER build裏面包含了Settings、treeMap、setONce
 *  這裏的put方法其實是build.getTreeMap().put(Key,value)
 */
Settings build = Settings.builder().put("cluster.name", "cluster-es").build();
// es下面的一個組件
TransportClient transportClient;
try{
    /**
     *  建立遠程連接es
     *  PreBuiltTransportClient 是 TransportClient 連接客戶端的子類
     *  addTransportAddress() 是調用的 transportClient裏面TransportClientNodesService的addTransport方法
     *  首先它是加了synchronized關鍵字的是一個線程安全的方法
     *  同時他也對es服務器作了判斷,如果是closed的情況下會直接提示服務器關閉
     */
    transportClient = new PreBuiltTransportClient(build).addTransportAddress(new TransportAddress(InetAddress.getByName(Host),port));
    System.out.println("連接Es成功!");
}catch (Exception e){
    System.out.println(e);
}

注:註釋部分均爲本人深入查看源碼後所寫,有興趣的小夥伴可以自行查看源碼。我們要養成查看源碼的習慣!

ps:在將ik分詞器解壓到Elastic Search下面的plugins文件夾後,可能會出現啓動es閃退情況。如果出現這種情況,請在es安裝包(解壓包(我用的windows的是一個解壓包))的config文件夾中找到elasticsearch.yaml並在最後新增兩行配置:

         http.cors.enabled: true 
         http.cors.allow-origin: "*"  

這個配置主要是爲了解決跨域問題。

EnableCors共三個參數分別爲origins、headers和methods。

origins配置允許訪問的域名,多個域名以逗號分隔即可,域名一定要完整,如果是ip地址前面要加上“http”,只使用IP的話一定會失效的。

參數headers配置所支持的資源。

參數methods配置支持的方法,get、post、put等。

如果允許任意域名、任意資源、任意方法訪問自己的webapi,則三個參數全部使用星號”*”即可。

於是我開始嘗試連接Es:

出現如下錯誤:

無法識別http://127.0.0.1 !!!!!

經過多方查證,問題就是出在這個http上,去掉http -->將host改爲“127.0.0.1”,順利連接!

修改:

結果:

大家可以看到這裏的確是通過TransportClientNodesService去連接ES的,印證了之前我的註釋!

 

好啦,這就連接上了,下章寫es的java寫入和讀取。

 

有什麼問題和建議請給我留言~~~

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章