Zoekt

Tier: Premium, Ultimate Offering: Self-managed
Status: Beta
caution
이 기능은 베타 상태이며 예고 없이 변경될 수 있습니다.
자세한 내용은 에픽 9404을 참조하세요.

Zoekt는 코드를 검색하기 위해 특별히 설계된 오픈 소스 검색 엔진입니다.

이 통합을 사용하면 GitLab에서 정확한 코드 검색 대신 고급 검색를 사용할 수 있습니다.
그룹 또는 리포지토리에서 코드를 검색하기 위해 정확한 일치 및 정규 표현식 모드를 사용할 수 있습니다.

Zoekt 설치

Prerequisites:

  • 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.

GitLab에서 정확한 코드 검색을 활성화하려면,
최소한 하나의 Zoekt 노드가 인스턴스에 연결되어 있어야 합니다.
다음 설치 방법이 Zoekt에 지원됩니다:

정확한 코드 검색 활성화

Prerequisites:

  • 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
  • Zoekt 설치가 필요합니다.

GitLab에서 정확한 코드 검색을 활성화하려면:

  1. 왼쪽 사이드바 하단에서 관리자를 선택합니다.
  2. 설정 > 검색을 선택합니다.
  3. 정확한 코드 검색 구성을 확장합니다.
  4. 정확한 코드 검색을 위한 인덱싱 활성화정확한 코드 검색 활성화 체크박스를 선택합니다.
  5. 변경 사항 저장을 선택합니다.

오프라인 노드 자동 삭제

Prerequisites:

  • 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.

12시간 이상 오프라인인 Zoekt 노드와 관련된 인덱스, 리포지토리 및 작업을 자동으로 삭제할 수 있습니다.

오프라인 노드를 자동으로 삭제하려면:

  1. 왼쪽 사이드바 하단에서 관리자를 선택합니다.
  2. 설정 > 검색을 선택합니다.
  3. 정확한 코드 검색 구성을 확장합니다.
  4. 12시간 후 자동으로 오프라인 노드 삭제 체크박스를 선택합니다.
  5. 변경 사항 저장을 선택합니다.

루트 네임스페이스 자동 인덱싱

사전 조건:

  • 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.

기존 및 새로운 루트 네임스페이스를 자동으로 인덱싱할 수 있습니다.

모든 루트 네임스페이스를 자동으로 인덱싱하려면:

  1. 왼쪽 사이드바 하단에서 Admin을 선택합니다.
  2. Settings > Search를 선택합니다.
  3. Exact code search configuration을 확장합니다.
  4. Index root namespaces automatically 체크박스를 선택합니다.
  5. Save changes를 선택합니다.

이 설정을 비활성화하면:

  • 기존 루트 네임스페이스는 인덱싱된 상태로 유지됩니다.
  • 새로운 루트 네임스페이스는 더 이상 인덱싱되지 않습니다.

인덱싱 일시 중지

사전 조건:

  • 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.

정확한 코드 검색을 위한 인덱싱을 일시 중지하려면:

  1. 왼쪽 사이드바 하단에서 Admin을 선택합니다.
  2. Settings > Search를 선택합니다.
  3. Exact code search configuration을 확장합니다.
  4. Pause indexing for exact code search 체크박스를 선택합니다.
  5. Save changes를 선택합니다.

정확한 코드 검색을 위한 인덱싱을 일시 중지하면, 리포지토리의 모든 변경 사항이 대기열에 추가됩니다.
인덱싱을 재개하려면 Pause indexing for exact code search 체크박스를 해제합니다.

동시 인덱싱 작업 설정

사전 조건:

  • 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.

Zoekt 노드의 CPU 용량에 따라 동시 인덱싱 작업의 수를 설정할 수 있습니다.

더 높은 배수는 더 많은 작업이 동시에 실행될 수 있음을 의미하며, 이는 CPU 사용량이 증가하는 대가로 인덱싱 처리량을 개선합니다.
기본 값은 1.0 (CPU 코어당 하나의 작업)입니다.

노드의 성능 및 작업 부하에 따라 이 값을 조정할 수 있습니다.
동시 인덱싱 작업의 수를 설정하려면:

  1. 왼쪽 사이드바 하단에서 Admin을 선택합니다.
  2. Settings > Search를 선택합니다.
  3. Exact code search configuration을 확장합니다.
  4. Indexing CPU to tasks multiplier 텍스트 상자에 값을 입력합니다.

    예를 들어, Zoekt 노드가 4개의 CPU 코어를 가지고 있고 배수가 1.5인 경우,
    해당 노드의 동시 작업 수는 6입니다.

  5. Save changes를 선택합니다.

문제 해결

Zoekt와 작업할 때 다음과 같은 문제를 만날 수 있습니다.

네임스페이스가 인덱싱되지 않음

설정을 활성화하면, 새로운 네임스페이스가 자동으로 인덱싱됩니다.
네임스페이스가 자동으로 인덱싱되지 않는 경우, 작업이 처리되고 있는지 Sidekiq 로그를 검사하세요.
Search::Zoekt::SchedulingWorker가 네임스페이스 인덱싱을 담당합니다.

레일스 콘솔 세션에서 다음을 확인할 수 있습니다:

  • Zoekt가 활성화되지 않은 네임스페이스:

    Namespace.group_namespaces.root_namespaces_without_zoekt_enabled_namespace
    
  • Zoekt 인덱스의 상태:

    Search::Zoekt::Index.all.pluck(:state, :namespace_id)
    

네임스페이스를 수동으로 인덱싱하려면, 다음 명령을 실행하세요:

namespace = Namespace.find_by_full_path('<top-level-group-to-index>')
Search::Zoekt::EnabledNamespace.find_or_create_by(namespace: namespace)