Поиск в 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 IDblob: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
projectsPostgreSQL
usersPostgreSQL
snippet_titlesPostgreSQL
issuesOpenSearch (advanced)
work_itemsOpenSearch (advanced)
merge_requestsOpenSearch (advanced)
milestonesOpenSearch (advanced)
notesOpenSearch (advanced)
wiki_blobsOpenSearch (advanced)
commitsOpenSearch (advanced)
blobsOpenSearch (advanced)

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

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

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

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

ПараметрТипОбязательныйЭндпоинтыПримечание
searchstringДаВсеПоисковый запрос
scopestringДаВсеОбласть поиска. Доступные значения описаны в таблице выше
confidentialbooleanНетВсеПередаётся в службу поиска
include_archivedbooleanНетИнстанс, группаПараметр недоступен для поиска по проекту
page / per_pageintegerНетВсеПостраничный вывод со смещением (offset)
refstringНетПроектВетка или тег для поиска в проекте
statestringНетВсеСостояние объекта: all, opened, closed, merged
typearray[string]НетВсеФильтр типа work item (фактически применяется при scope=work_items)

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

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

ПараметрТипПрименяется к scopeОграничения
author_usernamestringmerge_requestsФильтр по автору
exclude_forksbooleanwork_items, issuesТолько в этих scope
fieldsarray[string]work_items, issuesПоддерживается только значение title. Для других значений API возвращает 400
label_namearray[string]work_items, issues, merge_requestsПоддерживаются значения через запятую
languagearray[string]blobsПоддерживаются значения через запятую
not_author_usernamestringmerge_requestsИсключение по автору
not_source_branchstringmerge_requestsИсключающий фильтр
not_target_branchstringmerge_requestsИсключающий фильтр
num_context_linesintegerblobsПоддерживается диапазон 0..20
source_branchstringmerge_requestsТочный фильтр по исходной ветке
target_branchstringmerge_requestsТочный фильтр по целевой ветке

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

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

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

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

Значение scopeАгрегаты
blobslanguage
work_items, issueswork_item_type_ids, labels
merge_requestslabels

Тело ответа

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

Значение scopeТип объекта
issuesIssueBasic
work_itemsWorkItem
merge_requestsMergeRequestBasic
milestonesMilestone
notesNote
commitsCommit
blobsBlob
wiki_blobsBlob
projectsBasicProjectDetails
usersUserBasic
snippet_titlesSnippet

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

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

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

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

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

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