정확한 코드 검색 개발 가이드라인
GitLab v19.2이 페이지는 Zoekt로 구동되는 정확한 코드 검색을 개발하고 사용하는 방법에 대한 정보를 포함합니다. 정확한 코드 검색을 활성화하고 초기 인덱싱을 수행하는 방법은 통합 문서를 참조하세요. GDK에서 Zoekt 활성화 및 구성.
이 페이지는 Zoekt로 구동되는 정확한 코드 검색을 개발하고 사용하는 방법에 대한 정보를 포함합니다.
정확한 코드 검색을 활성화하고 초기 인덱싱을 수행하는 방법은 통합 문서를 참조하세요.
개발 환경 설정#
개발 환경을 설정하려면:
-
GDK에서 두 개의
gitlab-zoekt-indexer와 두 개의gitlab-zoekt-webserver프로세스가 실행 중인지 확인합니다:gdk status -
Zoekt의 로그를 실시간으로 보려면 이 명령을 실행합니다:
tail -f log/zoekt.log
Rake 태스크#
감시 모드 및 종료 코드를 포함한 gitlab:zoekt:info 및 gitlab:zoekt:health Rake 태스크에 대한 자세한 내용은 인덱싱 상태 확인 및 상태 점검 실행을 참조하세요.
디버깅 및 문제 해결#
Zoekt 쿼리 디버그#
ZOEKT_CLIENT_DEBUG 환경 변수는 개발 또는 테스트 환경에서 Zoekt 클라이언트의 디버그 옵션을 활성화합니다.
요청은 log/zoekt.log 파일에 기록됩니다.
스펙 실행 또는 Rails 콘솔 시작 전에 코드나 테스트에서 Zoekt 웹서버용으로 생성된 HTTP 쿼리를 디버그하려면:
ZOEKT_CLIENT_DEBUG=1 bundle exec rspec ee/spec/services/ee/search/group_service_blob_and_commit_visibility_spec.rb
export ZOEKT_CLIENT_DEBUG=1
rails console
Zoekt 웹서버에 직접 요청 보내기#
개발 환경에서 두 개의 인덱서(포트 6080 및 6081)와 두 개의 웹서버(포트 6090 및 6091) 프로세스가 시작됩니다.
두 포트 중 하나를 사용하여 웹서버(테스트 웹서버 포함)에 직접 검색 요청을 보낼 수 있습니다:
- Rails 콘솔을 열고 만료되지 않는 JWT를 생성합니다 (프로덕션 또는 테스트 환경에서는 절대 수행해서는 안 됩니다):
::Search::Zoekt::JwtAuth::ZOEKT_JWT_SKIP_EXPIRY=true; ::Search::Zoekt::JwtAuth.authorization_header
=> "Bearer YOUR_JWT"
- JWT를 사용하여 Zoekt 웹서버 중 하나에 요청을 보냅니다. JSON 요청에는 다음 필드가 포함됩니다:
version- 웹서버가 요청을 처리하는 방법에 대한 결정을 내리는 데 사용하는 값timeout- 검색 요청이 시간 초과되기 전의 시간num_context_lines- Zoekt API의NumContextLines에 매핑max_file_match_window- 결과 집계 중 파일 매치에 대한 조기 종료 한계(후처리 전용). 여러 검색 노드에서 결과를 결합할 때 전체 파일 수가 이 임계값에 도달하면 검색을 조기에 취소합니다.max_file_match_results- 반환된 파일 결과의 최종 수에 대한 후처리 한계. 모든 검색이 완료되고 결과가 결합된 후 파일 결과를 이 최대 수로 자릅니다.max_line_match_window- 검색 수집 중 라인 매치에 대한 조기 종료 한계. 모든 검색 노드에 걸친 총 라인 매치 수가 이 임계값에 도달하면 검색이 즉시 취소됩니다. Zoekt API의TotalMaxMatchCount에 매핑.max_line_match_window는 일관된 결과를 얻기 위해max_line_match_results보다 높아야 합니다.max_line_match_results- 모든 파일에 걸쳐 반환된 라인 매치의 총 수에 대한 후처리 한계. 검색 완료 후 개별 파일당max_line_match_results_per_file을 존중하면서 반환된 총 라인 매치 수를 제한합니다.max_line_match_results_per_file- 파일당 최대 라인 매치 결과.blobSearchGraphQL API의chunkCount에 매핑.query- 검색어, 인가 및 필터가 포함된 검색 쿼리endpoint- 요청에 응답하는 Zoekt 웹서버
curl --request POST \
--url "http://127.0.0.1:6090/webserver/api/v2/search" \
--header 'Content-Type: application/json' \
--header 'Gitlab-Zoekt-Api-Request: Bearer YOUR_JWT' \
--data '{
"version": 2,
"timeout": "120s",
"num_context_lines": 1,
"max_file_match_window": 1000,
"max_file_match_results": 5000,
"max_line_match_window": 500,
"max_line_match_results": 5000,
"max_line_match_results_per_file": 3,
"forward_to": [
{
"query": {
"and": {
"children": [
{
"query_string": {
"query": "\\.gitmodules"
}
},
{
"or": {
"children": [
{
"or": {
"children": [
{
"meta": {
"key": "repository_access_level",
"value": "10"
}
},
{
"meta": {
"key": "repository_access_level",
"value": "20"
}
}
]
},
"_context": {
"name": "admin_branch"
}
}
]
}
},
{
"meta": {
"key": "archived",
"value": "f"
}
},
{
"meta": {
"key": "traversal_ids",
"value": "^259-"
},
"_context": {
"name": "traversal_ids_for_group"
}
}
]
}
},
"endpoint": "http://127.0.0.1:6070"
}
]
}'