2014-12-22 3 views
1

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

ответ

5

Я чувствую, что вы не ждали черепки, чтобы быть восстановлен и готов к открыт для запросов. Обычно это занимает некоторое время.

client.admin().cluster().prepareHealth().setWaitForYellowStatus().execute().actionGet(5000) 

Используйте этот код перед выполнением любых вызовов. Это будет ждать не менее 5 секунд, прежде чем осколки будут полностью восстановлены, а кластер вернется к по меньшей мере желтому статусу.

Смежные вопросы