19 use \MediaWiki\Api\SearchApi;
27 parent::__construct( $query, $moduleName,
'ps' );
29 $this->searchEngineConfig = $searchEngineConfig;
30 $this->searchEngineFactory = $searchEngineFactory;
39 $this->run( $resultPageSet );
45 private function run( $resultPageSet =
null ) {
47 $search = $params[
'search'];
48 $limit = $params[
'limit'];
49 $offset = $params[
'offset'];
52 $suggestions = $searchEngine->completionSearchWithVariants( $search );
53 $titles = $searchEngine->extractTitles( $suggestions );
55 if ( $suggestions->hasMoreResults() ) {
59 if ( $resultPageSet ) {
60 $resultPageSet->setRedirectMergePolicy(
static function ( array $current, array $new ) {
61 if ( !isset( $current[
'index'] ) || $new[
'index'] < $current[
'index'] ) {
62 $current[
'index'] = $new[
'index'];
66 $resultPageSet->populateFromTitles( $titles );
67 foreach ( $titles as $index => $title ) {
68 $resultPageSet->setGeneratorData( $title, [
'index' => $index + $offset + 1 ] );
73 foreach ( $titles as $title ) {
75 'ns' => $title->getNamespace(),
76 'title' => $title->getPrefixedText(),
78 if ( $title->isSpecialPage() ) {
79 $vals[
'special'] =
true;
81 $vals[
'pageid'] = (int)$title->getArticleID();
83 $fit = $result->addValue( [
'query', $this->
getModuleName() ],
null, $vals );
90 $result->addIndexedTagName(
110 'profile-type' => SearchEngine::COMPLETION_PROFILE_TYPE,
111 'help-message' =>
'apihelp-query+prefixsearch-param-profile',
119 'action=query&list=prefixsearch&pssearch=meaning'
120 =>
'apihelp-query+prefixsearch-example-simple',
126 return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Prefixsearch';
131class_alias( ApiQueryPrefixSearch::class,
'ApiQueryPrefixSearch' );