API 레퍼런스

검색 API

IVGraph는 Elasticsearch 기반의 다양한 검색 모드를 제공해요. 전문 검색(BM25), 자동 완성, 의미 검색(벡터), 하이브리드 검색(BM25 + 벡터), 유사도 검색을 지원해요.

인증: 모든 엔드포인트에 JWT가 필요해요.

사전 요건: Elasticsearch가 실행 중이어야 하며, 워크스페이스의 인덱싱이 완료되어 있어야 해요(동기화 후 자동으로 진행돼요).

전문 검색

GET /api/search/

BM25 랭킹을 사용해 제목과 내용으로 노드를 검색해요.

매개변수:

매개변수 유형 필수 여부 기본값 설명
q string 필수 — 검색 쿼리
connection_id UUID 선택 사용자의 첫 번째 연결 검색할 특정 연결
size int 선택 50 최대 결과 수
highlight bool 선택 true 강조 표시된 발췌문 포함
type string 선택 all 필터: page, database 또는 user

예시:

curl -H "Authorization: Bearer <jwt_token>" \
  "https://ivgraph.com/api/search/?q=project+planning&size=10"
import requests

resp = requests.get(
    "https://ivgraph.com/api/search/",
    headers={"Authorization": "Bearer <jwt_token>"},
    params={"q": "project planning", "size": 10}
)
results = resp.json()["results"]
const resp = await fetch(
  "https://ivgraph.com/api/search/?q=project+planning&size=10",
  { headers: { Authorization: "Bearer <jwt_token>" } }
);
const { results } = await resp.json();

응답:

{
  "query": "project planning",
  "total": 8,
  "results": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440001",
      "type": "page",
      "title": "Project Planning Guide",
      "score": 12.5,
      "highlight": "...comprehensive <em>project</em> <em>planning</em> methodology..."
    }
  ]
}

자동 완성

GET /api/search/suggest/

입력하는 동안 접두어를 기준으로 검색어를 자동 완성해요.

매개변수:

매개변수 유형 필수 여부 기본값 설명
q string 필수 — 접두어(최소 2자)
size int 선택 10 최대 추천 검색어 수

예시:

curl -H "Authorization: Bearer <jwt_token>" \
  "https://ivgraph.com/api/search/suggest/?q=pro"

응답:

{
  "prefix": "pro",
  "suggestions": [
    {"id": "uuid-1", "title": "Project Alpha", "type": "page"},
    {"id": "uuid-2", "title": "Product Roadmap", "type": "page"},
    {"id": "uuid-3", "title": "Projects Tracker", "type": "database"}
  ]
}

의미 검색

GET /api/search/semantic/

임베딩을 활용한 벡터 유사도 검색이에요. 단순히 키워드 일치 여부에만 의존하지 않고 개념적으로 유사한 내용을 찾아요.

매개변수:

매개변수 유형 필수 여부 기본값 설명
q string 필수 — 자연어 쿼리
connection_id UUID 선택 사용자의 첫 번째 연결 검색할 연결
size int 선택 10 최대 결과 수

예시:

curl -H "Authorization: Bearer <jwt_token>" \
  "https://ivgraph.com/api/search/semantic/?q=how+do+we+handle+user+onboarding"

응답:

{
  "query": "how do we handle user onboarding",
  "total": 5,
  "search_type": "semantic",
  "results": [
    {"id": "uuid-1", "type": "page", "title": "New User Welcome Flow", "score": 0.89},
    {"id": "uuid-2", "type": "page", "title": "Onboarding Checklist", "score": 0.82}
  ]
}

하이브리드 검색

GET /api/search/hybrid/

BM25 키워드 검색과 의미 기반 벡터 검색을 결합해 두 방식의 장점을 모두 살린 결과를 제공해요.

매개변수: 의미 검색과 동일해요.

예시:

curl -H "Authorization: Bearer <jwt_token>" \
  "https://ivgraph.com/api/search/hybrid/?q=authentication+flow"

유사 노드

GET /api/search/similar/{node_id}/

벡터 임베딩을 기반으로 지정한 노드와 유사한 노드를 찾아요.

매개변수:

매개변수 유형 필수 여부 기본값 설명
node_id UUID 필수 — 기준 노드 ID(URL 경로에 포함)
connection_id UUID 선택 사용자의 첫 번째 연결 검색할 연결
size int 선택 10 최대 결과 수

예시:

curl -H "Authorization: Bearer <jwt_token>" \
  "https://ivgraph.com/api/search/similar/550e8400-e29b-41d4-a716-446655440001/"

페이지 내용

GET /api/search/content/{page_id}/

페이지 내용을 마크다운과 일반 텍스트로 가져와요.

매개변수:

매개변수 유형 필수 여부 설명
page_id UUID 필수 페이지 ID(URL 경로에 포함)

예시:

curl -H "Authorization: Bearer <jwt_token>" \
  "https://ivgraph.com/api/search/content/550e8400-e29b-41d4-a716-446655440001/"

응답:

{
  "page_id": "550e8400-e29b-41d4-a716-446655440001",
  "title": "Project Alpha",
  "markdown": "# Project Alpha\n\nMain project page...",
  "plain_text": "Project Alpha\nMain project page...",
  "has_content": true
}

인덱스 관리

POST /api/search/index/

사용자의 연결에 대한 Elasticsearch 인덱스 재인덱싱을 시작해요.

curl -X POST -H "Authorization: Bearer <jwt_token>" \
  "https://ivgraph.com/api/search/index/"

응답:

{"message": "Indexing complete", "index_name": "ivg_conn-uuid", "indexed_count": 342}

DELETE /api/search/index/

사용자의 연결에 대한 검색 인덱스를 삭제해요.

curl -X DELETE -H "Authorization: Bearer <jwt_token>" \
  "https://ivgraph.com/api/search/index/"

GET /api/search/connections/

사용자의 모든 검색 인덱스 목록을 가져와요.

curl -H "Authorization: Bearer <jwt_token>" \
  "https://ivgraph.com/api/search/connections/"

응답:

{
  "user": "username",
  "connections": [
    {
      "connection_id": "conn-uuid",
      "schema_name": "airbyte_conn_uuid",
      "index_name": "ivg_conn-uuid",
      "document_count": 342,
      "last_sync": "2026-04-10T10:00:00Z"
    }
  ]
}

오류

상태 의미
400 쿼리 매개변수가 누락되었거나 유효하지 않음
401 인증되지 않음
404 연결 또는 페이지를 찾을 수 없음
503 Elasticsearch를 사용할 수 없음