2015-09-15 2 views
28

Я пытаюсь сделать операцию сканирования и прокрутки по индексу, как показано на example:Elasticsearch PHP клиент бросает исключение «Нет живых узлов найдено в кластере»

$client = ClientBuilder::create()->setHosts([MYESHOST])->build(); 
$params = [ 
    "search_type" => "scan", // use search_type=scan 
    "scroll" => "30s",   // how long between scroll requests. should be small! 
    "size" => 50,    // how many results *per shard* you want back 
    "index" => "my_index", 
    "body" => [ 
     "query" => [ 
      "match_all" => [] 
     ] 
    ] 
]; 

$docs = $client->search($params); // Execute the search 
$scroll_id = $docs['_scroll_id']; // The response will contain no results, just a _scroll_id 

// Now we loop until the scroll "cursors" are exhausted 
while (\true) { 

    // Execute a Scroll request 
    $response = $client->scroll([ 
      "scroll_id" => $scroll_id, //...using our previously obtained _scroll_id 
      "scroll" => "30s"   // and the same timeout window 
     ] 
    ); 

    // Check to see if we got any search hits from the scroll 
    if (count($response['hits']['hits']) > 0) { 
     // If yes, Do Work Here 

     // Get new scroll_id 
     // Must always refresh your _scroll_id! It can change sometimes 
     $scroll_id = $response['_scroll_id']; 
    } else { 
     // No results, scroll cursor is empty. You've exported all the data 
     break; 
    } 
} 

Первый $client->search($params) API вызов не выполняется нормально и я могу вернуть идентификатор прокрутки. Но $client->scroll() API не удается, и я получаю исключение: «Elasticsearch \ Common \ Исключения \ NoNodesAvailableException нет живых узлов найдено в кластере»

Я использую Elasticsearch 1.7.1 и PHP 5.6.11

Пожалуйста help

+0

Вы когда-нибудь получали ответ, у меня есть узел на локальном хосте, который не может быть найден, и это довольно раздражает. –

+0

@MrkFldig Нет ответа еще – ajaybc

+0

Держись Я нашел что-то, что вы можете попробовать ... –

ответ

2

Я бы предположил, что пример не соответствует текущей версии (ссылка, которую вы предоставили, равна 2,0, а вы используете 1.7.1). Просто добавьте внутри цикла:

try { 
     $response = $client->scroll([ 
      "scroll_id" => $scroll_id, //...using our previously obtained _scroll_id 
      "scroll" => "30s"   // and the same timeout window 
     ] 
    ); 
}catch (Elasticsearch\Common\Exceptions\NoNodesAvailableException $e) { 
    break; 
} 
+0

Спасибо за это, это позволило мне поймать исключение! –

0

раскомментировать в elasticsearch.yml:

network.host:198.... 

И устанавливается:

127.0.0.1 

Как это:

# Set the bind address to a specific IP (IPv4 or IPv6): 
# 
network.host: 127.0.0.1 
# 
# Set a custom port for HTTP: 
# 
# http.port: 9200 
# 

Я использую Elasticsearch 2.2 в Magento 2 под контейнером LXC.

1

Я бы рекомендовал использовать php curl lib непосредственно для запросов elasticsearch. Мне кажется, что это проще в использовании, чем любой другой клиентский ресурс elasticsearch, вы можете имитировать любой запрос, используя cli curl, и вы можете найти множество примеров, документации и обсуждений в Интернете.

0

У меня была такая же проблема с свитка и она работает с определенными индексами, но не с другими. Вероятно, это была ошибка в драйвере, когда он ушел после того, как я обновил пакет elasticsearch/elasticsearch с 2.1.3 до 2.2.0

1

перезапустить службу поиска эластичных объектов и установить сетевой узел локальным «127.0.0.1 ».

2

Я нашел драйвер PHP для elasticsearch пронизана вопросов, решение у меня было просто реализовать RESTful API с загнутым через PHP, все работало гораздо быстрее и отладка была намного проще

1

Может быть, вы должны попробовать telnet на вашем компьютере telnet [your_es_host] [your_es_ip] , чтобы проверить, можете ли вы к нему получить доступ.

Если нет, попробуйте открыть этот порт или отключить брандмауэр вашей машины.

1

Эта ошибка в основном означает, что она не может найти ваш кластер, вероятно, из-за неправильной конфигурации на стороне клиента или на стороне сервера.

0

Если вы установили Elasticsearch сервер в докер как документ, https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

Но он использует другую сеть (сети: - ESnet) от других услуг и не может говорить с сетью приложений. После удаления настроек сети она работает хорошо.

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

  • Нет связанных вопросов^_^