Template:Search link

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search

{{search link|search string|link text}}

Template documentationview · edit · history · purge ]
This documentation is transcluded from Template:Search link/doc.

Warning {{Search link}} should not be used in gallery pages and file descriptions as links to "search result pages" are among the links normally to be avoided.

This template creates a link that can be used to store a Wikimedia Commons search box query. A search link is useful for collaborative search on talk pages and most other pages, but it is not to be used in gallery pages and file descriptions. If used in these namespaces, it outputs the above warning.


{{Search link|1=query|2=label|3=domain}}

  • The first parameter is for the search, or query.
  • The second parameter is a label for the link.
  • The third (and above) parameter is for the search domain.

The second and third parameters are optional and have defaults, so the short form is {{search link|query}}.

Both a search link and a search box go to the same search engine. The same query produces the same result.

The basic search covers gallery and file pages. It finds words and phrases composed of letters and numbers very quickly, but a basic search can also query for all gallereis and files that contain a string that includes punctuation, math, and other symbols as seen in the page content or as seen in the page wikitext.

Basic search principles when using a search link
1 {{Search link
|"search engine"}}

"search engine"
There is one search term, a phrase that at time of writing produces 633 results. For one term, the page ranking rule is simple: title matches, on top.
2 {{Search link
|"search engine"
insource:/"search engine"/}}

"search engine" insource:/"search engine"/
Added a term: insource:/"slash delimited regex"/. Now there are 209 results. Some were filtered out because regex match only exact strings. All other searches always ignore capitalization, punctuation, math, and other symbols, like the ]] above. Proves a basic difference with search 1: only insource: searches wikitext. All other terms search what is rendered.
3 {{Search link
|search engine}}

search engine
There are two search terms. They produce 4312 results. Many page ranking rules apply to make the top most likely and the bottom least likely, probably.
4 {{Search link
|search engine
insource:/"search engine"/}}

search engine query insource:/"search engine query"/
Similar to search 3, the regex crawled character-by-character through the same 4312-page filter to produce its 339 results. That's nothing compared to what would happen if you ran an unfiltered (unaccompanied) regex exposed to the millions of pages on the wiki to produce just 339 results.[1]
5 {{Search link
|insource:/"2 + 2"/
|"Arithmetic" titles & "2 + 2"}}

"Arithmetic" titles & "2 + 2"
The regexp is the first term, but the prefix: term first filters out all but a few titles that start with the characters A-r-i-t-h-m-e-t-i-c, then the regexp crawls character-wise. Perhaps such a label conveys this to your team.

This template differs from the search box superficially when searching for an equals sign. In the search box you just add =, but here you must use the five-letter string {{=}}. As with any template, you can also explicitely set the parameter (like |1= or the named parameters mentioned below) to pass in an equals sign to any parameter, even the link label.[2] Similar you have to use {{!}} for the pipe sign | to not confuse the template parser.

In search 5 notice the need for the double quotes around the search pattern: insource:/"slash delimited regexp"/. These protect any characters from being interpreted as regex metacharacters, and insures they are interpreted literally. In basic searches quotes are always used, to enable exact-string searches in the wikitext. In advanced searches the double quotes are not used, so that the metacharacters can act as conditional and branching operators to create generalized patterns. Especially note also the prefix: filter used. We use filters with regex searches.

Search 2 exemplifies the easiest filter to apply to accompany any regexp search. It just takes the same phrase and make it a separate term. Given any regexp insource/"exact string search"/, just accompany it by an insource:"exact string search". The later term will always act like a perfect filter, matching every alphanumeric, and ignoring every non-alphanumeric, speeding through an indexed search to filter out pages the regexp couldn't possibly match. A namespace name at the beginning is another easy filter to apply, but any additional term in the query is a needed regex filter.

The next section covers search link arguments more in depth.


Here are the template parameters for {{Search link}}.

1 or |query=
or |text=
The search query. It becomes the text of the search link (how the link will look), if no second parameter is given.
2 or |label=
or |link=
A label to replace the default text, a new look to the link. Defaults to show the search query.

or |ns=
The search domain: one or more namespaces abbreviated "nsx", where x is any namespace number.
|nsx|nsx|nsx|…|nsx, or |ns=nsx&nsx&nsx…&nsx, or |ns=all. Defaults to ns0.
|interwiki= If present, an interwiki prefix to search on a different site. For instance, interwiki=en makes a link to en:Special:Search rather than to Special:Search.

When the query goes through this template, the default search domain of a user, logged-in or not, is gallery and file spaces unless the user set there preference.[3] But no matter who uses a search link the results will always be the same. "Cut and paste" can never guarantee the same results for a search, but a search link can because the search domain is the set of namespaces you set for everyone.

If you know a few search domain numbers you just type them in ns=ns0&ns1&ns2600. You learn them from the namespace table in the English Wikipedia (not completely identical to Commons) or in Help:Namespaces (written there as parser function {{ns:x}} with x being the namespace number). Otherwise you refine your query and search domain on the search results page, whose Advanced interface is designed to select and adjust namespaces with no knowledge of the namespace numbers. Once that produces satisfactory results, you copy the namespaces string from the URL (in your browser's address bar), and past it into |ns=, and you can get the query from the search results page search box, and paste it as the query, and that's your search link.

If you have just one namespace in your search link, and it's neither gallery nor file space, you can specify it by saying that ns=ns10 (as a named parameter; this is the template space), or that "one of the parameters is ns10" (at parameter position 3 or greater):

{{Search link|"search link" namespace||ns10}} → "search link" namespace

or, for one namespace, far more preferably you can rather say:

{{Search link|Template:"search link" namespace}} → Template:"search link" namespace

The "explicitly named if single-namespace" way there is preferred if you will be publishing or saving your search link. That way when it is run later the search domain shows up explicitly in the search box of the search results page to inform the user. Otherwise either the URL is perused to ascertain the search domain, or the Advanced dialog frame pops up on the search results page with the namespaces graphically check-marked that were detected in the URL. When it is two or more namespaces, these things always happen, because the query only accepts one namespace (as the first term only). But All is also an informative query, a pseudo-namespace for Search only. If you see a query begin with All:, the URL will be loaded with all the namespace parameters.

You can use "all" in {{Search link}} to specify all namespaces:

{{Search link|query|ns=all}}
{{Search link|query|label|all}}

but again, it is far more preferable to say

{{Search link|all:"search link" namespace}} → all:"search link" namespace

than it is to use:

{{Search link|"search link" namespace||all}} → "search link" namespace

for the reasons given just above. But when specifying "all", the query time is about seven times greater because there are that many more pages on the wiki than there are galleries. A more targeted search is possible, it runs much more quickly than the "all" search.

For example, if you have a query for which you know the search domain is 10 and 11, and you want no label, then you need a parameter 3, but you need no parameter 2, so per the template parameter rules the search link can be made in four general ways:

  • {{Search link|query||ns10|ns11}} When parameter 1 unnamed, and parameter 2 is unnamed (||, defined as the "empty string"), then parameter 3 can be defined unnamed ns10, and parameter 4 can be defined unnamed ns11, and so on. Nothing is named because everything is defined.
  • {{Search link|query|3=ns10|4=ns11}} Parameter 2 is undefined, but that's fine because parameters 3 and above are all named.
  • {{Search link|query|ns=ns10&ns11}} The empty positional parameter || is not needed when |ns= defines itself named.
  • {{Search link|query=query|label=|ns=ns10&ns11}} Everything is explicitly named.

For another example, if you select the "Commons" and "Help" namespaces, then run a query, the URL will show ns4=1&ns12=1. Copy that and paste it to |ns=ns4=1&ns12=1. (Note: you can ignore the "=1" part from the URL.)

Note how the URL contains ns0, ns1, ns2, and ns3, and how it got them:

{{Search link|systems operations|3=ns2|4=ns1|ns=ns3|20=ns0}} → systems operations
{{Search link|systems operations||ns2|ns1|ns3|ns0}} → systems operations
{{Search link|systems operations|3=ns2&ns1&ns3&ns0}} → systems operations

If you need to develop a highly specific search domain, a very elaborate one carved out of a set of the thirty namespaces, then you will have developed this at the search results page using the Advanced search domain picker there. Then you just cut and paste the entire string from the URL of your found search domain namespaces, and paste it into one named parameter |ns=.

To type in namespaces 0, 2, 4, 5, 7 and 9, with no label, the two easiest ways are:

  • {{Search link|query||ns0|ns2|ns4|ns5|ns7|ns9}}
  • {{Search link|query|ns=ns0&ns2&ns4&ns5&ns7&ns9}}

The order is irrelevant.

Advanced examples[edit]

See also: Help:Searching.

All these involve insource:/slash delimited regex/ with filters. Any search link with an insource:/regex/ search should always provide the additional query terms that would filter (reduce) the search domain as much as possible. This template defaults to article space if no namespace is given, which is a filter.


The need to match an equals in an article is not surprising, and is basic. You have to use {{=}} or |1= (or |query=) just to get the equals sign in your query to the search engine, or {{!}} to get the pipe character to the search engine. Both pipe characters and the equals signs are template sensitive for all templates, so you can always quote them with curly brackets like that inside templates. Although the search box can take = and | directly, quoting is necessary in the search link because otherwise they have their parameters meaning.

Regex are sensitive to punctuation, brackets, math and other symbolic characters, collectively known as "punctuation" so you quote them, because otherwise they have their regex metacharacter meaning. The "metacharacters" of CirrusSearch have claimed most punctuation characters as functions in their regex, but you don't have to know all the metacharacter functions just to search for them as targets literally. You can simply quote all punctuation to search for them as literal targets in wikitext. The way to easily quote every character in an entire regexp is to put the whole term in quotes: insource:/"regexp with literal characters"/

To get a pipe character through both the template and the search engine to target it as a character in wikitext, you have to quote it twice, hence the frequent need for the six characters \{{!}} in an advanced search link. The equals sign is not a metacharacter, so it does not have to be quoted twice, as the pipe character does. The pipe character is a metacharacter that means OR.


  1. Some users' default search domain is all namespaces. In cases like the bare regex search, the search engine protects itself by limiting all regex searches. A bare regex that crawls through millions of pages can take over twenty seconds, and may even cost you an HTML timeout. During that time very few other regex searches are allowed. Always use a filter with regex.
  2. Searching for an equals sign requires using a regexp.
  3. Advancing editors who begin to search for Commons' other pages may at times set their default search domain (at Special:Search Advanced) to all. Setting search to all is the most likely scenario to "set and forget". That includes galleries, but not files space, other than the setting ns=all in this template.