使用Java API获取Elasticsearch版本
我正在寻找Java API挂件以使用Java API获取Elasticsearch版本,java,api,elasticsearch,Java,Api,elasticsearch,我正在寻找Java API挂件以 curl-XGEThttp://localhost:9200 其结果如下: { "ok" : true, "status" : 200, "name" : "Kierrok", "version" : { "number" : "0.90.7", "build_hash" : "36897d07dadcb70886db7f149e645ed3d44eb5f2", "build_timestamp" : "2013-11-
curl-XGEThttp://localhost:9200
其结果如下:
{
"ok" : true,
"status" : 200,
"name" : "Kierrok",
"version" : {
"number" : "0.90.7",
"build_hash" : "36897d07dadcb70886db7f149e645ed3d44eb5f2",
"build_timestamp" : "2013-11-13T12:06:54Z",
"build_snapshot" : false,
"lucene_version" : "4.5.1"
},
"tagline" : "You Know, for Search"
}
我希望它出现在JavaAPI的admin()部分?我找不到它。jar文件中有一个资源:es-build.properties。这包含了您需要的大部分相关信息。最简单的方法是打开该文件并读取属性
version=0.90.6
hash=e2a24efdde0cb7cc1b2071ffbbd1fd874a6d8d6b
timestamp=1383573249653
我找到了这个解决方案(Scala代码,但Java API)
elasticsearch用户组向David Pilato提供了积分。但这只是客户端的版本。如果我没有嵌入式节点,但使用传输客户端从外部elasticsearch群集获取数据,该怎么办?您应该使嵌入式节点版本与群集一致。我不认为当它们不对齐时会发生好事。这不是重点。我要求提供一种方法,通过JavaAPI获得集群的Elasticsearch版本。给定curl命令的挂件。你的回答没有回答我的问题…当然,我明白你的意思。您在下面发布的解决方案似乎实际上为集群中的每个节点获取了此信息,因此这似乎确实是答案。我得到了错误
org.elasticsearch.transport.netty4.Netty4Utils:elasticsearch v5和transport client的网络层上的致命错误。
case class GetEsVersionQuery(esClient: Client) {
lazy val p = promise[NodesInfoResponse]()
esClient
.admin()
.cluster()
.prepareNodesInfo()
.all()
.execute()
.addListener(new ActionListener[NodesInfoResponse] {
def onFailure(e: Throwable) = {
p failure e
}
def onResponse(response: NodesInfoResponse) = p success response
})
def execute: Future[NodesInfoResponse] = p.future
}
def testElasticsearchVersion: Future[Boolean] = {
GetEsVersionQuery(esClient).execute map {
esVersion => {
val nodes = esVersion.iterator().toList
nodes forall(node => node.getVersion.after(Version.V_0_90_5))
}
} recover {
case e: Throwable => false
}
}
}