| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- <?php
- namespace Webkul\Core;
- use Elastic\Elasticsearch\Client;
- use Elastic\Elasticsearch\ClientBuilder;
- use Illuminate\Support\Arr;
- class ElasticSearch
- {
- /**
- * Map configuration array keys with ES ClientBuilder setters
- *
- * @var array
- */
- protected $configMappings = [
- 'retries' => 'setRetries',
- 'caBundle' => 'setCABundle',
- ];
- /**
- * Make a new connection.
- */
- protected function makeConnection(?string $name = null): Client
- {
- $connection = $name ?: $this->getDefaultConnection();
- $config = $this->getConnectionConfig($connection);
- $clientBuilder = ClientBuilder::create();
- if ($connection == 'default') {
- /**
- * Build default connection.
- */
- $clientBuilder->setHosts($config['hosts'])
- ->setBasicAuthentication($config['user'] ?: '', $config['pass'] ?: '');
- } elseif ($connection == 'api') {
- /**
- * Build API key connection.
- */
- $clientBuilder->setHosts($config['hosts'])
- ->setApiKey($config['key']);
- } elseif ($connection == 'cloud') {
- /**
- * Build elastic cloud connection.
- */
- $clientBuilder->setElasticCloudId($config['id']);
- if ($config['api_key']) {
- $clientBuilder->setApiKey($config['api_key']);
- } else {
- $clientBuilder->setBasicAuthentication($config['user'], $config['pass']);
- }
- }
- /**
- * Set additional client configuration.
- */
- foreach ($this->configMappings as $key => $method) {
- $value = Arr::get(config('elasticsearch'), $key);
- if (! is_null($value)) {
- $clientBuilder->$method($value);
- }
- }
- return $clientBuilder->build();
- }
- /**
- * Get the default connection.
- */
- public function getDefaultConnection(): string
- {
- return config('elasticsearch.connection');
- }
- /**
- * Get the configuration for a named connection.
- *
- * @return mixed
- *
- * @throws \InvalidArgumentException
- */
- protected function getConnectionConfig(string $name)
- {
- $connections = config('elasticsearch.connections');
- if (null === $config = Arr::get($connections, $name)) {
- throw new \InvalidArgumentException("Elasticsearch connection [$name] not configured.");
- }
- return $config;
- }
- /**
- * Dynamically pass methods to the default connection.
- *
- * @return mixed
- */
- public function __call(string $method, array $parameters)
- {
- return call_user_func_array([$this->makeConnection(), $method], $parameters);
- }
- }
|