Elasticsearch PHP客户端抛出异常"群集中找不到活动节点"

aja*_*ybc 28 php elasticsearch php-5.6

我正在尝试对索引执行扫描和滚动操作,如示例所示:

$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;
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个$client->search($params)API调用执行正常,我可以返回滚动ID.但$client->scroll()API失败,我得到异常:"Elasticsearch\Common\Exceptions\NoNodesAvailableException在您的群集中找不到活动节点"

我使用的是Elasticsearch 1.7.1和PHP 5.6.11

请帮忙

Grz*_*orz 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;
}
Run Code Online (Sandbox Code Playgroud)