安装命令

Docker

docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch elasticsearch:6.5.1
参数解释
9300Web端口
9200服务端口

PHP 使用

安装

composer require elasticsearch/elasticsearch

客户端实例

// 获取客户端构建实例
$clientBuilder = ClientBuilder::create();
// 获取客户端实例
$client = $clientBuilder->build();

主机配置

第一种:

$hosts = [
    '192.168.1.1:9200',         // IP + 端口
    '192.168.1.2',              // 仅 IP
    'mydomain.server.com:9201', // 域名 + 端口
    'mydomain2.server.com',     // 仅域名
    'https://localhost',        // 对 localhost 使用 SSL
    'https://192.168.1.3:9200'  // 对 IP + 端口 使用 SSL 
];

第二种:

$hosts = [
    // 等价于内联主机配置中使用 "https://username:password!#$?*abc@foo.com:9200/"
    [
        'host' => 'foo.com',
        'port' => '9200',
        'scheme' => 'https',
        'user' => 'username',
        'pass' => 'password!#$?*abc'
    ],

    // 等价于内联主机配置中使用 "http://localhost:9200/"
    [
        'host' => 'localhost',    // 只有 host 是必须的
    ]
];

应用设置 setHosts()

$clientBuilder->setHosts($hosts);

重试连接次数设定

$clientBuilder->setRetries($hosts);

异常

异常
Elasticsearch\Common\Exceptions\Curl\CouldNotConnectToHost
CouldNotResolveHostException
OperationTimeoutException
TransportException

日志

$logger = ClientBuilder::defaultLogger('path/to/your.log', Logger::INFO);

$client = ClientBuilder::create()       // 实例化一个 ClientBuilder
            ->setLogger($logger)        // 用默认 logger 设置 logger
            ->build();                  // 构建客户端对象

该扩展包默认使用 monolog 作为日志服务,我们也可以构建自己的日志服务:

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$logger = new Logger('name');
$logger->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

$client = ClientBuilder::create()       // 实例化一个 ClientBuilder
            ->setLogger($logger)        // 用默认 logger 设置 logger
            ->build();                  // 构建客户端对象

HTTP请求器

// 默认
$defaultHandler = ClientBuilder::defaultHandler();
// 同步,单条
$singleHandler  = ClientBuilder::singleHandler();
// 异步,多条
$multiHandler   = ClientBuilder::multiHandler();
// 可以自己定义,比如说结合 swoole 的 http客户端协程
$customHandler  = new MyCustomHandler();

$client = ClientBuilder::create()
            ->setHandler($defaultHandler)
            ->build();

大部分情况都使用默认,因为包含了同步和异步的处理。

读取配置创建客户端

$params = [
    'hosts' => [
        'localhost:9200'
    ],
    'retries' => 2,
    'handler' => ClientBuilder::singleHandler()
];
$client = ClientBuilder::fromConfig($params);

数组的键名对应方法名,例如: retries 键对应 setRetries() 方法。