MediaWiki master
SearchEngineFactory.php
Go to the documentation of this file.
1<?php
2
3namespace MediaWiki\Search;
4
6use Wikimedia\ObjectFactory\ObjectFactory;
8
14
15 private SearchEngineConfig $config;
16 private HookContainer $hookContainer;
17 private IConnectionProvider $dbProvider;
18
19 public function __construct(
20 SearchEngineConfig $config,
21 HookContainer $hookContainer,
22 IConnectionProvider $dbProvider
23 ) {
24 $this->config = $config;
25 $this->hookContainer = $hookContainer;
26 $this->dbProvider = $dbProvider;
27 }
28
35 public function create( $type = null ) {
36 $configuredClass = $this->config->getSearchType();
37 $alternativesClasses = $this->config->getSearchTypes();
38
39 if ( $type !== null && in_array( $type, $alternativesClasses ) ) {
40 $class = $type;
41 } elseif ( $configuredClass !== null ) {
42 $class = $configuredClass;
43 } else {
44 $class = self::getSearchEngineClass( $this->dbProvider );
45 }
46
47 $mappings = $this->config->getSearchMappings();
48
49 // Convert non mapped classes to ObjectFactory spec
50 $spec = $mappings[$class] ?? [ 'class' => $class ];
51
52 $args = [];
53
54 if ( isset( $spec['class'] ) && is_subclass_of( $spec['class'], SearchDatabase::class ) ) {
55 $args['extraArgs'][] = $this->dbProvider;
56 }
57
58 $engine = ObjectFactory::getObjectFromSpec( $spec, $args );
60 $engine->setHookContainer( $this->hookContainer );
61 return $engine;
62 }
63
69 public static function getSearchEngineClass( IConnectionProvider $dbProvider ) {
70 $type = $dbProvider->getReplicaDatabase()->getType();
71
72 switch ( $type ) {
73 case 'sqlite':
74 return SearchSqlite::class;
75 case 'mysql':
76 return SearchMySQL::class;
77 case 'postgres':
78 return SearchPostgres::class;
79 default:
80 return SearchEngineDummy::class;
81 }
82 }
83}
84
86class_alias( SearchEngineFactory::class, 'SearchEngineFactory' );
Configuration handling class for SearchEngine.
Factory class for SearchEngine.
__construct(SearchEngineConfig $config, HookContainer $hookContainer, IConnectionProvider $dbProvider)
static getSearchEngineClass(IConnectionProvider $dbProvider)
create( $type=null)
Create SearchEngine of the given type.
Provide primary and replica IDatabase connections.
getReplicaDatabase(string|false $domain=false, $group=null)
Get connection to a replica database.
Definition of a mapping for the search index field.