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:

出现如下错误:

es snapshot es snapshot Java_ES

无法识别http://127.0.0.1 !!!!!

经过多方查证,问题就是出在这个http上,去掉http -->将host改为“127.0.0.1”,顺利连接!

修改:

es snapshot es snapshot Java_ES_02

es snapshot es snapshot Java_ES_03

结果:

es snapshot es snapshot Java_ES_04

大家可以看到这里的确是通过TransportClientNodesService去连接ES的,印证了之前我的注释!

 

好啦,这就连接上了,下章写es的java写入和读取。

 

有什么问题和建议请给我留言~~~