Я запускаю свое Java-приложение и Elasticsearch 1.4.2 с помощью выскочки. Иногда, когда я перезапускаю свой сервер, я получаю NoShardAvailableActionException
в первых 5 запросах doc.
Мое приложение сначала прочитало некоторые документы из Elasticsearch и Elasticsearch, похоже, не готово. Когда я немного подожду и перезагружу свое приложение, все работает.
Как я могу проверить, готов ли мой кластер Elasticsearch (у меня всего 1 узел) получить документы?
Я уже пытался проверить статус кластера, но даже он уже желтый, иногда я получаю 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 секунд, прежде чем осколки будут полностью восстановлены, а кластер вернется к по меньшей мере желтому статусу.