28 private function checkDependenciesSet() {
33 if ( $this->searchEngineConfig ===
null || $this->searchEngineFactory ===
null ) {
34 throw new LogicException(
35 'SearchApi requires both a SearchEngineConfig and SearchEngineFactory to be set'
47 private static $BACKEND_NULL_PARAM =
'database-backed';
58 $this->checkDependenciesSet();
62 ParamValidator::PARAM_TYPE =>
'string',
63 ParamValidator::PARAM_REQUIRED =>
true,
66 ParamValidator::PARAM_DEFAULT =>
NS_MAIN,
67 ParamValidator::PARAM_TYPE =>
'namespace',
68 ParamValidator::PARAM_ISMULTI =>
true,
71 ParamValidator::PARAM_DEFAULT => 10,
72 ParamValidator::PARAM_TYPE =>
'limit',
73 IntegerDef::PARAM_MIN => 1,
78 if ( $isScrollable ) {
80 ParamValidator::PARAM_DEFAULT => 0,
81 IntegerDef::PARAM_MIN => 0,
82 ParamValidator::PARAM_TYPE =>
'integer',
87 $alternatives = $this->searchEngineConfig->getSearchTypes();
88 if ( count( $alternatives ) > 1 ) {
89 $alternatives[0] ??= self::$BACKEND_NULL_PARAM;
90 $params[
'backend'] = [
91 ParamValidator::PARAM_DEFAULT => $this->searchEngineConfig->getSearchType(),
92 ParamValidator::PARAM_TYPE => $alternatives,
100 $params += $this->buildProfileApiParam();
114 private function buildProfileApiParam() {
115 $this->checkDependenciesSet();
118 $searchEngine = $this->searchEngineFactory->create();
120 foreach ( $configs as $paramName => $paramConfig ) {
121 $profiles = $searchEngine->getProfiles(
122 $paramConfig[
'profile-type'],
131 $defaultProfile =
null;
132 foreach ( $profiles as $profile ) {
133 $types[] = $profile[
'name'];
134 if ( isset( $profile[
'desc-message'] ) ) {
135 $helpMessages[$profile[
'name']] = $profile[
'desc-message'];
138 if ( !empty( $profile[
'default'] ) ) {
139 $defaultProfile = $profile[
'name'];
144 ParamValidator::PARAM_TYPE => $types,
147 ParamValidator::PARAM_DEFAULT => $defaultProfile,
168 $this->checkDependenciesSet();
170 if ( $params ==
null ) {
171 return $this->searchEngineFactory->create();
174 $type = $params[
'backend'] ??
null;
175 if ( $type === self::$BACKEND_NULL_PARAM ) {
178 $searchEngine = $this->searchEngineFactory->create( $type );
179 $searchEngine->setNamespaces( $params[
'namespace'] );
180 $searchEngine->setLimitOffset( $params[
'limit'], $params[
'offset'] ?? 0 );
184 foreach ( $configs as $paramName => $paramConfig ) {
185 if ( isset( $params[$paramName] ) ) {
186 $searchEngine->setFeatureData(
187 $paramConfig[
'profile-type'],
192 return $searchEngine;
208class_alias( SearchApi::class,
'SearchApi' );
Configuration handling class for SearchEngine.
Factory class for SearchEngine.
Contain a class for special pages.
trait SearchApi
Traits for API components that use a SearchEngine.
Interface for objects which can provide a MediaWiki context on request.