콘텐츠로 이동

쿼리(Query) 및 검색(Search)

Show:

Query & Search API를 사용하면 버킷(bucket)에 자연어(natural-language) 질문을 던지고, 출처 인용(citation)이 포함된 답변용 컨텍스트(context)를 받을 수 있습니다. Schift는 임베딩(embedding), 하이브리드 검색(hybrid retrieval), 메타데이터 필터링(metadata filtering), 재정렬(reranking), 컨텍스트 패킹(context packing), 인용 형식화(citation formatting)까지 전체 검색(retrieval) 파이프라인을 관리합니다.

이 엔드포인트(endpoint)는 사용자 대면 검색, 에이전트 컨텍스트(context) 조립, 버킷(bucket) 콘텐츠에서 인용이 포함된 답변이 필요한 모든 통합(integration)에 사용하세요.

버전상태설명
v2현재(Current)contextcitations를 포함하는 사용자 중심 검색입니다. 모든 신규 통합(integration)에 사용하세요.
v1폐기 예정(Deprecated)POST /v1/query, POST /v1/collections/\{name\}/search, POST /v1/buckets/\{bucket_id\}/search. 기존 클라이언트만을 위해 유지됩니다.

참고: v1 검색 엔드포인트는 Deprecation, Sunset, Warning 헤더와 v2 후속 엔드포인트를 가리키는 Link 헤더를 반환합니다.

버킷(bucket)에 질문을 던지고 인용(citation)이 포함된 답변용 컨텍스트(context)를 반환합니다.

이름타입설명
bucket_idstring검색할 버킷(bucket)의 UUID 또는 슬러그(slug).
필드타입필수기본값설명
querystring자연어(natural-language) 질문. 최대 8,192자.
top_kinteger아니오8반환할 인용 문단(passage)의 최대 개수.
context_budgetinteger아니오2000토큰 단위의 대략적인 최대 컨텍스트(context) 크기.
filtersobject아니오null후보 청크(candidate chunks)에 적용할 메타데이터 필터(metadata filters).
options.rerank.enabledboolean아니오true컨텍스트(context) 조립 전 후보 문단(passage)의 순서를 다시 매깁니다.
options.rerank.top_kinteger아니오null재정렬(rerank)할 후보 문단(passage)의 개수.
options.instructions.taskstring아니오null검색 지침 프리셋: retrieval_query, retrieval_document, semantic_similarity, question_answering, clustering, classification, code_retrieval.
Terminal window
curl -X POST ${API_BASE_URL:-https://api.schift.io}/v2/buckets/product-docs/search \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "What changed in the enterprise plan?",
"top_k": 8,
"context_budget": 4000,
"filters": {"status": "published"},
"options": {
"rerank": {"enabled": true, "top_k": 20},
"instructions": {"task": "retrieval_query"}
}
}'
필드타입설명
statusstring버킷(bucket)이 컨텍스트(context)를 반환했다면 ready, 그렇지 않으면 empty.
operational_statusstringready, empty, indexing, degraded 중 하나.
bucket_idstring검색된 버킷(bucket).
querystring검색된 질문.
contextstring버킷(bucket) 콘텐츠에서 조립한 [1]과 같은 번호 인용이 포함된 답변용 컨텍스트(context).
citationsarray반환된 컨텍스트(context)의 출처 참조.
citations[].indexintegercontext에서 사용된 인용(citation) 번호.
citations[].document_idstring해당 문단(passage)을 뒷받침하는 문서(document).
citations[].source_idstring사용 가능한 경우 업로드된 소스(source) 또는 파일 ID.
citations[].titlestring사람이 읽을 수 있는 소스(source) 제목.
citations[].source_urlstring사용 가능한 경우 소스 URL.
citations[].pageinteger | string소스(source) 내 페이지 또는 위치.
citations[].sectionstring사용 가능한 경우 섹션 제목.
warningsarray준비 상태, 검색(retrieval), 품질 관련 경고.
warnings[].codestring안정적인 기계 판독 가능 경고 코드.
warnings[].messagestring사람이 읽을 수 있는 경고 메시지.
warnings[].severitystringwarning 또는 error.
{
"status": "ready",
"operational_status": "ready",
"bucket_id": "product-docs",
"query": "What changed in the enterprise plan?",
"context": "[1] Enterprise seats now include advanced audit logging. [2] The monthly seat limit was removed for annual contracts.",
"citations": [
{
"index": 1,
"document_id": "doc_042",
"source_id": "upload_123",
"title": "Pricing Notes",
"source_url": null,
"page": 4,
"section": "Enterprise",
"score": 0.91
},
{
"index": 2,
"document_id": "doc_055",
"source_id": "upload_124",
"title": "Contract Terms",
"source_url": null,
"page": 2,
"section": null,
"score": 0.87
}
],
"warnings": []
}
// 400 Bad Request — invalid filter
{
"detail": "Invalid filter: unsupported operator"
}
// 400 Bad Request — unsupported knowledge-search filter key
{
"error": "unsupported_knowledge_search_filter",
"message": "Knowledge search filters must use validated user metadata or documented system filter keys.",
"invalid_keys": ["internal_tag"]
}
// 402 Payment Required
{
"allowed": false,
"reason": "quota_exceeded"
}
// 403 Forbidden
{
"detail": "Search quota unavailable. Upgrade your plan."
}
// 404 Not Found
{
"detail": "Bucket 'product-docs' not found"
}

사용자 트래픽을 본격적으로 보내기 전에 버킷(bucket)에 검색 가능한 콘텐츠가 있는지 확인합니다.

이름타입설명
bucket_idstring확인할 버킷(bucket)의 UUID 또는 슬러그(slug).
Terminal window
curl ${API_BASE_URL:-https://api.schift.io}/v2/buckets/product-docs/search/status \
-H "Authorization: Bearer $SCHIFT_API_KEY"
필드타입설명
statusstring버킷(bucket)에 검색 가능한 콘텐츠가 있으면 ready, 그렇지 않으면 empty.
operational_statusstringready, empty, indexing, degraded 중 하나.
bucket_idstring확인된 버킷(bucket).
indexed_countinteger | null검색 가능한 콘텐츠 항목의 개수.
document_countinteger | null이 버킷(bucket)의 문서(document) 개수.
pending_job_countinteger | null아직 준비 중인 문서(document) 개수.
failed_job_countinteger | null관리가 필요한 문서(document) 개수.
last_indexed_atstring | null콘텐츠가 마지막으로 검색 가능해진 시각.
backfill_requiredboolean기존 문서(document)의 준비가 필요한지 여부.
{
"status": "ready",
"operational_status": "ready",
"bucket_id": "product-docs",
"indexed_count": 1240,
"document_count": 42,
"pending_job_count": 0,
"failed_job_count": 0,
"last_indexed_at": "2026-06-18T09:12:34Z",
"backfill_required": false
}

다음 엔드포인트는 폐기 예정(deprecated)이며 신규 통합(integration)에서 사용하지 마세요:

  • POST /v1/query
  • POST /v1/collections/\{name\}/search
  • POST /v1/buckets/\{bucket_id\}/search

이 경로는 더 낮은 수준의 검색(retrieval) 메커니즘을 노출합니다. v2는 지식 검색(knowledge-search) 제품 API 뒤에 해당 복잡성을 의도적으로 숨깁니다.