스칼라 필드 인덱스
Milvus에서 스칼라 인덱스는 기존 데이터베이스 인덱스와 유사하게 특정 비벡터 필드 값을 기준으로 메타필터링 속도를 높이는 데 사용됩니다. 이 가이드에서는 정수, 문자열 등과 같은 필드에 대한 스칼라 인덱스를 만들고 구성하는 방법을 안내합니다.
스칼라 인덱싱의 유형
자동 인덱싱: Milvus는 스칼라 필드의 데이터 유형에 따라 인덱스 유형을 자동으로 결정합니다. 특정 인덱스 유형을 제어할 필요가 없는 경우에 적합합니다.
사용자 지정 인덱싱: 반전 인덱스 또는 비트맵 인덱스와 같은 정확한 인덱스 유형을 지정합니다. 이렇게 하면 인덱스 유형 선택을 더 세밀하게 제어할 수 있습니다.
자동 인덱싱
자동 인덱싱을 사용하려면 인덱스 유형 매개변수( add_index()
에서 인덱스 유형 매개변수를 생략하면 Milvus가 스칼라 필드 유형을 기반으로 인덱스 유형을 유추할 수 있습니다.
자동 인덱싱을 사용하려면, 에서 indexType 매개변수를 생략하세요. IndexParam
에서 인덱스 유형 매개변수를 생략하여 Milvus가 스칼라 필드 유형을 기반으로 인덱스 유형을 유추할 수 있도록 합니다.
자동 인덱싱을 사용하려면, 에서 index_type 파라미터를 생략하세요. createIndex()
에서 인덱스 유형을 생략하면 Milvus가 스칼라 필드 유형에 따라 인덱스 유형을 유추할 수 있습니다.
스칼라 데이터 유형과 기본 인덱싱 알고리즘 간의 매핑에 대해서는 스칼라 필드 인덱싱 알고리즘을 참조하세요.
# Auto indexing
client = MilvusClient(
uri="http://localhost:19530"
)
index_params = MilvusClient.prepare_index_params() # Prepare an empty IndexParams object, without having to specify any index parameters
index_params.add_index(
field_name="scalar_1", # Name of the scalar field to be indexed
index_type="", # Type of index to be created. For auto indexing, leave it empty or omit this parameter.
index_name="default_index" # Name of the index to be created
)
client.create_index(
collection_name="test_scalar_index", # Specify the collection name
index_params=index_params
)
import io.milvus.v2.common.IndexParam;
import io.milvus.v2.service.index.request.CreateIndexReq;
IndexParam indexParamForScalarField = IndexParam.builder()
.fieldName("scalar_1") // Name of the scalar field to be indexed
.indexName("default_index") // Name of the index to be created
.indexType("") // Type of index to be created. For auto indexing, leave it empty or omit this parameter.
.build();
List<IndexParam> indexParams = new ArrayList<>();
indexParams.add(indexParamForVectorField);
CreateIndexReq createIndexReq = CreateIndexReq.builder()
.collectionName("test_scalar_index") // Specify the collection name
.indexParams(indexParams)
.build();
client.createIndex(createIndexReq);
await client.createIndex({
collection_name: "test_scalar_index", // Specify the collection name
field_name: "scalar_1", // Name of the scalar field to be indexed
index_name: "default_index", // Name of the index to be created
index_type: "" // Type of index to be created. For auto indexing, leave it empty or omit this parameter.
})
사용자 정의 인덱싱
사용자 정의 인덱싱을 사용하려면 인덱스 유형 매개변수를 사용하여 특정 인덱스 유형을 지정합니다. add_index()
.
사용자 지정 인덱싱을 사용하려면 인덱스 유형 매개변수를 사용하여 특정 인덱스 유형을 지정합니다. IndexParam
.
사용자 지정 인덱싱을 사용하려면, 에서 index_type 매개 변수를 사용하여 특정 인덱스 유형을 지정한다. createIndex()
.
아래 예제는 스칼라 필드 scalar_2
에 대한 반전 인덱스를 생성합니다.
index_params = MilvusClient.prepare_index_params() # Prepare an IndexParams object
index_params.add_index(
field_name="scalar_2", # Name of the scalar field to be indexed
index_type="INVERTED", # Type of index to be created
index_name="inverted_index" # Name of the index to be created
)
client.create_index(
collection_name="test_scalar_index", # Specify the collection name
index_params=index_params
)
import io.milvus.v2.common.IndexParam;
import io.milvus.v2.service.index.request.CreateIndexReq;
IndexParam indexParamForScalarField = IndexParam.builder()
.fieldName("scalar_1") // Name of the scalar field to be indexed
.indexName("inverted_index") // Name of the index to be created
.indexType("INVERTED") // Type of index to be created
.build();
List<IndexParam> indexParams = new ArrayList<>();
indexParams.add(indexParamForVectorField);
CreateIndexReq createIndexReq = CreateIndexReq.builder()
.collectionName("test_scalar_index") // Specify the collection name
.indexParams(indexParams)
.build();
client.createIndex(createIndexReq);
await client.createIndex({
collection_name: "test_scalar_index", // Specify the collection name
field_name: "scalar_1", // Name of the scalar field to be indexed
index_name: "inverted_index", // Name of the index to be created
index_type: "INVERTED" // Type of index to be created
})
메서드 및 매개변수
prepare_index_params()
IndexParams 객체를 준비합니다.
add_index()
IndexParams 객체에 인덱스 구성을 추가합니다.
field_name(문자열)
인덱싱할 스칼라 필드의 이름입니다.
index_type(문자열):
생성할 스칼라 인덱스의 유형입니다. 암시적 인덱싱의 경우 이 매개변수를 비워 두거나 생략하세요.
사용자 지정 인덱싱의 경우 유효한 값은 다음과 같습니다:
INVERTED: (권장) 반전 인덱스는 토큰화된 모든 단어가 알파벳순으로 정렬된 용어 사전으로 구성됩니다. 자세한 내용은 스칼라 인덱스를 참조하세요.
STL_SORT: 표준 템플릿 라이브러리 정렬 알고리즘을 사용하여 스칼라 필드를 정렬합니다. 숫자 필드(예: INT8, INT16, INT32, INT64, FLOAT, DOUBLE)만 지원합니다.
트라이: 빠른 접두사 검색 및 검색을 위한 트리 데이터 구조입니다. VARCHAR 필드를 지원합니다.
index_name(문자열)
생성할 스칼라 인덱스의 이름입니다. 각 스칼라 필드는 하나의 인덱스를 지원합니다.
create_index()
지정된 컬렉션에 인덱스를 생성합니다.
collection_name(문자열)
인덱스가 생성될 컬렉션의 이름입니다.
index_params
인덱스 구성을 포함하는 IndexParams 객체입니다.
메서드 및 매개변수
- IndexParamIndexParam 객체를 준비합니다.
- fieldName(문자열) 인덱싱할 스칼라 필드의 이름입니다.
- indexName(문자열) 생성할 스칼라 인덱스의 이름입니다. 각 스칼라 필드는 하나의 인덱스를 지원합니다.
- indexType(문자열) 생성할 스칼라 인덱스의 유형입니다. 암시적 인덱싱의 경우 이 매개변수를 비워 두거나 생략합니다. 사용자 정의 인덱싱의 경우 유효한 값은 다음과 같습니다:
- INVERTED: (권장) 반전 인덱스는 토큰화된 모든 단어가 알파벳순으로 정렬된 용어 사전으로 구성됩니다. 자세한 내용은 스칼라 인덱스를 참조하세요.
- STL_SORT: 표준 템플릿 라이브러리 정렬 알고리즘을 사용하여 스칼라 필드를 정렬합니다. 부울 및 숫자 필드(예: INT8, INT16, INT32, INT64, FLOAT, DOUBLE)를 지원합니다.
- 트라이: 빠른 접두사 검색과 검색을 위한 트리 데이터 구조입니다. VARCHAR 필드를 지원합니다.
- CreateIndexReq지정된 컬렉션에 인덱스를 만듭니다.
- collectionName(문자열) 인덱스가 생성되는 컬렉션의 이름입니다.
- indexParams(목록
) 인덱스 구성을 포함하는 IndexParam 객체 목록입니다.
메서드 및 매개변수
createIndex
지정된 컬렉션에 인덱스를 생성합니다.
- collection_name(문자열) 인덱스가 생성되는 컬렉션의 이름입니다.
- field_name(문자열) 인덱싱할 스칼라 필드의 이름입니다.
- index_name(문자열) 생성할 스칼라 인덱스의 이름입니다. 각 스칼라 필드는 하나의 인덱스를 지원합니다.
- index_type(문자열) 생성할 스칼라 인덱스의 유형입니다. 암시적 인덱싱의 경우 이 매개변수를 비워 두거나 생략합니다. 사용자 지정 인덱싱의 경우 유효한 값은 다음과 같습니다:
- INVERTED: (권장) 반전 인덱스는 토큰화된 모든 단어가 알파벳순으로 정렬된 용어 사전으로 구성됩니다. 자세한 내용은 스칼라 인덱스를 참조하세요.
- STL_SORT: 표준 템플릿 라이브러리 정렬 알고리즘을 사용하여 스칼라 필드를 정렬합니다. 부울 및 숫자 필드(예: INT8, INT16, INT32, INT64, FLOAT, DOUBLE)를 지원합니다.
- 트라이: 빠른 접두사 검색과 검색을 위한 트리 데이터 구조입니다. VARCHAR 필드를 지원합니다.
결과 확인
메서드를 사용하여 list_indexes()
메서드를 사용하여 스칼라 인덱스 생성을 확인합니다:
listIndexes()
메서드를 사용하여 스칼라 인덱스 생성을 확인합니다:
listIndexes()
메서드를 사용하여 스칼라 인덱스 생성을 확인합니다:
client.list_indexes(
collection_name="test_scalar_index" # Specify the collection name
)
# Output:
# ['default_index','inverted_index']
import java.util.List;
import io.milvus.v2.service.index.request.ListIndexesReq;
ListIndexesReq listIndexesReq = ListIndexesReq.builder()
.collectionName("test_scalar_index") // Specify the collection name
.build();
List<String> indexNames = client.listIndexes(listIndexesReq);
System.out.println(indexNames);
// Output:
// [
// "default_index",
// "inverted_index"
// ]
res = await client.listIndexes({
collection_name: 'test_scalar_index'
})
console.log(res.indexes)
// Output:
// [
// "default_index",
// "inverted_index"
// ]
제한
- 현재 스칼라 인덱싱은 INT8, INT16, INT32, INT64, FLOAT, DOUBLE, BOOL, VARCHAR 및 ARRAY 데이터 타입을 지원하지만 JSON 데이터 타입은 지원하지 않습니다.