Поиск в Deckhouse Code помогает быстро находить нужную информацию по проектам, группам или всему инстансу. Результаты сортируются по релевантности и позволяют сразу перейти к исходному объекту.
Расширенный поиск на базе OpenSearch позволяет:
- находить фрагменты кода во всех доступных проектах;
- отслеживать использование устаревших функций и библиотек;
- искать комментарии в задачах и запросах на слияние;
- находить коммиты по сообщению или SHA;
- искать содержимое wiki-страниц.
Использование расширенного поиска
- Администратор должен включить расширенный поиск (OpenSearch).
Чтобы выполнить поиск:
- В верхней панели выберите «Поиск».
- Введите поисковый запрос.
- Нажмите «Enter».
Расширенный поиск также доступен в контексте проекта или группы.
При включённом OpenSearch Deckhouse Code использует его как бэкенд для расширенных областей поиска (задачи, запросы на слияние, код и другие). Параметры REST API, фильтры и формат ответа описаны в разделе «API поиска».
Области поиска
Области описывают тип данных, по которым выполняется поиск.
Базовый поиск
Следующие области доступны в базовом поиске (без OpenSearch):
| Область | Глобальный | Группа | Проект |
|---|---|---|---|
| Код | ✗ | ✗ | ✓ |
| Комментарии | ✗ | ✗ | ✓ |
| Коммиты | ✗ | ✗ | ✓ |
| Задачи | ✓ | ✓ | ✓ |
| Запросы на слияние | ✓ | ✓ | ✓ |
| Этапы (milestones) | ✓ | ✓ | ✓ |
| Проекты | ✓ | ✓ | ✗ |
| Пользователи | ✓ | ✓ | ✓ |
| Wiki | ✗ | ✗ | ✓ |
Расширенный поиск
При включённом OpenSearch доступны следующие области:
| Область | Глобальный | Группа | Проект |
|---|---|---|---|
| Код | ✓ | ✓ | ✓ |
| Комментарии | ✓ | ✓ | ✓ |
| Коммиты | ✓ | ✓ | ✓ |
| Задачи | ✓ | ✓ | ✓ |
| Запросы на слияние | ✓ | ✓ | ✓ |
| Этапы (milestones) | ✓ | ✓ | ✓ |
| Проекты | ✓ | ✓ | ✗ |
| Пользователи | ✓ | ✓ | ✓ |
| Wiki | ✓ | ✓ | ✓ |
Поиск по коду, коммитам, wiki и комментариям при включённом OpenSearch выполняется через OpenSearch и учитывает матрицу доступа. Пользователи видят только те объекты, к которым у них есть права на чтение. Поиск по задачам, запросам на слияние и другим сущностям выполняется через базу данных.
Таблицы выше описывают области поиска в веб-интерфейсе. Набор областей в REST API отличается: поиск по коду, коммитам, комментариям и wiki доступен там только на уровне проекта. Подробнее — в разделе «Области поиска в API».
Использование поиска
Общий порядок работы с поиском в Deckhouse Code:
- Нажмите «Поиск» в верхней панели.
- Введите поисковый запрос.
- Нажмите «Enter» — результаты появятся на странице поиска.
- Используйте фильтры для уточнения результатов по группе, проекту или типу объекта.

Глобальный поиск
Позволяет искать по всем проектам и группам инстанса.
- В левом меню выберите «Поиск».
- Введите запрос и нажмите «Enter».
Поиск в проекте
- Перейдите в нужный проект.
- В левом меню выберите «Поиск».
- Введите запрос и нажмите «Enter».
Поиск по группе
- Перейдите в нужную группу.
- В левом меню выберите «Поиск».
- Введите запрос и нажмите «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¬_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"