본문으로 건너뛰기
snowflake검색
AI

Cortex Search (하이브리드 검색 서비스와 RAG)

벡터 검색과 키워드 검색, 재순위화를 묶은 Cortex Search 서비스를 만들고 SQL, Python, REST 로 질의하는 법, 2026년 GA 가 된 다중 인덱스와 사용자 임베딩, 비용 세 갈래와 한도, RAG 와 에이전트에서 쓰는 요령을 정리합니다.

Cortex SearchRAG하이브리드 검색임베딩재순위화검색 서비스2026-10 기준, 약 7분상태 표시 설명

무엇인가

Cortex Search 는 Snowflake 테이블의 텍스트로 낮은 지연의 검색 서비스를 만들어 주는 관리형 기능입니다. 임베딩 생성, 인덱스 갱신, 서빙을 Snowflake 가 맡습니다.

  • 하이브리드 검색: 의미가 비슷한 문서를 찾는 벡터 검색과 단어가 맞는 문서를 찾는 키워드 검색을 함께 쓰고, 상위 결과를 의미 기반 재순위화(reranking) 로 다시 정렬합니다.
  • 점수 조정: 숫자 열 가중치(boost), 시간 감쇠(time decay), 구성 요소 가중치, 재순위화 끄기를 고를 수 있습니다. 2026년 2월부터 구성 요소별 점수(component scores)를 결과로 볼 수 있습니다 (GA).
  • 쓰임: RAG 챗봇의 검색 단계, 사내 검색창, Cortex Agents 와 Snowflake CoWork 의 문서 검색 도구.

만들기

CREATE OR REPLACE CORTEX SEARCH SERVICE support.ticket_search
  ON body                                   -- 검색할 텍스트 열
  ATTRIBUTES product, region, created_at    -- 거르기용 열 (아래 SELECT 에 있어야 함)
  WAREHOUSE = cortex_search_wh              -- 처음 만들기와 갱신용
  TARGET_LAG = '1 hour'                     -- 원본 변경을 얼마나 빨리 반영할지
  EMBEDDING_MODEL = 'snowflake-arctic-embed-l-v2.0'
  AS (
    SELECT ticket_id, body, product, region, created_at
    FROM support.tickets
    WHERE status <> 'SPAM'
  );
  • 기본 임베딩 모델은 snowflake-arctic-embed-m-v1.5 이고, 한국어처럼 영어가 아닌 문서는 다국어 모델(snowflake-arctic-embed-l-v2.0, voyage-multilingual-2 등)을 고릅니다. 지원 모델은 리전마다 다릅니다.
  • 공식 문서는 서비스마다 MEDIUM 이하의 전용 웨어하우스를 권장합니다.
  • 원본 쿼리 결과는 4억 행 미만이어야 합니다. 넘으면 만들기가 실패하고, 늘리려면 계정 팀에 요청합니다.

2026년에 GA 가 된 것

시점기능
2026-03-12한 서비스에 검색 열 여러 개(다중 인덱스), 미리 계산한 사용자 임베딩, 에이전트용 검색 도구 강화 (호출마다 서비스 선택, 필터, 반환 열, 결과 수 최대 500)
2026-04-14Cortex Search 서비스 복제
2026-05-18Batch Cortex Search (대량 질의를 한 번에)
2026-05-11서빙 자동 일시 중지와 재개 (PuPr)

질의하기

-- SQL 로 미리 보기
SELECT PARSE_JSON(
  SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
    'support.ticket_search',
    '{"query": "결제 후 환불이 안 돼요", "columns": ["ticket_id", "body"],
      "filter": {"@eq": {"region": "KR"}}, "limit": 5}'
  )
):results;
from snowflake.core import Root
svc = (Root(session).databases["SUPPORT_DB"].schemas["SUPPORT"]
       .cortex_search_services["TICKET_SEARCH"])
resp = svc.search(query="결제 후 환불이 안 돼요", columns=["ticket_id", "body"],
                  filter={"@eq": {"region": "KR"}}, limit=5)
print(resp.to_json())

앱에서는 REST API 로 부르고, 인증은 키 페어 JWT, OAuth, PAT 를 씁니다. 필터 연산자는 @eq, @contains, @gte, @lte, @and, @or, @not 등이 있습니다.

RAG 로 묶기

WITH ctx AS (
  SELECT LISTAGG(r.value:body::STRING, '\n---\n') AS docs
  FROM TABLE(FLATTEN(PARSE_JSON(SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
         'support.ticket_search', '{"query": "환불 절차", "columns": ["body"], "limit": 5}')):results)) r
)
SELECT AI_COMPLETE('claude-sonnet-4-5',
  '아래 사례만 근거로 환불 절차를 3단계로 설명해 줘. 근거가 없으면 모른다고 답해.\n' || docs)
FROM ctx;

SEARCH_PREVIEW 는 이름 그대로 확인용입니다. 운영 RAG 는 REST API 나 Python SDK, 또는 Cortex Agents 의 검색 도구로 구현합니다. 모델 이름은 예시이고 리전의 지원 목록을 확인합니다.

비용

항목과금줄이는 법
서빙인덱스된 압축 전 데이터(임베딩 포함) GB 당 월 요금. 질의가 없어도 서비스가 떠 있으면 과금 (Consumption Table 기준 GB 당 월 6.3 AI Credits)필요한 열만 넣기, 오래된 문서 제외, 자동 일시 중지
임베딩임베딩한 토큰 수. 바뀐 행만 다시 임베딩자주 바뀌는 열을 검색 열에서 빼기
웨어하우스초기화, 갱신, 인덱스 빌드. 바뀐 것이 없으면 크레딧 없음TARGET_LAG 를 업무에 맞게 길게
  • 2026년 7월 Cortex Search 에도 리소스 예산(resource budgets)을 걸 수 있게 되었습니다.
  • 서빙 자동 일시 중지(PuPr)는 최소 1,800초(30분) 이고, 멈춘 서비스의 첫 질의는 재개를 기다리며 동시에 온 요청은 HTTP 429 와 Retry-After 를 받습니다. 재개에 몇 분 걸릴 수 있습니다.

한도와 성능

  • 처리량은 서비스당 20 QPS, 계정 전체 140 QPS 입니다. 넘으면 HTTP 429 가 나오므로 클라이언트에서 지수 백오프로 재시도합니다.
  • 청크 크기는 512 토큰 안팎이 일반적인 출발점입니다. 너무 크면 검색 정밀도가, 너무 작으면 문맥이 떨어집니다.
  • 문서 원본 경로나 페이지 번호를 ATTRIBUTES 나 반환 열로 넣어 두면 답에 출처를 붙이기 쉽습니다.

트러블슈팅

  • 증상: 원본 테이블을 고쳤는데 검색 결과가 그대로입니다.

  • 원인: TARGET_LAG 가 길거나 서비스 갱신이 실패했습니다.

  • 해결: DESC CORTEX SEARCH SERVICE 로 마지막 갱신 시각과 상태를 보고, 급하면 ALTER CORTEX SEARCH SERVICE ... REFRESH 를 실행합니다.

  • 증상: 한국어 질의 정확도가 낮습니다.

  • 원인: 영어 중심 임베딩 모델을 썼거나 청크가 너무 깁니다.

  • 해결: 다국어 임베딩 모델로 서비스를 다시 만들고, 문서를 문단 단위로 나눠 넣습니다.

공식 문서

이 문서에서