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寫入和讀取。
有什麼問題和建議請給我留言~~~