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写入和读取。
有什么问题和建议请给我留言~~~