Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/Configuration/IndexConfigInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
* mapping: TMapping,
* model: mixed,
* index_patterns?: list<non-empty-string>,
* priority?: int,
* }
* @phpstan-type TElasticConfig = array{
* date_detection?: bool,
Expand Down
14 changes: 14 additions & 0 deletions src/Configuration/IndexTemplateConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ class IndexTemplateConfig implements IndexConfigInterface
*/
private array $indexPatterns;

/**
* The priority of the index template.
*/
private int $priority;

/**
* Constructor expects an array as generated by the Container Configuration builder.
*
Expand All @@ -43,6 +48,7 @@ public function __construct(array $config)
$this->settings = $config['settings'] ?? [];
$this->config = $config['config'];
$this->mapping = $config['mapping'];
$this->priority = $config['priority'];

if (!isset($config['index_patterns']) || !\is_array($config['index_patterns']) || \count($config['index_patterns']) < 1) {
throw new \InvalidArgumentException('Index patterns value(s) must be set');
Expand All @@ -60,4 +66,12 @@ public function getIndexPatterns(): array
{
return $this->indexPatterns;
}

/**
* Gets index template priority.
*/
public function getPriority(): int
{
return $this->priority;
}
}
1 change: 1 addition & 0 deletions src/DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,7 @@ private function addIndexTemplatesSection(ArrayNodeDefinition $rootNode): void
->prototype('scalar')
->end()
->end()
->integerNode('priority')->defaultValue(0)->end()
->scalarNode('client')->end()
->variableNode('settings')->defaultValue([])->end()
->booleanNode('date_detection')->end()
Expand Down
1 change: 1 addition & 0 deletions src/DependencyInjection/FOSElasticaExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,7 @@ private function loadIndexTemplates(array $indexTemplates, ContainerBuilder $con
'name' => $name,
'settings' => $indexTemplate['settings'],
'index_patterns' => $indexTemplate['index_patterns'],
'priority' => $indexTemplate['priority'],
];

$this->loadIndexConfig((array) $indexTemplate, $this->indexTemplateConfigs[$name]);
Expand Down
4 changes: 3 additions & 1 deletion src/Index/MappingBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public function buildIndexMapping(IndexConfigInterface $indexConfig): array
/**
* Builds mappings for an entire index template.
*
* @return array{index_patterns: list<non-empty-string>, mappings?: TMapping, settings?: TSettings, template?: array{mappings?: TMapping, settings?: TSettings}}
* @return array{index_patterns: list<non-empty-string>, mappings?: TMapping, settings?: TSettings, template?: array{mappings?: TMapping, settings?: TSettings}, priority: int}
*/
public function buildIndexTemplateMapping(IndexTemplateConfig $indexTemplateConfig): array
{
Expand All @@ -74,6 +74,8 @@ public function buildIndexTemplateMapping(IndexTemplateConfig $indexTemplateConf
if ($template) {
$mapping['template'] = $template;
}

$mapping['priority'] = $indexTemplateConfig->getPriority();
}

$mapping['index_patterns'] = $indexTemplateConfig->getIndexPatterns();
Expand Down
3 changes: 3 additions & 0 deletions tests/Unit/Configuration/IndexTemplateConfigTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public function testInstantiate(): void
'index_patterns' => ['t*'],
'config' => [],
'mapping' => [],
'priority' => 0,
];
$indexTemplate = new IndexTemplateConfig($config);
$this->assertEquals($name, $indexTemplate->getName());
Expand All @@ -39,6 +40,7 @@ public function testInstantiate(): void
'name' => $indexTemplate->getName(),
'settings' => $indexTemplate->getSettings(),
'index_patterns' => $indexTemplate->getIndexPatterns(),
'priority' => $indexTemplate->getPriority(),
'config' => [],
'mapping' => [],
]
Expand All @@ -53,6 +55,7 @@ public function testIncorrectInstantiate(): void
'settings' => [1],
'config' => [],
'mapping' => [],
'priority' => 0,
];

$this->expectException(\InvalidArgumentException::class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ public function testGetConfiguration(): void
'some_setting' => 'setting_value',
],
'index_patterns' => ['some_index_config_*'],
'priority' => 0,
],
]
);
Expand Down
11 changes: 8 additions & 3 deletions tests/Unit/Index/MappingBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,21 @@ public function testMappingBuilderStoreProperty(): void

public function testBuildIndexTemplateMapping(): void
{
$config = new IndexTemplateConfig(
['index_patterns' => ['index_template_*'], 'name' => 'some_template', 'config' => [], 'mapping' => $this->indexConfig->getMapping()]
);
$config = new IndexTemplateConfig([
'index_patterns' => ['index_template_*'],
'name' => 'some_template',
'config' => [],
'mapping' => $this->indexConfig->getMapping(),
'priority' => 0,
]);

$expected = ElasticsearchVersionDetector::usesNewIndexTemplateApi()
? [
'template' => [
'mappings' => $this->indexConfig->getMapping(),
],
'index_patterns' => ['index_template_*'],
'priority' => 0,
]
: [
'index_patterns' => ['index_template_*'],
Expand Down
Loading