22
33namespace Markup \NeedleBundle \DependencyInjection ;
44
5+ use Markup \Json \Encoder ;
56use Markup \NeedleBundle \Builder \QueryBuildOptions ;
67use Markup \NeedleBundle \Builder \QueryBuildOptionsLocator ;
78use Markup \NeedleBundle \Client \BackendClientServiceLocator ;
89use Markup \NeedleBundle \Context \ConfiguredContextProvider ;
910use Markup \NeedleBundle \Corpus \CorpusBackendProvider ;
11+ use Markup \NeedleBundle \Elastic \CorpusIndexConfiguration ;
1012use Markup \NeedleBundle \Elastic \CorpusIndexProvider ;
1113use Markup \NeedleBundle \Intercept \Definition as InterceptDefinition ;
1214use Markup \NeedleBundle \Intercept \NormalizedListMatcher ;
1315use Markup \NeedleBundle \Suggest \SuggestHandlerLocator ;
14- use Markup \NeedleBundle \Terms \TermsFieldProviderInterface ;
1516use Markup \NeedleBundle \Terms \TermsFieldProviderLocator ;
1617use Symfony \Component \Config \FileLocator ;
1718use Symfony \Component \DependencyInjection \ChildDefinition ;
@@ -55,7 +56,7 @@ public function load(array $configs, ContainerBuilder $container)
5556 /**
5657 * Loads the debug flag.
5758 *
58- * @param array $config
59+ * @param array $config
5960 * @param ContainerBuilder $container
6061 **/
6162 private function loadDebug (array $ config , ContainerBuilder $ container )
@@ -66,7 +67,7 @@ private function loadDebug(array $config, ContainerBuilder $container)
6667 /**
6768 * Loads information about the corpora.
6869 *
69- * @param array $config
70+ * @param array $config
7071 * @param ContainerBuilder $container
7172 **/
7273 private function loadCorpora (array $ config , ContainerBuilder $ container )
@@ -78,14 +79,16 @@ private function loadCorpora(array $config, ContainerBuilder $container)
7879 $ container ->setParameter ('markup_needle.schedule_events_by_corpus ' , $ scheduleEvents );
7980 //define client service locator
8081 $ clientLocator = (new Definition (BackendClientServiceLocator::class))
81- ->setArguments ([
82- array_map (
83- function (array $ corpusConfig ) {
84- return new Reference ($ corpusConfig ['backend ' ]['client ' ]);
85- },
86- $ config ['corpora ' ]
87- )
88- ])
82+ ->setArguments (
83+ [
84+ array_map (
85+ function (array $ corpusConfig ) {
86+ return new Reference ($ corpusConfig ['backend ' ]['client ' ]);
87+ },
88+ $ config ['corpora ' ]
89+ ),
90+ ]
91+ )
8992 ->setPublic (false )
9093 ->addTag ('container.service_locator ' );
9194 $ container ->setDefinition (BackendClientServiceLocator::class, $ clientLocator );
@@ -107,47 +110,55 @@ function (array $corpusConfig) {
107110 );
108111 $ container ->setParameter ('markup_needle.terms_service_lookup ' , $ termsServiceLookup );
109112 $ suggestHandlerLocator = (new Definition (SuggestHandlerLocator::class))
110- ->setArguments ([
111- array_map (
112- function (array $ corpusConfig ) {
113- return new Reference ($ corpusConfig ['suggest_handler ' ]);
114- },
115- $ config ['corpora ' ]
116- )
117- ])
113+ ->setArguments (
114+ [
115+ array_map (
116+ function (array $ corpusConfig ) {
117+ return new Reference ($ corpusConfig ['suggest_handler ' ]);
118+ },
119+ $ config ['corpora ' ]
120+ ),
121+ ]
122+ )
118123 ->setPublic (false )
119124 ->addTag ('container.service_locator ' );
120125 $ container ->setDefinition (SuggestHandlerLocator::class, $ suggestHandlerLocator );
121126 $ termsFieldProviderLocator = (new Definition (TermsFieldProviderLocator::class))
122- ->setArguments ([
123- array_map (
124- function (array $ corpusConfig ) {
125- return new Reference ($ corpusConfig ['terms_field_provider ' ]);
126- },
127- $ config ['corpora ' ]
128- )
129- ])
127+ ->setArguments (
128+ [
129+ array_map (
130+ function (array $ corpusConfig ) {
131+ return new Reference ($ corpusConfig ['terms_field_provider ' ]);
132+ },
133+ $ config ['corpora ' ]
134+ ),
135+ ]
136+ )
130137 ->setPublic (false )
131138 ->addTag ('container.service_locator ' );
132139 $ container ->setDefinition (TermsFieldProviderLocator::class, $ termsFieldProviderLocator );
133140 $ queryBuildOptionsLocator = (new Definition (QueryBuildOptionsLocator::class))
134- ->setArguments ([
135- array_map (
136- function (array $ corpusConfig ) use ($ container ) {
137- $ options = (new Definition (QueryBuildOptions::class))
138- ->setArguments ([
139- [
140- 'useWildcardSearch ' => $ corpusConfig ['use_wildcard_search ' ],
141- ],
142- ]);
143- $ optionsId = 'markup_needle.query_build_options ' .strval (rand ());
144- $ container ->setDefinition ($ optionsId , $ options );
145-
146- return new Reference ($ optionsId );
147- },
148- $ config ['corpora ' ]
149- )
150- ])
141+ ->setArguments (
142+ [
143+ array_map (
144+ function (array $ corpusConfig ) use ($ container ) {
145+ $ options = (new Definition (QueryBuildOptions::class))
146+ ->setArguments (
147+ [
148+ [
149+ 'useWildcardSearch ' => $ corpusConfig ['use_wildcard_search ' ],
150+ ],
151+ ]
152+ );
153+ $ optionsId = 'markup_needle.query_build_options ' .strval (rand ());
154+ $ container ->setDefinition ($ optionsId , $ options );
155+
156+ return new Reference ($ optionsId );
157+ },
158+ $ config ['corpora ' ]
159+ ),
160+ ]
161+ )
151162 ->setPublic (false )
152163 ->addTag ('container.service_locator ' );
153164 $ container ->setDefinition (QueryBuildOptionsLocator::class, $ queryBuildOptionsLocator );
@@ -156,7 +167,7 @@ function (array $corpusConfig) use ($container) {
156167 /**
157168 * Loads the definitions for search intercepts.
158169 *
159- * @param array $config
170+ * @param array $config
160171 * @param ContainerBuilder $container
161172 **/
162173 private function loadIntercepts (array $ config , ContainerBuilder $ container )
@@ -196,7 +207,7 @@ private function loadIntercepts(array $config, ContainerBuilder $container)
196207 }
197208
198209 /**
199- * @param array $config
210+ * @param array $config
200211 * @param ContainerBuilder $container
201212 **/
202213 private function loadLogSettings (array $ config , ContainerBuilder $ container )
@@ -216,7 +227,10 @@ private function loadContextServices(array $config, ContainerBuilder $container)
216227 $ prefix = sprintf ('markup_needle.contexts.%s. ' , $ contextName );
217228 $ container ->setAlias ($ prefix .'filter_provider ' , $ contextConfig ['filter_provider ' ]);
218229 $ container ->setAlias ($ prefix .'facet_provider ' , $ contextConfig ['facet_provider ' ]);
219- $ container ->setAlias ($ prefix .'facet_set_decorator_provider ' , $ contextConfig ['facet_set_decorator_provider ' ]);
230+ $ container ->setAlias (
231+ $ prefix .'facet_set_decorator_provider ' ,
232+ $ contextConfig ['facet_set_decorator_provider ' ]
233+ );
220234 $ container ->setAlias ($ prefix .'facet_collator_provider ' , $ contextConfig ['facet_collator_provider ' ]);
221235 $ container ->setAlias ($ prefix .'facet_order_provider ' , $ contextConfig ['facet_order_provider ' ]);
222236 $ contextProvider = new Definition (
@@ -236,6 +250,24 @@ private function loadContextServices(array $config, ContainerBuilder $container)
236250
237251 private function loadBackendSpecificServices (array $ config , ContainerBuilder $ container )
238252 {
253+ $ settings = [];
254+ $ mappings = [];
255+
256+ foreach ($ config ['elasticsearch ' ]['configuration ' ] as $ corpus => $ configuration ) {
257+ try {
258+ $ settings [$ corpus ] = Encoder::decode (strval (file_get_contents ($ configuration ['settings ' ])), true );
259+ $ mappings [$ corpus ] = Encoder::decode (strval (file_get_contents ($ configuration ['mappings ' ])), true );
260+ } catch (\JsonException $ e ) {
261+ throw new \LogicException (
262+ sprintf ('Invalid JSON in elastic configuration files (%s) ' , implode (', ' , $ configuration ))
263+ );
264+ }
265+ }
266+
267+ $ corpusIndexConfiguration = $ container ->findDefinition (CorpusIndexConfiguration::class);
268+ $ corpusIndexConfiguration ->setArgument ('$settings ' , $ settings );
269+ $ corpusIndexConfiguration ->setArgument ('$mappings ' , $ mappings );
270+
239271 $ corpusIndexProvider = $ container ->getDefinition (CorpusIndexProvider::class);
240272 $ corpusIndexProvider ->setArgument ('$prefix ' , $ config ['elasticsearch ' ]['index_prefix ' ]);
241273 }
0 commit comments