Skip to content

Commit cf7d16c

Browse files
author
Mantas Marcinkevicius
committed
implemented gathering documents from multiple sources
1 parent 23acabc commit cf7d16c

File tree

5 files changed

+51
-27
lines changed

5 files changed

+51
-27
lines changed

DependencyInjection/Compiler/MappingPass.php

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,44 @@
2323

2424
class MappingPass implements CompilerPassInterface
2525
{
26+
/**
27+
* @var array
28+
*/
29+
private $indexes = [];
30+
31+
/**
32+
* @var string
33+
*/
34+
private $defaultIndex = null;
35+
2636
public function process(ContainerBuilder $container)
37+
{
38+
$kernelDir = $container->getParameter('kernel.project_dir');
39+
40+
foreach ($container->getParameter(Configuration::ONGR_SOURCE_DIR) as $dir) {
41+
$this->handleDirectoryMapping($container, $kernelDir . $dir);
42+
}
43+
44+
$container->setParameter(Configuration::ONGR_INDEXES, $this->indexes);
45+
$container->setParameter(
46+
Configuration::ONGR_DEFAULT_INDEX,
47+
$this->defaultIndex ?? current(array_keys($this->indexes))
48+
);
49+
}
50+
51+
/**
52+
* @param ContainerBuilder $container
53+
* @param string $dir
54+
*
55+
* @throws \ReflectionException
56+
*/
57+
private function handleDirectoryMapping(ContainerBuilder $container, string $dir): void
2758
{
2859
/** @var DocumentParser $parser */
2960
$parser = $container->get(DocumentParser::class);
30-
$indexes = [];
31-
$defaultIndex = null;
3261
$indexesOverride = $container->getParameter(Configuration::ONGR_INDEXES_OVERRIDE);
3362

34-
foreach ($this->getNamespaces(
35-
$container->getParameter('kernel.project_dir')
36-
.$container->getParameter(Configuration::ONGR_SOURCE_DIR)
37-
) as $namespace) {
63+
foreach ($this->getNamespaces($dir) as $namespace) {
3864
$class = new \ReflectionClass($namespace);
3965
/** @var Index $document */
4066
$document = $parser->getIndexAnnotation($class);
@@ -46,8 +72,8 @@ public function process(ContainerBuilder $container)
4672
$indexMetadata['settings'] = array_filter(array_merge_recursive(
4773
$indexMetadata['settings'] ?? [],
4874
[
49-
'number_of_replicas' =>$document->numberOfReplicas,
50-
'number_of_shards' =>$document->numberOfShards,
75+
'number_of_replicas' => $document->numberOfReplicas,
76+
'number_of_shards' => $document->numberOfShards,
5177
],
5278
$indexesOverride[$namespace]['settings'] ?? []
5379
));
@@ -77,28 +103,23 @@ public function process(ContainerBuilder $container)
77103
$indexServiceDefinition->setPublic(true);
78104

79105
$container->setDefinition($namespace, $indexServiceDefinition);
80-
$indexes[$indexAlias] = $namespace;
106+
$this->indexes[$indexAlias] = $namespace;
81107
$isCurrentIndexDefault = $parser->isDefaultIndex($class);
82-
if ($defaultIndex && $isCurrentIndexDefault) {
108+
if ($this->defaultIndex && $isCurrentIndexDefault) {
83109
throw new \RuntimeException(
84110
sprintf(
85111
'Only one index can be set as default. We found 2 indexes as default ones `%s` and `%s`',
86-
$defaultIndex,
112+
$this->defaultIndex,
87113
$indexAlias
88114
)
89115
);
90116
}
91117

92118
if ($isCurrentIndexDefault) {
93-
$defaultIndex = $indexAlias;
119+
$this->defaultIndex = $indexAlias;
94120
}
95121
}
96122
}
97-
98-
$container->setParameter(Configuration::ONGR_INDEXES, $indexes);
99-
100-
$defaultIndex = $defaultIndex ?? current(array_keys($indexes));
101-
$container->setParameter(Configuration::ONGR_DEFAULT_INDEX, $defaultIndex);
102123
}
103124

104125
private function getNamespaces($directory): array

DependencyInjection/Configuration.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,12 @@ public function getConfigTreeBuilder()
5757
)
5858
->end()
5959

60-
->scalarNode('source_directory')
61-
->defaultValue('/src')
60+
->arrayNode('source_directories')
61+
->prototype('scalar')->end()
62+
->defaultValue(['/src'])
6263
->info(
63-
'If your project has different than `/src` source directory, you can specify it here '.
64-
'to look automatically for ES documents.'
64+
'If your project has different than `/src` source directory, or several of them,' .
65+
'you can specify them here to look automatically for ES documents.'
6566
)
6667
->end()
6768

DependencyInjection/ONGRElasticsearchExtension.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,6 @@ public function load(array $configs, ContainerBuilder $container)
4545

4646
$container->setParameter(Configuration::ONGR_INDEXES_OVERRIDE, $config['indexes']);
4747
$container->setParameter(Configuration::ONGR_ANALYSIS_CONFIG, $config['analysis']);
48-
$container->setParameter(Configuration::ONGR_SOURCE_DIR, $config['source_directory']);
48+
$container->setParameter(Configuration::ONGR_SOURCE_DIR, $config['source_directories']);
4949
}
5050
}

Resources/doc/configuration.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ ongr_elasticsearch:
2020
type: edge_ngram
2121
min_gram: 1
2222
max_gram: 20
23-
source_directory: /src/AppBundle
23+
source_directories:
24+
- /src/AppBundle
2425
logger: false
2526
profiler: true
2627
cache: true
@@ -33,4 +34,4 @@ ongr_elasticsearch:
3334
number_of_replicas: 2
3435
number_of_shards: 3
3536
type: page # for 5.x ES compatibility
36-
```
37+
```

Tests/app/config/config_test.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ framework:
44
test: ~
55

66
ongr_elasticsearch:
7-
source_directory: /Tests/app/src #This parameters is when you have custom project source root, in this case tests has their own kernel and source directory.
7+
source_directories:
8+
- /Tests/app/src #This parameters is when you have custom project source root, in this case tests has their own kernel and source directory.
89
analysis:
910
filter:
1011
edge_ngram_filter: #-> analyzer name
@@ -21,5 +22,5 @@ ongr_elasticsearch:
2122
indexes:
2223
ONGR\App\Entity\DummyDocumentInTheEntityDirectory:
2324
alias: field-data-index
24-
hosts:
25-
- localhost:9200
25+
hosts:
26+
- localhost:9200

0 commit comments

Comments
 (0)