milvus-logo
LFAI
홈페이지
  • 사용자 가이드

스칼라 필드 인덱스

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 데이터 타입은 지원하지 않습니다.

번역DeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
피드백

이 페이지가 도움이 되었나요?