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
50 changes: 0 additions & 50 deletions config/pimcore/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,56 +17,6 @@ pimcore_generic_data_index:
type: text
analyzer: standard
search_analyzer: generic_data_index_whitespace_analyzer

index_settings:
index:
mapping:
nested_fields:
limit: 200
total_fields:
limit: 100000
number_of_shards: 1
number_of_replicas: 0
max_ngram_diff: 30
max_result_window: 10000
analysis:
analyzer:
generic_data_index_ngram_analyzer:
tokenizer: generic_data_index_ngram_tokenzier
filter:
- lowercase
generic_data_index_whitespace_analyzer:
tokenizer: generic_data_index_whitespace_tokenzier
filter:
- lowercase
generic_data_index_path_analyzer:
tokenizer: generic_data_index_path_tokenizer
normalizer:
generic_data_index_sort_normalizer:
type: custom
filter:
- lowercase
generic_data_index_sort_truncate_normalizer:
type: custom
char_filter:
- generic_data_index_sort_truncate
filter:
- lowercase
tokenizer:
generic_data_index_ngram_tokenzier:
type: ngram
min_gram: 3
max_gram: 25
token_chars: [ letter, digit ]
generic_data_index_whitespace_tokenzier:
type: whitespace
generic_data_index_path_tokenizer:
type: "path_hierarchy"
char_filter:
generic_data_index_sort_truncate:
type: pattern_replace
pattern: ^(.{256})(.*)$
replacement: $1
system_fields_settings:
general:
id:
Expand Down
48 changes: 48 additions & 0 deletions config/pimcore/default_index_settings.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
index:
mapping:
nested_fields:
limit: 200
total_fields:
limit: 100000
number_of_shards: 1
number_of_replicas: 0
max_ngram_diff: 30
max_result_window: 10000
analysis:
analyzer:
generic_data_index_ngram_analyzer:
tokenizer: generic_data_index_ngram_tokenzier
filter:
- lowercase
generic_data_index_whitespace_analyzer:
tokenizer: generic_data_index_whitespace_tokenzier
filter:
- lowercase
generic_data_index_path_analyzer:
tokenizer: generic_data_index_path_tokenizer
normalizer:
generic_data_index_sort_normalizer:
type: custom
filter:
- lowercase
generic_data_index_sort_truncate_normalizer:
type: custom
char_filter:
- generic_data_index_sort_truncate
filter:
- lowercase
tokenizer:
generic_data_index_ngram_tokenzier:
type: ngram
min_gram: 3
max_gram: 25
token_chars: [ letter, digit ]
generic_data_index_whitespace_tokenzier:
type: whitespace
generic_data_index_path_tokenizer:
type: "path_hierarchy"
char_filter:
generic_data_index_sort_truncate:
type: pattern_replace
pattern: ^(.{256})(.*)$
replacement: $1
45 changes: 38 additions & 7 deletions src/DependencyInjection/PimcoreGenericDataIndexExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,19 +71,14 @@ public function prepend(ContainerBuilder $container): void
$loader->load('doctrine_migrations.yaml');
}

$filename = __DIR__ . '/../../config/doctrine.yaml';

try {
$config = Yaml::parseFile($filename);
} catch (ParseException $e) {
throw new InvalidArgumentException(sprintf('The file "%s" does not contain valid YAML.', $filename), 0, $e);
}
$config = $this->getParsedConfig(__DIR__ . '/../../config/doctrine.yaml');

$container->prependExtensionConfig('doctrine', $config['doctrine']);
}

private function registerIndexServiceParams(ContainerBuilder $container, array $indexSettings): void
{
$indexSettings['index_settings'] = $this->getIndexSettings($indexSettings['index_settings']);
$definition = $container->getDefinition(SearchIndexConfigServiceInterface::class);
$definition->setArgument('$clientType', $indexSettings['client_params']['client_type']);
$definition->setArgument('$indexPrefix', $indexSettings['client_params']['index_prefix']);
Expand All @@ -109,6 +104,42 @@ private function registerIndexServiceParams(ContainerBuilder $container, array $
$definition->setArgument('$queueSettings', $indexSettings['queue_settings']);
}

private function getIndexSettings(array $indexSettings): array
{
$defaultIndexSettings = $this->getParsedConfig(
__DIR__ . '/../../config/pimcore/default_index_settings.yaml'
);

return $this->mergeConfig($defaultIndexSettings, $indexSettings);
}

private function mergeConfig(array $default, array $custom): array
{
foreach ($custom as $key => $value) {
$default[$key] = is_array($value) && isset($default[$key]) && is_array($default[$key])
? $this->mergeConfig($default[$key], $value)
: $value;
}

return $default;
}

/**
* @throws InvalidArgumentException
*/
private function getParsedConfig(string $fileLocation): array
{
try {
return Yaml::parseFile($fileLocation);
} catch (ParseException $e) {
throw new InvalidArgumentException(
sprintf('The file "%s" does not contain valid YAML.', $fileLocation),
0,
$e
);
}
}

/**
* @throws InvalidArgumentException
*/
Expand Down