diff --git a/src/Configuration/IndexConfigInterface.php b/src/Configuration/IndexConfigInterface.php index f34db9284..d16b17da1 100644 --- a/src/Configuration/IndexConfigInterface.php +++ b/src/Configuration/IndexConfigInterface.php @@ -31,6 +31,7 @@ * mapping: TMapping, * model: mixed, * index_patterns?: list, + * priority?: int, * } * @phpstan-type TElasticConfig = array{ * date_detection?: bool, diff --git a/src/Configuration/IndexTemplateConfig.php b/src/Configuration/IndexTemplateConfig.php index 89a6f513c..b55a0af24 100644 --- a/src/Configuration/IndexTemplateConfig.php +++ b/src/Configuration/IndexTemplateConfig.php @@ -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. * @@ -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'); @@ -60,4 +66,12 @@ public function getIndexPatterns(): array { return $this->indexPatterns; } + + /** + * Gets index template priority. + */ + public function getPriority(): int + { + return $this->priority; + } } diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 52e97ac97..f9c3cf1ad 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -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() diff --git a/src/DependencyInjection/FOSElasticaExtension.php b/src/DependencyInjection/FOSElasticaExtension.php index 5446640df..cf5ea7129 100644 --- a/src/DependencyInjection/FOSElasticaExtension.php +++ b/src/DependencyInjection/FOSElasticaExtension.php @@ -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]); diff --git a/src/Index/MappingBuilder.php b/src/Index/MappingBuilder.php index a7a8d6b5a..e46e6e177 100644 --- a/src/Index/MappingBuilder.php +++ b/src/Index/MappingBuilder.php @@ -55,7 +55,7 @@ public function buildIndexMapping(IndexConfigInterface $indexConfig): array /** * Builds mappings for an entire index template. * - * @return array{index_patterns: list, mappings?: TMapping, settings?: TSettings, template?: array{mappings?: TMapping, settings?: TSettings}} + * @return array{index_patterns: list, mappings?: TMapping, settings?: TSettings, template?: array{mappings?: TMapping, settings?: TSettings}, priority: int} */ public function buildIndexTemplateMapping(IndexTemplateConfig $indexTemplateConfig): array { @@ -74,6 +74,8 @@ public function buildIndexTemplateMapping(IndexTemplateConfig $indexTemplateConf if ($template) { $mapping['template'] = $template; } + + $mapping['priority'] = $indexTemplateConfig->getPriority(); } $mapping['index_patterns'] = $indexTemplateConfig->getIndexPatterns(); diff --git a/tests/Unit/Configuration/IndexTemplateConfigTest.php b/tests/Unit/Configuration/IndexTemplateConfigTest.php index 488f9653a..4bd4a0d2c 100644 --- a/tests/Unit/Configuration/IndexTemplateConfigTest.php +++ b/tests/Unit/Configuration/IndexTemplateConfigTest.php @@ -29,6 +29,7 @@ public function testInstantiate(): void 'index_patterns' => ['t*'], 'config' => [], 'mapping' => [], + 'priority' => 0, ]; $indexTemplate = new IndexTemplateConfig($config); $this->assertEquals($name, $indexTemplate->getName()); @@ -39,6 +40,7 @@ public function testInstantiate(): void 'name' => $indexTemplate->getName(), 'settings' => $indexTemplate->getSettings(), 'index_patterns' => $indexTemplate->getIndexPatterns(), + 'priority' => $indexTemplate->getPriority(), 'config' => [], 'mapping' => [], ] @@ -53,6 +55,7 @@ public function testIncorrectInstantiate(): void 'settings' => [1], 'config' => [], 'mapping' => [], + 'priority' => 0, ]; $this->expectException(\InvalidArgumentException::class); diff --git a/tests/Unit/Configuration/Source/TemplateContainerSourceTest.php b/tests/Unit/Configuration/Source/TemplateContainerSourceTest.php index 88bb96d87..ae7dbfc9a 100644 --- a/tests/Unit/Configuration/Source/TemplateContainerSourceTest.php +++ b/tests/Unit/Configuration/Source/TemplateContainerSourceTest.php @@ -46,6 +46,7 @@ public function testGetConfiguration(): void 'some_setting' => 'setting_value', ], 'index_patterns' => ['some_index_config_*'], + 'priority' => 0, ], ] ); diff --git a/tests/Unit/Index/MappingBuilderTest.php b/tests/Unit/Index/MappingBuilderTest.php index 2b3505b33..f13b6bdbd 100644 --- a/tests/Unit/Index/MappingBuilderTest.php +++ b/tests/Unit/Index/MappingBuilderTest.php @@ -69,9 +69,13 @@ 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() ? [ @@ -79,6 +83,7 @@ public function testBuildIndexTemplateMapping(): void 'mappings' => $this->indexConfig->getMapping(), ], 'index_patterns' => ['index_template_*'], + 'priority' => 0, ] : [ 'index_patterns' => ['index_template_*'],