Поиск в Deckhouse Code помогает быстро находить нужную информацию по проектам, группам или всему инстансу. Результаты сортируются по релевантности и позволяют сразу перейти к исходному объекту.

Расширенный поиск на базе OpenSearch позволяет:

  • находить фрагменты кода во всех доступных проектах;
  • отслеживать использование устаревших функций и библиотек;
  • искать комментарии в задачах и запросах на слияние;
  • находить коммиты по сообщению или SHA;
  • искать содержимое wiki-страниц.

Использование расширенного поиска

Чтобы выполнить поиск:

  1. В верхней панели выберите «Поиск».
  2. Введите поисковый запрос.
  3. Нажмите «Enter».

Расширенный поиск также доступен в контексте проекта или группы.

При включённом OpenSearch Deckhouse Code использует его как бэкенд для расширенных областей поиска (задачи, запросы на слияние, код и другие). Параметры REST API, фильтры и формат ответа описаны в разделе «API поиска».

Области поиска

Области описывают тип данных, по которым выполняется поиск.

Базовый поиск

Следующие области доступны в базовом поиске (без OpenSearch):

Область Глобальный Группа Проект
Код
Комментарии
Коммиты
Задачи
Запросы на слияние
Этапы (milestones)
Проекты
Пользователи
Wiki

Расширенный поиск

При включённом OpenSearch доступны следующие области:

Область Глобальный Группа Проект
Код
Комментарии
Коммиты
Задачи
Запросы на слияние
Этапы (milestones)
Проекты
Пользователи
Wiki

Поиск по коду, коммитам, wiki и комментариям при включённом OpenSearch выполняется через OpenSearch и учитывает матрицу доступа. Пользователи видят только те объекты, к которым у них есть права на чтение. Поиск по задачам, запросам на слияние и другим сущностям выполняется через базу данных.

Таблицы выше описывают области поиска в веб-интерфейсе. Набор областей в REST API отличается: поиск по коду, коммитам, комментариям и wiki доступен там только на уровне проекта. Подробнее — в разделе «Области поиска в API».

Использование поиска

Общий порядок работы с поиском в Deckhouse Code:

  1. Нажмите «Поиск» в верхней панели.
  2. Введите поисковый запрос.
  3. Нажмите «Enter» — результаты появятся на странице поиска.
  4. Используйте фильтры для уточнения результатов по группе, проекту или типу объекта.

Поиск

Глобальный поиск

Позволяет искать по всем проектам и группам инстанса.

  1. В левом меню выберите «Поиск».
  2. Введите запрос и нажмите «Enter».

Поиск в проекте

  1. Перейдите в нужный проект.
  2. В левом меню выберите «Поиск».
  3. Введите запрос и нажмите «Enter».

Поиск по группе

  1. Перейдите в нужную группу.
  2. В левом меню выберите «Поиск».
  3. Введите запрос и нажмите «Enter».

Дополнительные возможности

  • Поиск поддерживает автодополнение по проектам, группам и пользователям.
  • При включённом расширенном поиске автодополнение также работает по сообщениям коммитов, именам файлов, коду, задачам и запросам на слияние.
  • При поиске можно быстро перейти к нужному коммиту по его SHA.

Синтаксис

Расширенный поиск поддерживает расширенный синтаксис запросов: точные и нечёткие совпадения, логические операторы и фильтры.

Синтаксис Описание Пример
" Точный поиск "gem sidekiq"
~ Нечёткий поиск J~ Doe
\| Или display \| banner
+ И display +banner
- Исключение display -banner
* Частичное совпадение bug error 50*
\ Экранирование \*md
# ID задачи (в комментариях) #23456
! ID запроса на слияние (в комментариях) !23456

Поиск по коду

Синтаксис Описание Пример
filename: Имя файла filename:*spec.rb
path: Путь в репозитории (полное или частичное совпадение) path:spec/workers/
extension: Расширение файла без точки extension:js
blob: Git object ID blob:998707*

В интерфейсе поиска по коду также доступен фильтр по языку программирования.

Примеры

Запрос Описание
rails -filename:gemfile.lock Находит rails во всех файлах, кроме gemfile.lock
RSpec.describe Resolvers -*builder Находит RSpec.describe Resolvers, исключая совпадения, начинающиеся с builder
bug \| (display +banner) Находит bug или одновременно display и banner
helper -extension:yml -extension:js Находит helper во всех файлах, кроме .yml и .js
helper path:lib/git Находит helper в файлах с путём lib/git* (например, spec/lib/gitlab)

Настройки индексации

Настройки проекта

Maintainer проекта может перейти в «Настройки» → «Поиск».

Regex для веток

Если на уровне инстанса включён режим Разрешить регулярное выражение для веток на уровне проекта, maintainer может указать regex для дополнительных веток. Ветка по умолчанию индексируется всегда.

Пример regex: (feature|hotfix)/.*

Изменение regex запускает полную переиндексацию проекта.

Переиндексация code и wiki

  • Переиндексировать код — полная переиндексация кода репозитория.
  • Переиндексировать вики — полная переиндексация wiki (если wiki-репозиторий существует).

Бейдж «Индекс актуален» показывает, завершена ли индексация для текущего состояния репозитория.

Настройки группы

Owner группы может перейти в «Настройки» → «Поиск».

Доступна переиндексация wiki группы: статус индекса и кнопка «Переиндексировать вики».

API поиска

Search REST API позволяет выполнять поиск по инстансу Deckhouse Code, отдельной группе или проекту.

Эндпоинты

Для поиска доступны следующие эндпоинты:

  • GET /api/v4/search — поиск по инстансу Deckhouse Code;
  • GET /api/v4/groups/:id/search (или /api/v4/groups/:id/-/search) — поиск по группе;
  • GET /api/v4/projects/:id/search (или /api/v4/projects/:id/-/search) — поиск по проекту.

Все эндпоинты требуют аутентификации.

Области поиска в API

Область поиска задаётся обязательным параметром scope. Поддерживаемые значения зависят от эндпоинта:

Значение scope Инстанс Группа Проект Бэкенд при включённом OpenSearch
projects PostgreSQL
users PostgreSQL
snippet_titles PostgreSQL
issues OpenSearch (advanced)
work_items OpenSearch (advanced)
merge_requests OpenSearch (advanced)
milestones OpenSearch (advanced)
notes OpenSearch (advanced)
wiki_blobs OpenSearch (advanced)
commits OpenSearch (advanced)
blobs OpenSearch (advanced)

В заголовке ответа X-Search-Type возвращается фактически использованный тип поиска.

Набор областей в API отличается от областей поиска в веб-интерфейсе: значения blobs, commits, notes и wiki_blobs поддерживаются только эндпоинтом проекта, тогда как в интерфейсе поиск по этим областям доступен и глобально, и по группе.

Параметры запроса

Общие параметры

Параметр Тип Обязательный Эндпоинты Примечание
search string Да Все Поисковый запрос
scope string Да Все Область поиска. Доступные значения описаны в таблице выше
confidential boolean Нет Все Передаётся в службу поиска
include_archived boolean Нет Инстанс, группа Параметр недоступен для поиска по проекту
page / per_page integer Нет Все Постраничный вывод со смещением (offset)
ref string Нет Проект Ветка или тег для поиска в проекте
state string Нет Все Состояние объекта: all, opened, closed, merged
type array[string] Нет Все Фильтр типа work item (фактически применяется при scope=work_items)

Дополнительные параметры

Поддержка дополнительных параметров зависит от выбранной области поиска. Если параметр передан с неподдерживаемым значением scope, API возвращает ответ 400 с сообщением <param_name> is supported only for <scope list>.

Параметр Тип Применяется к scope Ограничения
author_username string merge_requests Фильтр по автору
exclude_forks boolean work_items, issues Только в этих scope
fields array[string] work_items, issues Поддерживается только значение title. Для других значений API возвращает 400
label_name array[string] work_items, issues, merge_requests Поддерживаются значения через запятую
language array[string] blobs Поддерживаются значения через запятую
not_author_username string merge_requests Исключение по автору
not_source_branch string merge_requests Исключающий фильтр
not_target_branch string merge_requests Исключающий фильтр
num_context_lines integer blobs Поддерживается диапазон 0..20
source_branch string merge_requests Точный фильтр по исходной ветке
target_branch string merge_requests Точный фильтр по целевой ветке

Заголовки ответа

API может возвращать следующие заголовки:

  • X-Search-Type — фактически использованный тип поиска;
  • X-Search-Aggregations — присутствует только когда OpenSearch включён и для выбранной области поиска доступны агрегаты.

Состав агрегатов зависит от значения scope:

Значение scope Агрегаты
blobs language
work_items, issues work_item_type_ids, labels
merge_requests labels

Тело ответа

Эндпоинт возвращает JSON-массив объектов, тип которых зависит от выбранной области поиска:

Значение scope Тип объекта
issues IssueBasic
work_items WorkItem
merge_requests MergeRequestBasic
milestones Milestone
notes Note
commits Commit
blobs Blob
wiki_blobs Blob
projects BasicProjectDetails
users UserBasic
snippet_titles Snippet

Примеры запросов

Поиск по инстансу: issues/work items с метками и полями

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/search?scope=issues&search=deploy&fields=title&label_name=team%3Aplatform&exclude_forks=true"

Поиск по группе: запросы на слияние с фильтрами

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/my-group/-/search?scope=merge_requests&search=release&source_branch=release%2F1.2&not_author_username=bot"

Поиск по проекту: blobs с контекстными строками

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/my-group%2Fmy-project/-/search?scope=blobs&search=deploy&num_context_lines=5&language=Ruby"

Дополнительные ресурсы