2022-06-21
2022-06-22 本文已影响0人
一位先生_
<?php
namespace App\Http\Controllers\Api\Common;
use Elasticsearch\ClientBuilder;
class ElasticConnect {
/**
* ES的ip
*
* @var string
*/
const ESHOSTNAME =
[
'host' => '81.69.33.124', // 域名
'port' => '9200', // 端口
'scheme' => 'http', // 协议
'user' => 'elastic', // 账号
'pass' => 'my2022#@!' // 密码
];
/**
* ES的port
*
* @var int
*/
const ESPORT = 9200;
/**
* ES的索引name
*
* @var int
*/
const ESINDEXNAME = 'my_index';
/**
* 类单例
*
* @var object
*/
private static $instance;
/**
* Es的连接句柄
*
* @var object
*/
private $elastic;
/**
* 私有化构造函数,防止类外实例化
*
* @param
*/
private function __construct ()
{
$this->elastic = ClientBuilder::create()->setHosts([self::ESHOSTNAME])->build();
}
/**
* 私有化克隆函数,防止类外克隆对象
*/
private function __clone ()
{}
/**
* 类的唯一公开静态方法,获取类单例的唯一入口
*
* @return object
*/
public static function getEslasticInstance ()
{
if (! (self::$instance instanceof self)) {
self::$instance = new self();
}
return self::$instance;
}
/**
* 获取Es的连接实例
*
* @return
*/
public function getEsConn ()
{
return $this->elastic;
}
/**
* 需要在单例切换的时候做清理工作
*/
public function __destruct ()
{
self::$instance->elastic->close();
self::$instance = NULL;
}
}