Other Vector Indexes¶
이 페이지는 Vamana 외 vector 인덱스의 생성 문법과 주요 옵션을 다룹니다.
HNSW¶
HNSW는 그래프 기반 ANN 인덱스입니다. 아래 예제는 L2 distance용 vector_l2_ops를 사용합니다.
CREATE INDEX items_embedding_hnsw_idx
ON items
USING vectoron (embedding vector_l2_ops)
WITH (options = $$
[indexing.hnsw]
m = 12
ef_construction = 300
$$);
| Option | Default | 설명 |
|---|---|---|
indexing.hnsw.m |
12 |
노드마다 유지하는 graph edge 수의 상한입니다. 값이 클수록 index memory 사용량과 build time이 증가합니다. |
indexing.hnsw.ef_construction |
300 |
인덱스 구축 중 후보 탐색 폭입니다. 값이 클수록 build time이 길어지고 graph 연결 구조가 달라집니다. |
IVF¶
IVF는 벡터를 cluster로 나누고 query time에 일부 cluster를 탐색하는 ANN 인덱스입니다. nlist는 build-time option이고, 검색할 cluster 수는 vectoron.ivf_nprobe로 조정합니다.
CREATE INDEX items_embedding_ivf_idx
ON items
USING vectoron (embedding vector_l2_ops)
WITH (options = $$
[indexing.ivf]
nlist = 1000
$$);
| Option | Default | 설명 |
|---|---|---|
indexing.ivf.nlist |
1000 |
IVF가 생성하는 cluster 수입니다. 값이 클수록 cluster당 평균 후보 수는 줄고 build time과 index metadata 비용은 증가합니다. |
Flat¶
Flat은 small dataset이나 ANN validation에서 exact baseline으로 사용합니다. 데이터가 커질수록 CPU 비용이 직접 증가합니다.
CREATE INDEX items_embedding_flat_idx
ON items
USING vectoron (embedding vector_l2_ops)
WITH (options = $$
[indexing.flat]
$$);
Sparse Inverted Index¶
Sparse Inverted Index는 svector 컬럼의 dot-product ordering에 사용하는 인덱스입니다. 예제는 svector_dot_ops와 <#>를 사용합니다.
CREATE TABLE sparse_items (
id bigserial PRIMARY KEY,
embedding svector(10) NOT NULL
);
INSERT INTO sparse_items (embedding) VALUES
('{1:0.1}/10'::svector),
('{9:0.5}/10'::svector);
CREATE INDEX sparse_items_embedding_idx
ON sparse_items
USING vectoron (embedding svector_dot_ops)
WITH (options = $$
[indexing.sparse_inverted_index]
$$);
인덱스 요약¶
| Index | 용도 | 주요 조정값 |
|---|---|---|
| HNSW | L2, dot product, cosine distance를 사용하는 dense vector workload | indexing.hnsw.m, indexing.hnsw.ef_construction, vectoron.hnsw_ef_search |
| IVF | build-time cluster 수와 query-time scan 범위를 분리해서 조정하는 workload | indexing.ivf.nlist, vectoron.ivf_nprobe |
| Flat | 작은 데이터셋, exact baseline, ANN 결과 검증 | 없음 |
| Sparse Inverted Index | svector 컬럼에 <#> Ordering을 사용하는 workload |
없음 |