因为工作要求,需要测试elasticsearch5.6.0版本,拿到这个的时候,网上找了很多资料,代码通过TransportClient实现。
首先、服务器上部署elasticsearch5.6.0版本。下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-5-6-0(在Linux上面也可以通过命令:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.0.tar.gz)
其次、配置信息elasticsearch.yml文档,开启和配置以下内容:
1、cluster.name: my-application
2、node.name: node-1
3、path.data: /home/canace/elasticsearch-5.6.0/path/data——{根据实际地址修改,日志存放点,考虑新建用户可以有权限调用}
4、path.logs: /home/canace/elasticsearch-5.6.0/path/logs——{根据实际地址修改,日志存放点,考虑新建用户可以有权限调用}
5、network.host: 0.0.0.0
6、http.port: 9200
再者、配置信息jvm.options文档,修改成以下内容:
如果不修改会提示内存不足最后启动./bin/elasticsearch。
下面来讲一下代码实现,demo代码是通过springboot实现,先来看下pom依赖内容:
最主要的实现方式,TransportClient链接;注意点是:TransportClient的端口,这里9300是TransportClient的端口,和安装地址对外的port不是一样的。还有一个我是通过cluster.name获取对应机子,所以名称一定不能配置错误。
如果不确定TransportClient的端口号,可以在启动elasticsearch的时候,查看对应的提示信息。
主要讲讲遇到的问题:
问题1 :网上很多新建节点的时候通过new TransportAddress(InetAddresses.forString(host),9300);但是这个会有错误提示。
解决方法:通过new InetSocketTransportAddress(InetAddresses.forString(host),9300);来定义节点。
问题2 : None of the configured nodes are available: [{#transport#-1}{GRphuiRLRgOVTP0707mGFQ}
这个问题困扰我很久,提示是节点没有找到,虽然根据网上的提示,看了好几遍配置,但是终究未能解决问题。后来通过debug,发现client有个错误提示:Method threw 'java.lang.StackOverflowError' exception. Cannot evaluate org.elasticsearch.common.inject.InjectorImpl.toString(),这才找了问题所在,因为链接的机器上没有启动elasticsearch,简直自己把自己坑死。
所以当出现这个问题的时候,首先要排查链接机子上的elasticsearch是否已经启动,可以通过{ip}:{port}查看
二、查看cluster_name是否和代码中配置的一致
demo代码地址: https://github.com/lunacai/canace-es56-demo
Elasticsearch基本命令
查看集群状态: curl http://localhost:9200/_cat/health?v
查看索引列表: curl http://localhost:9200/_cat/indices?v
查看某个索引库结构: curl http://localhost:9200/{canace}
查看某个索引所有内容: curl http://localhost:9200/{canaca}/_search?q=*&pretty
创建索引: curl -X PUT "localhost:9200/{canace}?pretty"
网友评论