INVERTED
데이터에 대해 자주 필터 쿼리를 수행해야 하는 경우, INVERTED 인덱스를 사용하면 쿼리 성능을 크게 향상시킬 수 있습니다. Milvus는 모든 문서를 스캔하는 대신 반전 인덱스를 사용하여 필터 조건과 일치하는 정확한 레코드를 빠르게 찾습니다.
반전 인덱스를 사용하는 경우
필요할 때 반전 인덱스를 사용하세요:
특정 값으로 필터링할 때: 필드가 특정 값과 같은 모든 레코드 찾기(예:
category == "electronics")텍스트 콘텐츠 필터링:
VARCHAR필드에서 효율적인 검색 수행JSON 필드 값 쿼리: JSON 구조 내의 특정 키에 대한 필터링
성능 이점: INVERTED 인덱스는 전체 컬렉션 스캔이 필요 없기 때문에 대규모 데이터 세트에서 쿼리 시간을 몇 초에서 밀리초로 단축할 수 있습니다.
INVERTED 인덱스의 작동 방식
Milvus의 INVERTED 인덱스는 각각의 고유 필드 값(용어)을 해당 값이 있는 문서 ID 집합에 매핑합니다. 이 구조는 반복되거나 범주형 값이 있는 필드를 빠르게 조회할 수 있게 해줍니다.
다이어그램에서 볼 수 있듯이 이 프로세스는 두 단계로 진행됩니다:
포워드 매핑(ID → 용어): 각 문서 ID는 문서에 포함된 필드 값을 가리킵니다.
역매핑(용어 → ID): Milvus는 고유한 용어를 수집하고 각 용어에서 해당 용어가 포함된 모든 ID로 역매핑을 구축합니다.
예를 들어, 'electronics' 값은 ID 1과 3에 매핑되고 'books'는 ID 2와 5에 매핑됩니다.
반전 인덱스의 작동 방식
특정 값(예: category == "electronics")을 필터링하면 Milvus는 색인에서 해당 용어를 조회하여 일치하는 ID를 직접 검색합니다. 이렇게 하면 전체 데이터 세트를 스캔하지 않아도 되며, 특히 범주형 또는 반복되는 값에 대해 빠른 필터링이 가능합니다.
INVERTED 인덱스는 BOOL, INT8, INT16, INT32, INT64, FLOAT, DOUBLE, VARCHAR, JSON, ARRAY와 같은 모든 스칼라 필드 유형을 지원합니다. 그러나 JSON 필드를 색인하기 위한 인덱스 매개변수는 일반 스칼라 필드와 약간 다릅니다.
JSON이 아닌 필드에 인덱스 생성
JSON이 아닌 필드에 인덱스를 생성하려면 다음 단계를 따르세요:
인덱스 매개변수를 준비합니다:
from pymilvus import MilvusClient client = MilvusClient(uri="http://localhost:19530") # Replace with your server address # Create an empty index parameter object index_params = client.prepare_index_params()INVERTED인덱스를 추가합니다:index_params.add_index( field_name="category", # Name of the field to index index_type="INVERTED", # Specify INVERTED index type index_name="category_index" # Give your index a name )인덱스를 만듭니다:
client.create_index( collection_name="my_collection", # Replace with your collection name index_params=index_params )
JSON 필드에 인덱스 만들기Compatible with Milvus 2.5.11+
JSON 필드 내의 특정 경로에 반전된 인덱스를 만들 수도 있습니다. 이를 위해서는 JSON 경로와 데이터 유형을 지정하기 위한 추가 매개변수가 필요합니다:
# Build index params
index_params.add_index(
field_name="metadata", # JSON field name
index_type="INVERTED",
index_name="metadata_category_index",
params={
"json_path": "metadata[\"category\"]", # Path to the JSON key
"json_cast_type": "varchar" # Data type to cast to during indexing
}
)
# Create index
client.create_index(
collection_name="my_collection", # Replace with your collection name
index_params=index_params
)
지원되는 경로, 데이터 유형 및 제한 사항 등 JSON 필드 인덱싱에 대한 자세한 내용은 JSON 인덱싱을 참조하세요.
인덱스 삭제
컬렉션에서 기존 인덱스를 제거하려면 drop_index() 메서드를 사용합니다.
v2.6.3 이전 버전에서는 스칼라 인덱스를 삭제하기 전에 컬렉션을 해제해야 합니다.
v2.6.4 이상에서는 더 이상 필요하지 않은 경우 컬렉션을 먼저 릴리스할 필요 없이 바로 스칼라 인덱스를 삭제할 수 있습니다.
client.drop_index(
collection_name="my_collection", # Name of the collection
index_name="category_index" # Name of the index to drop
)
모범 사례
데이터를 로드한 후 인덱스를 만듭니다: 이미 데이터가 들어 있는 컬렉션에 인덱스를 만들어 성능을 개선하세요.
설명이 포함된 인덱스 이름을 사용하세요: 필드와 목적을 명확하게 나타내는 이름을 선택하세요.
인덱스 성능 모니터링: 인덱스 생성 전후의 쿼리 성능 확인
쿼리 패턴을 고려하세요: 자주 필터링하는 필드에 인덱스 만들기
다음 단계
다른 인덱스 유형에 대해 알아보기
고급 JSON 인덱싱 시나리오는 JSON 인덱싱을 참조하세요.