Подтвердить что ты не робот

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

Пожалуйста, помогите

4b9b3361

Ответ 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) от других служб и не может разговаривать с сетью приложений. После удаления настроек сети и работает хорошо.