벡터 인덱스 생성
이 가이드에서는 Milvus에서 벡터 인덱스를 생성하는 방법을 설명합니다.
벡터 인덱스는 벡터 유사도 검색을 가속화하기 위해 사용되는 메타데이터 조직 단위입니다. 벡터에 대한 인덱스를 생성하지 않으면 Milvus는 무차별 검색을 수행합니다.
기본적으로 Milvus는 1,024개 이하의 행을 가진 세그먼트에 대해 인덱싱을 수행하지 않습니다.
다음 예제는 유클리드 거리(L2)를 사용하여 1,024개의 클러스터로 IVF_FLAT 인덱스를 생성하는 것을 보여줍니다. 적합한 시나리오에 맞는 인덱스 유형과 메트릭 유형을 선택할 수 있습니다.
인덱스 매개변수 준비
다음 단계를 따라 인덱스 매개변수를 준비하세요.
index_params = {
"metric_type":"L2",
"index_type":"IVF_FLAT",
"params":{"nlist":1024}
}
매개변수 | 설명 | 옵션 |
---|---|---|
metric_type |
벡터 유사도를 측정하는 데 사용되는 메트릭 유형 | 부동 소수점 벡터:- L2 (유클리드 거리)- IP (내적)- COSINE (코사인 유사도)이진 벡터:- JACCARD (자카드 거리)- HAMMING (해밍 거리) |
index_type |
벡터 검색을 가속화하기 위해 사용되는 인덱스 유형 | 부동 소수점 벡터:- FLAT (FLAT)- IVF_FLAT (IVF_FLAT)- IVF_SQ8 (IVF_SQ8)- IVF_PQ (IVF_PQ)- GPU_IVF_FLAT* (GPU_IVF_FLAT)- GPU_IVF_PQ*> (GPU_IVF_PQ)- HNSW (HNSW)- DISKANN* (DISKANN)이진 벡터:- BIN_FLAT (BIN_FLAT)- BIN_IVF_FLAT (BIN_IVF_FLAT) |
params |
인덱스의 특정 구성 매개변수 | 자세한 정보는 메모리 내 및 디스크 상의 인덱싱을 참조하세요. |
- DISKANN에는 일정한 전제조건이 있습니다. 자세한 정보는 디스크 상의 인덱싱을 참조하세요.
- GPU_IVF_FLAT 및 GPU_IVF_PQ는 GPU 지원이 활성화된 Milvus 설치에서만 사용할 수 있습니다.
인덱스 생성
인덱스를 생성하려면 벡터 필드 이름과 인덱스 매개변수를 지정하세요.
from pymilvus import Collection, utility
collection = Collection("book")
collection.create_index(
field_name="book_intro",
index_params=index_params
)
utility.index_building_progress("book")
매개변수 | 설명 |
---|---|
field_name |
인덱스를 생성할 벡터 필드의 이름 |
index_params |
생성할 인덱스의 매개변수 |
스칼라 인덱스 생성
벡터와는 달리 스칼라는 크기만 있고 방향은 없습니다. Milvus는 개별 숫자 및 문자열을 스칼라로 고려합니다. Milvus에서 스칼라 필드에 대해 사용 가능한 데이터 유형 목록은 아래와 같습니다.
Milvus v2.1.0부터 하이브리드 검색에서 속성 필터링을 가속화하기 위해 스칼라 필드에 대한 인덱스를 생성할 수 있습니다. 스칼라 필드 인덱싱에 대해 더 읽어보려면 여기를 참조하세요.
참고: "여기"의 링크는 원본 문서에 지정된 실제 링크로 대체되어야 합니다.
인덱스 생성
스칼라 필드에 대한 인덱스를 생성할 때 인덱스 매개변수를 설정할 필요가 없습니다. 스칼라 필드의 기본 인덱스 이름은 default_idx
이며, 이어서 인덱싱된 필드의 이름이 옵니다. 원하는 경우 다른 적합한 값으로 설정할 수 있습니다.
다음 코드 스니펫은 book
이라는 컬렉션이 이미 존재하고 문자열 필드 book_name
에 대해 인덱스를 생성해야 할 때를 가정합니다.
from pymilvus import Collection
collection = Collection("book")
collection.create_index(
field_name="book_name",
index_name="scalar_index",
)
collection.load()
인덱스를 생성한 후에는 아래와 같이 벡터 유사도 검색에서 이 문자열 필드에 대한 부울 표현식을 포함할 수 있습니다.
search_param = {
"data": [[0.1, 0.2]],
"anns_field": "book_intro",
"param": {"metric_type": "L2", "params": {"nprobe": 10}},
"limit": 2,
"expr": "book_name like \"Hello%\"",
}
res = collection.search(**search_param)
인덱스 삭제
from pymilvus import Collection
collection = Collection("book") # 기존 컬렉션을 가져옵니다.
collection.drop_index()