Go to the documentation of this file.
172 $resultSetOrStatus = $fn();
179 $resultSet = $resultSetOrStatus;
180 } elseif ( $resultSetOrStatus instanceof
Status &&
183 $resultSet = $resultSetOrStatus->getValue();
186 $resultSet->shrink( $this->limit );
189 return $resultSetOrStatus;
198 switch ( $feature ) {
199 case 'search-update':
201 case 'title-suffix-filter':
214 $this->features[$feature] = $data;
225 return $this->features[$feature] ??
null;
238 return MediaWikiServices::getInstance()->getContentLanguage()->segmentByWord( $string );
248 MediaWikiServices::getInstance()->getContentLanguage() );
256 $services = MediaWikiServices::getInstance();
257 $config = $services->getMainConfig();
258 return $services->newSearchEngine()->getNearMatcher( $config );
268 return "A-Za-z_'.0-9\\x80-\\xFF\\-";
279 $this->limit = intval(
$limit );
280 $this->offset = intval(
$offset );
292 $validNs = MediaWikiServices::getInstance()->getSearchEngineConfig()->searchableNamespaces();
294 return $ns < 0 || isset( $validNs[$ns] );
334 throw new InvalidArgumentException(
"Invalid sort: $sort. " .
335 "Must be one of: " . implode(
', ', $this->
getValidSorts() ) );
380 $withAllKeyword =
true,
381 $withPrefixSearchExtractNamespaceHook =
false
384 if ( strpos( $query,
':' ) ===
false ) {
387 $extractedNamespace =
null;
390 if ( $withAllKeyword ) {
393 $allkeywords[] =
wfMessage(
'searchall' )->inContentLanguage()->text() .
":";
395 if ( !in_array(
'all:', $allkeywords ) ) {
396 $allkeywords[] =
'all:';
399 foreach ( $allkeywords as $kw ) {
400 if ( strncmp( $query, $kw, strlen( $kw ) ) == 0 ) {
401 $extractedNamespace =
null;
402 $parsed = substr( $query, strlen( $kw ) );
409 if ( !$allQuery && strpos( $query,
':' ) !==
false ) {
410 $prefix = str_replace(
' ',
'_', substr( $query, 0, strpos( $query,
':' ) ) );
411 $index = MediaWikiServices::getInstance()->getContentLanguage()->getNsIndex(
$prefix );
412 if ( $index !==
false ) {
413 $extractedNamespace = [ $index ];
414 $parsed = substr( $query, strlen(
$prefix ) + 1 );
415 } elseif ( $withPrefixSearchExtractNamespaceHook ) {
418 Hooks::run(
'PrefixSearchExtractNamespace', [ &$hookNamespaces, &$hookQuery ] );
419 if ( $hookQuery !== $query ) {
420 $parsed = $hookQuery;
421 $extractedNamespace = $hookNamespaces;
430 return [ $parsed, $extractedNamespace ];
443 return [ $contextlines, $contextchars ];
495 return $c ? $c->getTextForSearchIndex() :
'';
518 if ( $queryAndNs !==
false ) {
520 return $queryAndNs[0];
551 $search = trim( $search );
553 if ( !in_array(
NS_SPECIAL, $this->namespaces ) &&
555 [ $this->namespaces, $search, $this->limit, &$results, $this->offset ]
574 if ( trim( $search ) ===
'' ) {
588 if ( trim( $search ) ===
'' ) {
594 $fallbackLimit = 1 + $this->limit - $results->getSize();
595 if ( $fallbackLimit > 0 ) {
596 $fallbackSearches = MediaWikiServices::getInstance()->getContentLanguage()->
597 autoConvertToAllVariants( $search );
598 $fallbackSearches = array_diff( array_unique( $fallbackSearches ), [ $search ] );
600 foreach ( $fallbackSearches as $fbs ) {
603 $results->appendAll( $fallbackSearchResult );
604 $fallbackLimit -= $fallbackSearchResult->getSize();
605 if ( $fallbackLimit <= 0 ) {
634 $suggestions->
shrink( $this->limit );
636 $search = trim( $search );
641 $lb->setCaller( __METHOD__ );
648 MediaWikiServices::getInstance()->getStatsdDataFactory()
649 ->updateCount(
'search.completion.missing', $diff );
656 if ( $this->offset === 0 ) {
663 $rescoredResults = $rescorer->rescore( $search, $this->namespaces, $results, $this->limit );
668 $rescoredResults = $results;
671 if ( count( $rescoredResults ) > 0 ) {
672 $found = array_search( $rescoredResults[0], $results );
673 if ( $found ===
false ) {
677 $suggestions->
prepend( $exactMatch );
678 $suggestions->
shrink( $this->limit );
682 $suggestions->
rescore( $found );
696 if ( trim( $search ) ===
'' ) {
713 return $backend->
defaultSearchBackend( $this->namespaces, $search, $this->limit, $this->offset );
756 $seenHandlers =
new SplObjectStorage();
757 foreach ( $models as $model ) {
766 if ( $seenHandlers->contains( $handler ) ) {
770 $seenHandlers->attach( $handler );
771 $handlerFields = $handler->getFieldsForSearchIndex( $this );
772 foreach ( $handlerFields as $fieldName => $fieldData ) {
773 if ( empty( $fields[$fieldName] ) ) {
774 $fields[$fieldName] = $fieldData;
777 $mergeDef = $fields[$fieldName]->merge( $fieldData );
779 throw new InvalidArgumentException(
"Duplicate field $fieldName for model $model" );
781 $fields[$fieldName] = $mergeDef;
786 Hooks::run(
'SearchIndexFields', [ &$fields, $this ] );
798 Hooks::run(
"SearchResultsAugment", [ &$setAugmentors, &$rowAugmentors ] );
799 if ( !$setAugmentors && !$rowAugmentors ) {
805 foreach ( $rowAugmentors as $name => $row ) {
806 if ( isset( $setAugmentors[$name] ) ) {
807 throw new InvalidArgumentException(
"Both row and set augmentors are defined for $name" );
816 foreach ( $setAugmentors as $name => $augmentor ) {
817 $data = $augmentor->augmentAll( $resultSet );
static fromStrings(array $titles, $hasMoreResults=false)
Builds a new set of suggestion based on a string array.
getSearchIndexFields()
Get fields for search index.
getProfiles( $profileType, User $user=null)
Get a list of supported profiles.
static getForModelID( $modelId)
Returns the ContentHandler singleton for the given model ID.
map( $callback)
Call array_map on the suggestions array.
static newFromText( $text, $defaultNamespace=NS_MAIN)
Create a new Title from text, such as what one would find in a link.
augmentSearchResults(ISearchResultSet $resultSet)
Augment search results with extra data.
setFeatureData( $feature, $data)
Way to pass custom data for engines.
getValidSorts()
Get the valid sort directions.
const DEFAULT_CONTEXT_CHARS
completionSearchWithVariants( $search)
Perform a completion search with variants.
Class representing a list of titles The execute() method checks them all for existence and adds them ...
Performs prefix search, returning Title objects.
normalizeText( $string)
When overridden in derived class, performs database-specific conversions on text to be used for searc...
getSort()
Get the sort direction of the search results.
searchTitle( $term)
Perform a title-only search query and return a result set.
static userHighlightPrefs()
Find snippet highlight settings for all users.
const FT_QUERY_INDEP_PROFILE_TYPE
Profile type for query independent ranking features.
completionSearchBackend( $search)
Perform a completion search.
legalSearchChars( $type=self::CHARS_ALL)
Get chars legal for search.
wfMessage( $key,... $params)
This is the function for getting translated interface messages.
prepend(SearchSuggestion $suggestion)
Add a new suggestion at the top.
static parseNamespacePrefixes( $query, $withAllKeyword=true, $withPrefixSearchExtractNamespaceHook=false)
Parse some common prefixes: all (search everything) or namespace names.
doSearchTitle( $term)
Perform a title-only search query and return a result set.
completionSearchBackendOverfetch( $search)
Perform an overfetch of completion search results.
replacePrefixes( $query)
Parse some common prefixes: all (search everything) or namespace names and set the list of namespaces...
static fromTitle( $score, Title $title)
Create suggestion from Title.
defaultPrefixSearch( $search)
Simple prefix search for subpages.
const COMPLETION_PROFILE_TYPE
Profile type for completionSearch.
Generic operation result class Has warning/error list, boolean status and arbitrary value.
textAlreadyUpdatedForIndex()
If an implementation of SearchEngine handles all of its own text processing in getTextFromContent() a...
static fromTitles(array $titles, $hasMoreResults=false)
Builds a new set of suggestion based on a title array.
Interface for configuration instances.
setSort( $sort)
Set the sort direction of the search results.
An utility class to rescore search results by looking for an exact match in the db and add the page f...
Implementation of near match title search.
static getContentModels()
const CHARS_NO_SYNTAX
Integer flag for legalSearchChars: includes all chars allowed in a search term.
getNearMatcher(Config $config)
Get service class to finding near matches.
searchText( $term)
Perform a full text search query and return a result set.
Marker class for search engines that can handle their own pagination, by reporting in their ISearchRe...
setAugmentedData( $name, $data)
Sets augmented data for result set.
A set of SearchEngine results.
updateTitle( $id, $title)
Update a search index record's title only.
setNamespaces( $namespaces)
Set which namespaces the search should include.
filter( $callback)
Filter the suggestions array.
maybePaginate(Closure $fn)
Performs an overfetch and shrink operation to determine if the next page is available for search engi...
update( $id, $title, $text)
Create or update the search index record for the given page.
const DEFAULT_CONTEXT_LINES
getTextFromContent(Title $t, Content $c=null)
Get the raw text for updating the index from a content object Nicer search backends could possibly do...
static newGood( $value=null)
Factory function for good results.
shrink( $limit)
Remove any extra elements in the suggestions set.
normalizeNamespaces( $search)
Makes search simple string if it was namespaced.
rescore( $key)
Move the suggestion at index $key to the first position.
setShowSuggestion( $showSuggestion)
Set whether the searcher should try to build a suggestion.
doSearchArchiveTitle( $term)
Perform a title search in the article archive.
static emptySuggestionSet()
Contain a class for special pages.
static defaultNearMatcher()
Get near matcher for default SearchEngine.
Base interface for content objects.
completionSearch( $search)
Perform a completion search.
getSuggestedTitle()
Title object in the case this suggestion is based on a title.
doSearchText( $term)
Perform a full text search query and return a result set.
defaultSearchBackend( $namespaces, $search, $limit, $offset)
Unless overridden by PrefixSearchBackend hook...
makeSearchFieldMapping( $name, $type)
Create a search field definition.
simplePrefixSearch( $search)
Call out to simple search backend.
Represents a title within MediaWiki.
Null index field - means search engine does not implement this field.
Perform augmentation of each row and return composite result, indexed by ID.
extractTitles(SearchSuggestionSet $completionResults)
Extract titles from completion results.
const CHARS_ALL
Integer flag for legalSearchChars: includes all chars allowed in a search query.
Exception thrown when an unregistered content model is requested.
array $features
Feature values.
The User object encapsulates all of the user-specific settings (user_id, name, rights,...
static run( $event, array $args=[], $deprecatedVersion=null)
Call hook functions defined in Hooks::register and $wgHooks.
searchArchiveTitle( $term)
Perform a title search in the article archive.
setLimitOffset( $limit, $offset=0)
Set the maximum number of results to return and how many to skip before returning the first.
getFeatureData( $feature)
Way to retrieve custom data set by setFeatureData or by the engine itself.
processCompletionResults( $search, SearchSuggestionSet $suggestions)
Process completion search results.