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;
}
}
Первый вызов API $client->search($params)
выполняется отлично, и я могу вернуть идентификатор прокрутки. Но $client->scroll()
API терпит неудачу, и я получаю исключение: "Elasticsearch\Common\Exceptions\NoNodesAvailableException В списке нет живых узлов
Я использую Elasticsearch 1.7.1 и PHP 5.6.11
Пожалуйста, помогите
Ответы
Ответ 1
Я бы предположил, что этот пример не соответствует текущей версии (ссылка, которую вы предоставили, равна 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;
}
Ответ 2
Я обнаружил, что драйвер php для elasticsearch пронизан проблемами, решение, которое я имел, это просто реализовать RESTful API с curl через php, все работало намного быстрее, и отладка была намного проще
Ответ 3
Раскомментировать в 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.
Ответ 4
Я бы рекомендовал использовать php curl lib непосредственно для запросов elasticsearch.
Мне кажется, что это проще в использовании, чем любой другой клиентский ресурс elasticsearch, вы можете имитировать любой запрос, используя cli curl, и вы можете найти множество примеров, документации и обсуждений в Интернете.
Ответ 5
Проверьте, работает ли ваш сервер с помощью следующей команды.
service elasticsearch status
У меня была та же проблема и она была решена.
Я добавил script.disable_dynamic: true
в elasticsearch.yml, как описано в уроке Digitalocan https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-14-04
Итак, сервер elasticsearch не был запущен.
Я удалил следующую строку из elasticsearch.yml
script.disable_dynamic: true
Ответ 6
У меня была такая же проблема со свитком, и она работала с определенными индексами, но не с другими. Должно быть, это была ошибка в драйвере, поскольку он ушел после того, как я обновил пакет elasticsearch/elasticsearch с 2.1.3 до 2.2.0
Ответ 7
перезапустите службу поиска эластичных изображений и установите сетевой узел локальным "127.0.0.1".
Ответ 8
Возможно, вам стоит попробовать подключиться к telnet на своем компьютере
telnet [your_es_host] [your_es_ip]
чтобы проверить, можете ли вы получить к нему доступ.
Если нет, попробуйте открыть этот порт или отключить брандмауэр вашего компьютера.
Ответ 9
Эта ошибка в основном означает, что она не может найти ваш кластер, вероятно, из-за неправильной конфигурации на стороне клиента или на стороне сервера.
Ответ 10
Я устанавливаю сервер Elasticsearch в docker как документ, https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
Но он использует другую сеть (сети: - esnet) и не может разговаривать с сетью приложений. После удаления настроек сети и работает хорошо.
Ответ 11
Если вы установите сервер Elasticsearch в docker в качестве документа, https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
Но он использует другую сеть (сети: - esnet) от других служб и не может разговаривать с сетью приложений. После удаления настроек сети и работает хорошо.