42 private function checkDependenciesSet() {
47 if ( $this->searchEngineConfig ===
null || $this->searchEngineFactory ===
null ) {
48 throw new LogicException(
49 'SearchApi requires both a SearchEngineConfig and SearchEngineFactory to be set'
61 private static $BACKEND_NULL_PARAM =
'database-backed';
72 $this->checkDependenciesSet();
76 ParamValidator::PARAM_TYPE =>
'string',
77 ParamValidator::PARAM_REQUIRED =>
true,
80 ParamValidator::PARAM_DEFAULT =>
NS_MAIN,
81 ParamValidator::PARAM_TYPE =>
'namespace',
82 ParamValidator::PARAM_ISMULTI =>
true,
85 ParamValidator::PARAM_DEFAULT => 10,
86 ParamValidator::PARAM_TYPE =>
'limit',
87 IntegerDef::PARAM_MIN => 1,
92 if ( $isScrollable ) {
94 ParamValidator::PARAM_DEFAULT => 0,
95 IntegerDef::PARAM_MIN => 0,
96 ParamValidator::PARAM_TYPE =>
'integer',
101 $alternatives = $this->searchEngineConfig->getSearchTypes();
102 if ( count( $alternatives ) > 1 ) {
103 $alternatives[0] ??= self::$BACKEND_NULL_PARAM;
104 $params[
'backend'] = [
105 ParamValidator::PARAM_DEFAULT => $this->searchEngineConfig->getSearchType(),
106 ParamValidator::PARAM_TYPE => $alternatives,
114 $params += $this->buildProfileApiParam();
128 private function buildProfileApiParam() {
129 $this->checkDependenciesSet();
132 $searchEngine = $this->searchEngineFactory->create();
134 foreach ( $configs as $paramName => $paramConfig ) {
135 $profiles = $searchEngine->getProfiles(
136 $paramConfig[
'profile-type'],
145 $defaultProfile =
null;
146 foreach ( $profiles as $profile ) {
147 $types[] = $profile[
'name'];
148 if ( isset( $profile[
'desc-message'] ) ) {
149 $helpMessages[$profile[
'name']] = $profile[
'desc-message'];
152 if ( !empty( $profile[
'default'] ) ) {
153 $defaultProfile = $profile[
'name'];
158 ParamValidator::PARAM_TYPE => $types,
161 ParamValidator::PARAM_DEFAULT => $defaultProfile,
182 $this->checkDependenciesSet();
184 if ( $params ==
null ) {
185 return $this->searchEngineFactory->create();
188 $type = $params[
'backend'] ??
null;
189 if ( $type === self::$BACKEND_NULL_PARAM ) {
192 $searchEngine = $this->searchEngineFactory->create( $type );
193 $searchEngine->setNamespaces( $params[
'namespace'] );
194 $searchEngine->setLimitOffset( $params[
'limit'], $params[
'offset'] ?? 0 );
198 foreach ( $configs as $paramName => $paramConfig ) {
199 if ( isset( $params[$paramName] ) ) {
200 $searchEngine->setFeatureData(
201 $paramConfig[
'profile-type'],
206 return $searchEngine;
222class_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.