STL_SORT
STL_SORT 인덱스는 데이터를 정렬된 순서로 구성하여 Milvus 내의 숫자 필드(INT8, INT16 등), VARCHAR 필드 또는 TIMESTAMPTZ 필드에 대한 쿼리 성능을 향상시키기 위해 특별히 고안된 인덱스 유형입니다.
자주 쿼리를 실행하는 경우 STL_SORT 인덱스를 사용하세요:
==,!=,>,<,>=,<=연산자를 사용한 비교 필터링IN및LIKE연산자를 사용한 범위 필터링
지원되는 데이터 유형
숫자 필드(예:
INT8,INT16,INT32,INT64,FLOAT,DOUBLE). 자세한 내용은 부울 및 숫자 필드를 참조하세요.VARCHAR필드. 자세한 내용은 문자열 필드를 참조하십시오.TIMESTAMPTZ필드. 자세한 내용은 타임스탬프 필드를 참조하십시오.
작동 방식
Milvus는 STL_SORT 을 두 단계로 구현합니다:
인덱스 구축
수집하는 동안 Milvus는 색인된 필드에 대한 모든 값을 수집합니다.
값은 C++ STL의 std::sort를 사용하여 오름차순으로 정렬됩니다.
각 값은 해당 엔티티 ID와 쌍을 이루며, 정렬된 배열은 인덱스로 유지됩니다.
쿼리 가속화
쿼리 시 Milvus는 정렬된 배열에 대해 이진 검색(std::lower_bound 및 std::upper_bound)을 사용합니다.
같음의 경우, Milvus는 일치하는 모든 값을 빠르게 찾습니다.
범위의 경우, Milvus는 시작 위치와 끝 위치를 찾아 그 사이의 모든 값을 반환합니다.
일치하는 엔티티 ID는 최종 결과 어셈블리를 위해 쿼리 실행기로 전달됩니다.
이렇게 하면 쿼리 복잡성이 O(n) (전체 스캔)에서 O(log n + m)로 감소하며, 여기서 m은 일치하는 항목의 수입니다.
STL_SORT 인덱스 생성
숫자 또는 TIMESTAMPTZ 필드에 STL_SORT 인덱스를 만들 수 있습니다. 추가 매개변수는 필요하지 않습니다.
아래 예는 TIMESTAMPTZ 필드에 STL_SORT 인덱스를 만드는 방법을 보여줍니다:
from pymilvus import MilvusClient
client = MilvusClient(uri="http://localhost:19530") # Replace with your server address
# Assume you have defined a TIMESTAMPTZ field named "tsz" in your collection schema
# Prepare index parameters
index_params = client.prepare_index_params()
# Add RTREE index on the "tsz" field
index_params.add_index(
field_name="tsz",
index_type="STL_SORT", # Index for TIMESTAMPTZ
index_name="tsz_index", # Optional, name your index
params={} # No extra params needed
)
# Create the index on the collection
client.create_index(
collection_name="tsz_demo",
index_params=index_params
)
인덱스 삭제
컬렉션에서 기존 인덱스를 제거하려면 drop_index() 메서드를 사용합니다.
client.drop_index(
collection_name="tsz_demo", # Name of the collection
index_name="tsz_index" # Name of the index to drop
)