정확한 코드 검색 개발 가이드라인
이 페이지는 Zoekt로 구동되는 정확한 코드 검색을 개발하고 사용하는 방법에 대한 정보를 포함합니다. 정확한 코드 검색을 활성화하고 초기 인덱싱을 수행하는 방법은 통합 문서를 참조하세요. GDK에서 Zoekt 활성화 및 구성.
이 페이지는 Zoekt로 구동되는 정확한 코드 검색을 개발하고 사용하는 방법에 대한 정보를 포함합니다.
정확한 코드 검색을 활성화하고 초기 인덱싱을 수행하는 방법은 통합 문서를 참조하세요.
개발 환경 설정#
개발 환경을 설정하려면:
-
GDK에서 두 개의
gitlab-zoekt-indexer와 두 개의gitlab-zoekt-webserver프로세스가 실행 중인지 확인합니다:gdk status -
Zoekt의 로그를 실시간으로 보려면 이 명령을 실행합니다:
tail -f log/zoekt.log
Rake 태스크#
gitlab:zoekt:info: 정확한 코드 검색, Zoekt 노드, 인덱싱 상태 및 피처 플래그 상태에 대한 정보를 출력합니다. 노드 또는 인덱싱 문제를 디버그하는 데 사용합니다.bin/rake "gitlab:zoekt:info[10]": 감시 모드에서 태스크를 실행합니다. 초기 인덱싱 중 진행 상황을 모니터링하는 데 사용합니다.
디버깅 및 문제 해결#
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"
}
]
}'
