%PDF- %PDF-
| Direktori : /home/graphicd/www/vebto/vendor/matchish/laravel-scout-elasticsearch/src/ElasticSearch/ |
| Current File : /home/graphicd/www/vebto/vendor/matchish/laravel-scout-elasticsearch/src/ElasticSearch/Index.php |
<?php
namespace Matchish\ScoutElasticSearch\ElasticSearch;
use Matchish\ScoutElasticSearch\Searchable\ImportSource;
/**
* @internal
*/
final class Index
{
/**
* @var array
*/
private $aliases = [];
/**
* @var string
*/
private $name;
/**
* @var array|null
*/
private $settings;
/**
* @var array|null
*/
private $mappings;
/**
* Index constructor.
* @param string $name
* @param array $settings
* @param array $mappings
*/
public function __construct(string $name, array $settings = null, array $mappings = null)
{
$this->name = $name;
$this->settings = $settings;
$this->mappings = $mappings;
}
/**
* @return array
*/
public function aliases(): array
{
return $this->aliases;
}
/**
* @return string
*/
public function name(): string
{
return $this->name;
}
/**
* @param Alias $alias
*/
public function addAlias(Alias $alias): void
{
$this->aliases[$alias->name()] = $alias->config() ?: new \stdClass();
}
/**
* @return array
*/
public function config(): array
{
$config = [];
if (! empty($this->settings)) {
$config['settings'] = $this->settings;
}
if (! empty($this->mappings)) {
$config['mappings'] = $this->mappings;
}
if (! empty($this->aliases())) {
$config['aliases'] = $this->aliases();
}
return $config;
}
public static function fromSource(ImportSource $source): Index
{
$name = $source->searchableAs().'_'.time();
$settingsConfigKey = "elasticsearch.indices.settings.{$source->searchableAs()}";
$mappingsConfigKey = "elasticsearch.indices.mappings.{$source->searchableAs()}";
$defaultSettings = [
'number_of_shards' => 1,
'number_of_replicas' => 0,
];
$settings = config($settingsConfigKey, config('elasticsearch.indices.settings.default', $defaultSettings));
$mappings = config($mappingsConfigKey, config('elasticsearch.indices.mappings.default'));
return new static($name, $settings, $mappings);
}
}