GitLab Advanced Search

Version history
  • Moved to GitLab Premium in 13.9.
note
This is the user documentation. To configure the Advanced Search, visit the administrator documentation. Advanced Search is enabled in GitLab.com.

GitLab Advanced Search expands on the Basic Search with an additional set of features for faster, more advanced searches across the entire GitLab instance when searching in:

  • Projects
  • Issues
  • Merge requests
  • Milestones
  • Epics
  • Comments
  • Code
  • Commits
  • Wiki
  • Users

The Advanced Search can be useful in various scenarios:

  • Faster searches: Advanced Search is based on Elasticsearch, which is a purpose-built full text search engine that can be horizontally scaled so that it can provide search results in 1-2 seconds in most cases.
  • Code Maintenance: Finding all the code that needs to be updated at once across an entire instance can save time spent maintaining code. This is especially helpful for organizations with more than 10 active projects. This can also help build confidence is code refactoring to identify unknown impacts.
  • Promote innersourcing: Your company may consist of many different developer teams each of which has their own group where the various projects are hosted. Some of your applications may be connected to each other, so your developers need to instantly search throughout the GitLab instance and find the code they search for.

Use the Advanced Search syntax

Elasticsearch has only data for the default branch. That means that if you go to the repository tree and switch the branch from the default to something else, then the “Code” tab in the search result page will be served by the basic search even if Elasticsearch is enabled.

The Advanced Search syntax supports fuzzy or exact search queries with prefixes, boolean operators, and much more. Use the search as before and GitLab will show you matching code from each project you have access to.

Advanced Search

Full details can be found in the Elasticsearch documentation, but here’s a quick guide:

  • Searches look for all the words in a query, in any order - e.g.: searching issues for display bug and bug display will return the same results.
  • To find the exact phrase (stemming still applies), use double quotes: "display bug"
  • To find bugs not mentioning display, use -: bug -display
  • To find a bug in display or banner, use |: bug display | banner
  • To group terms together, use parentheses: bug | (display +banner)
  • To match a partial word, use *. In this example, I want to find bugs with any 500 errors. : bug error 50*
  • To use one of symbols above literally, escape the symbol with a preceding \: argument \-last

Syntax search filters

Advanced Search also supports the use of filters. The available filters are:

  • filename: Filters by filename. You can use the glob (*) operator for fuzzy matching.
  • path: Filters by path. You can use the glob (*) operator for fuzzy matching.
  • extension: Filters by extension in the filename. Please write the extension without a leading dot. Exact match only.
  • blob: Filters by Git object ID. Exact match only.

To use them, add them to your keyword in the format <filter_name>:<value> without any spaces between the colon (:) and the value. When no keyword is provided, an asterisk (*) will be used as the keyword.

Examples:

Excluding filters

Introduced in GitLab 13.3.

Filters can be inverted to filter out results from the result set, by prefixing the filter name with a - (hyphen) character, such as:

  • -filename
  • -path
  • -extension
  • -blob

Examples:

Search by issue or merge request ID

You can search a specific issue or merge request by its ID with a special prefix.

  • To search by issue ID, use prefix # followed by issue ID. For example, #23456
  • To search by merge request ID, use prefix ! followed by merge request ID. For example !23456

Global search scopes

Introduced in GitLab 14.3.

To improve the performance of your instance’s global search, you can limit the scope of the search. To do so, you can exclude global search scopes by disabling ops feature flags.

Global search has all its scopes enabled by default in GitLab SaaS and self-managed instances. A GitLab administrator can disable the following ops feature flags to limit the scope of your instance’s global search and optimize its performance:

Scope Feature flag Description
Code global_search_code_tab When enabled, the global search includes code as part of the search.
Commits global_search_commits_tab When enabled, the global search includes commits as part of the search.
Issues global_search_issues_tab When enabled, the global search includes issues as part of the search.
Merge Requests global_search_merge_requests_tab When enabled, the global search includes merge requests as part of the search.
Wiki global_search_wiki_tab When enabled, the global search includes wiki as part of the search.