인덱싱

인덱싱 (Indexing)

Weaviate는 여러 종류의 인덱스를 지원해요. 크게 벡터 인덱스역인덱스(inverted index) 두 갈래로 나뉩니다. 벡터 인덱스는 모든 벡터 검색 쿼리를 서비스하고, 역인덱스는 BM25 키워드 쿼리를 지원하거나 필터링을 빠르게 해줍니다. 인덱스는 컬렉션 단위로 구성해요.

출처: 공식문서 - Indexing

상황부터 — 왜 인덱스를 신중히 설정해야 하나

인덱스는 검색을 빠르게 하지만 그 대가로 저장 공간을 더 차지합니다. 대규모 데이터셋일수록, 많이 인덱싱할수록 필요한 저장 공간이 커져요. 핵심 규칙(rule of thumb)은 간단합니다. 특정 필드나 벡터 공간을 쿼리하지 않는다면, 인덱싱하지 마세요.

벡터 인덱스 (Vector indexes)

벡터 인덱스는 모든 벡터 검색 쿼리를 처리하는 구조예요. 세 종류를 이해하면 됩니다.

  • HNSW — 근사 최근접 이웃(ANN) 기반 벡터 인덱스. 대규모 데이터셋에서 잘 확장됩니다. 기본값이에요.
  • Flat — brute-force(완전 탐색) 검색용 벡터 인덱스. 소규모 데이터셋에 유용해요.
  • Dynamic — 데이터셋이 작으면 Flat, 커지면 HNSW로 전환되는 인덱스. 크기 변동에 유연합니다.

이 외에도 메모리 효율을 극대화한 HFresh 인덱스(중심 인덱스에 HNSW를 쓰는 클러스터 기반)가 있어요.

어떤 인덱스를 고를지는 데이터 규모와 쿼리 특성에 따라 달라집니다. (벡터 인덱스 더 보기, 인덱스 선택 가이드)

역인덱스 (Inverted indexes)

역인덱스는 BM25 키워드 검색을 지원하고 필터링을 가속해요. Weaviate에서는 키워드 검색(indexSearchable), 더 빠른 매칭 필터링(indexFilterable), 숫자 범위 필터링(indexRangeFilters) 등이 역인덱스로 구현됩니다.

역인덱스는 컬렉션/속성 레벨에서 구성할 수 있어요. 예를 들어 타임스탬프·null 상태·속성 길이 같은 메타데이터를 필터링용으로 인덱싱할지, 키워드 토큰화 옵션을 어떻게 둘지 정합니다.

구성 팁

  • 컬렉션별로 벡터 인덱스 타입과 역인덱스 설정을 독립적으로 구성.
  • 검색·필터링에 실제로 쓰는 필드만 인덱싱해 저장 공간을 절약.
  • 대규모 데이터셋에서 HNSW(기본)가 유리하고, 소규모·멀티테넌트에선 Flat/Dynamic이 유리.

요약

  • 인덱스 = 벡터 인덱스(검색) + 역인덱스(키워드·필터).
  • HNSW(대규모)/Flat(소규모)/Dynamic(변동)를 규모에 맞게 선택.
  • "쿼리하지 않으면 인덱싱하지 말 것" — 불필요한 인덱스는 저장 공간 낭비.

더 알아보기 (Learn more)