timeout和connect_timeout参数

<?php

require 'vendor/autoload.php';

use Elasticsearch\ClientBuilder;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// 主机
$hosts = [
    // 第一个节点配置
    [
        'host' => 'localhost', // 必填项
        'port' => 9200, // 不设置,默认9200,
        'scheme' => 'http', // 不设置, 默认http
        'user' => 'elastic',
        'pass' => '123456'
    ],
    [
        'host' => '192.169.1.103', // 必填项
        'port' => 9300, // 不设置,默认9200,
        'scheme' => 'http', // 不设置, 默认http
        'user' => 'elastic',
        'pass' => '123456'
    ],
    // .... 其他节点配置
];

// 日志
$logger = new Logger('name');
$logger->pushHandler(new StreamHandler('error.log', Logger::WARNING));

// HTTP处理器
// 默认HTTP处理器是一个组合型处理器,同步模式,执行单个curl请求,异步模式切换到执行多个curl请求
$defaultHandler = ClientBuilder::defaultHandler();
// 单个处理器
$singleHandler = ClientBuilder::singleHandler();
// 多个处理器
$multiHandler = ClientBuilder::multiHandler();

// 连接池, 连接池中的每个连接代表集群中的一个节点
$connectionPool = '\Elasticsearch\ConnectionPool\StaticNoPingConnectionPool';

// 连接选择器, 连接池用于管理与集群的连接,而连接选择器则是用来决定你的API请求要使用连接池中哪个连接
$selector = '\Elasticsearch\ConnectionPool\Selectors\StickyRoundRobinSelector';

// 序列化器,将PHP对象序列化为JSON, 同时还可以将JSON反序列化为数组
$serializer = '\Elasticsearch\Serializers\SmartSerializer';

// 实例化 ClientBuilder
$client = ClientBuilder::create()
// 设置主机信息
->setHosts($hosts)
// 设置重试次数,默认情况下,会重试n次,n等于集群的节点数,只有操作结果发生了严重的异常才会触发重试
// 如连接被拒绝、连接超时、DNS超时等等。4**和5**系列不被认为是可重试事件,因为节点已经返回来操作响应
->setRetries(2)
// 设置日志
->setLogger($logger)
// 设置HTTP Handler
->setHandler($defaultHandler)
// 设置连接池
->setConnectionPool($connectionPool)
// 设置连接选择器
->setSelector($selector)
// 设置序列化器
->setSerializer($serializer)


// 构建客户端对象
->build();

$params = [
    'index' => 'test',
    'client' => [
        // 自定义查询参数
        'custom' => [
            'customToken' => 'abc'
        ],
        // 获取详细响应信息, 调试时可开启
        // 'verbose' => true,
        // timeout 控制整个请求完成前最多需要等待多长时间,如果超过请求时间,curl将会关闭连接返回一个错误,单位:秒
        'timeout' => 60,
        // connect_timeout 控制连接完成前的curl等待时间,单位:秒
        'connect_timeout' => 60
    ]
];

try {
    // get 查询
    $response = $client->indices()->get($params);


    if (is_array($response)) {
        echo json_encode($response);
    } else {
        echo $response;
    }

} catch (\Exception $e) {
    print_r($e->getMessage());
}