elasticsearch,Java,Exception,elasticsearch" /> elasticsearch,Java,Exception,elasticsearch" />

Java Elasticsearch:NoShardAvailableActionException启动后

Java Elasticsearch:NoShardAvailableActionException启动后,java,exception,elasticsearch,Java,Exception,elasticsearch,我通过upstart启动Java应用程序和Elasticsearch 1.4.2。有时,当我重新启动服务器时,在前5个文档请求中会出现NoShardAvailableActionException 我的应用程序首先从Elasticsearch读取了一些文档,而Elasticsearch似乎还没有准备好。当我稍等一下并重新启动我的应用程序时,一切正常 如何检查Elasticsearch集群(我只有一个节点)是否准备好获取文档 我已经尝试过检查集群状态,但即使它已经是黄色的,我有时也会收到NoSha

我通过upstart启动Java应用程序和Elasticsearch 1.4.2。有时,当我重新启动服务器时,在前5个文档请求中会出现
NoShardAvailableActionException

我的应用程序首先从Elasticsearch读取了一些文档,而Elasticsearch似乎还没有准备好。当我稍等一下并重新启动我的应用程序时,一切正常

如何检查Elasticsearch集群(我只有一个节点)是否准备好获取文档

我已经尝试过检查集群状态,但即使它已经是黄色的,我有时也会收到
NoShardAvailableActionException

private static void checkClusterStateNotRed() throws Exception {
    while(clusterState() == ClusterHealthStatus.RED) {
        Logger.info("Elasticsearch cluster state is red);
        Thread.sleep(1000);
    }
}

private static ClusterHealthStatus clusterState() throws Exception {
    return ElasticsearchClient.getInstance()
            .admin().cluster()
            .clusterStats(new ClusterStatsRequest())
            .get()
            .getStatus();
}

我觉得你不是在等待碎片被恢复并准备好接受请求。通常需要一些时间

client.admin().cluster().prepareHealth().setWaitForYellowStatus().execute().actionGet(5000)
在进行任何调用之前使用此代码。这将至少等待5秒钟,碎片才能完全恢复,集群至少恢复为黄色状态