Zoekt

Tier: 프리미엄, 얼티밋 Offering: Self-Managed Status: Beta

경고: 이 기능은 베타 상태이며 사전 통지 없이 변경될 수 있습니다. 자세한 정보는 에픽 9404를 참조하십시오.

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

이 통합을 통해 GitLab에서 코드를 검색하는 데 고급 검색 대신 정확한 코드 검색을 사용할 수 있습니다. 그룹이나 저장소에서 코드를 검색하기 위해 정확한 일치 및 정규 표현식 모드를 사용할 수 있습니다.

Zoekt 설치

전제 조건:

  • 인스턴스에 관리자 액세스해야 함.

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

정확한 코드 검색 활성화

전제 조건:

  • 인스턴스에 관리자 액세스해야 함.
  • Zoekt를 설치해야 함.

GitLab에서 정확한 코드 검색을 활성화하는 방법:

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

오프라인 노드 자동 삭제

전제 조건:

  • 인스턴스에 관리자 액세스해야 함.

12시간 이상 오프라인인 Zoekt 노드 및 관련 인덱스, 저장소 및 작업을 자동으로 삭제할 수 있습니다.

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

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

루트 네임스페이스 자동 색인

전제 조건:

  • 인스턴스에 관리자 액세스해야 함.

기존 및 새 루트 네임스페이스를 자동으로 인덱싱할 수 있습니다. 모든 루트 네임스페이스를 자동으로 인덱싱하려면:

  1. 왼쪽 사이드바에서 가장 아래쪽에서 관리자를 선택합니다.
  2. 설정 > 검색을 선택합니다.
  3. 정확한 코드 검색 구성을 확장합니다.
  4. 루트 네임스페이스 자동으로 인덱싱 확인란을 선택합니다.
  5. 변경 사항 저장을 선택합니다.

이 설정을 비활성화하면:

  • 기존의 루트 네임스페이스는 색인됨.
  • 새로운 루트 네임스페이스는 더 이상 색인되지 않음.

인덱싱 일시 중지

전제 조건:

  • 인스턴스에 관리자 액세스해야 함.

정확한 코드 검색을 일시적으로 중지하려면:

  1. 왼쪽 사이드바에서 가장 아래쪽에서 관리자를 선택합니다.
  2. 설정 > 검색을 선택합니다.
  3. 정확한 코드 검색 구성을 확장합니다.
  4. 정확한 코드 검색을 위한 인덱싱 일시 중지 확인란을 선택합니다.
  5. 변경 사항 저장을 선택합니다.

정확한 코드 검색에 대한 인덱싱을 중지하면 리포지토리의 모든 변경 사항이 대기열에 추가됩니다. 인덱싱을 재개하려면 정확한 코드 검색을 위한 인덱싱 일시 중지 확인란을 해제합니다.

동시 인덱싱 작업 설정

전제 조건:

  • 인스턴스에 관리자 액세스해야 함.

Zoekt 노드의 CPU 용량에 상대적으로 일치하는 동시 인덱싱 작업 수를 설정할 수 있습니다.

높은 배수는 더 많은 작업이 동시에 실행될 수 있음을 의미하며, 이는 증가된 CPU 사용량을 희생하고 색인 처리량을 향상시킵니다. 기본값은 1.0 (CPU 코어 당 하나의 태스크)입니다.

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

  1. 왼쪽 사이드바에서 가장 아래쪽에서 관리자를 선택합니다.
  2. 설정 > 검색을 선택합니다.
  3. 정확한 코드 검색 구성을 확장합니다.
  4. 인덱싱 CPU에 대한 작업 배수 텍스트 상자에 값을 입력합니다.

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

  5. 변경 사항 저장을 선택합니다.

문제 해결

Zoekt를 사용할 때 다음과 같은 문제가 발생할 수 있습니다.

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

설정을 활성화하면 새 네임스페이스가 자동으로 색인됩니다. 네임스페이스가 자동으로 색인되지 않은 경우, Sidekiq 로그를 검사하여 작업이 처리되고 있는지 확인하십시오. Search::Zoekt::SchedulingWorker는 네임스페이스를 색인화하는 데 책임이 있습니다.

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

  • 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('<인덱싱할 최상위 그룹>')
Search::Zoekt::EnabledNamespace.find_or_create_by(namespace: namespace)