Qdrant 벡터 인덱싱

Qdrant 벡터 인덱싱

Qdrant에서 인덱싱은 벡터를 빠르게 검색하기 위한 핵심 준비 단계예요. 생성한 컬렉션은 페이로드 크기에 따라 먼저 벡터 인덱스를 만든 뒤에 검색이 가능해요. 이 글에서는 인덱스 생성 시점과 인덱싱 파라미터를 다뤄요.

출처: https://qdrant.tech/documentation/guides/vector-indexing/

인덱스 생성 시점

Qdrant는 컬렉션에 생성된 포인트가 일정 수준(기본값 기준)을 넘어야 벡터 인덱스를 자동으로 생성해요. 포인트가 너무 적은 초기 단계에서는 전체 스캔으로 검색하다가, 임계값을 넘으면 HNSW 같은 근사 인덱스를 만들어 성능을 확보해요. 이 과정은 자동이지만 개발 환경에서는 create_collection 요청 시점의 설정을 통해 바로 인덱스를 만들 수도 있어요.

from qdrant_client import QdrantClient
client = QdrantClient(":memory:")

client.create_collection(
    collection_name="my_collection",
    vectors_config={"size": 384, "distance": "Cosine"},
    on_disk_payload=True,
)

인덱스 파라미터

벡터 인덱스의 세부 동작은 컬렉션 생성 시 hnsw_config로 제어해요.

client.create_collection(
    collection_name="my_collection",
    vectors_config={"size": 384, "distance": "Cosine"},
    hnsw_config={
        "m": 16,                 # 그래프의 최대 연결 수
        "ef_construct": 100,     # 인덱스 빌드 시 탐색 폭
        "full_scan_threshold": 10000,  # 전체 스캔으로 전환할 임계값
        "max_indexing_threads": 0,
    },
)

mef_construct가 클수록 검색 품질(리콜)은 좋아지지만 메모리와 빌드 시간이 커져요. 서비스의 지연·메모리 예산에 맞춰 값을 조절하는 게 좋아요.

인덱스 리빌드

이미 만들어진 컬렉션의 인덱스 설정을 바꾸려면 update_collection으로 hnsw_config를 갱신하면 돼요. 새 설정은 다음 리빌드 때 반영돼요. 검색 품질을 올리기 위해 ef_construct를 키우거나, 메모리를 줄이기 위해 양자화(quantization)로 스칼라 8비트를 적용할 수 있어요.

client.update_collection(
    collection_name="my_collection",
    hnsw_config={"ef_construct": 200},
)

더 알아보기

  • Qdrant의 다양한 벡터 인덱스 전략과 설정은 concepts/indexing 문서에서 이어서 보세요.
  • 스칼라·제품·이진 양자화는 concepts/quantization 문서에서 확인하세요.