milvus-logo
LFAI
Home
  • Guia do utilizador

Índice de campos escalares

No Milvus, um índice escalar é usado para acelerar a metafiltragem por um valor de campo específico não-vetorial, semelhante a um índice de base de dados tradicional. Este guia irá guiá-lo na criação e configuração de índices escalares para campos como inteiros, strings, etc.

Tipos de indexação escalar

  • Indexação automática: O Milvus decide automaticamente o tipo de índice com base no tipo de dados do campo escalar. Esta opção é adequada quando não é necessário controlar o tipo de índice específico.

  • Indexação personalizada: O utilizador especifica o tipo de índice exato, como um índice invertido. Isto proporciona um maior controlo sobre a seleção do tipo de índice.

Indexação automática

Para utilizar a indexação automática, omita o parâmetro index_type em add_index()para que o Milvus possa inferir o tipo de índice com base no tipo de campo escalar.

Para utilizar a indexação automática, omita o parâmetro indexType em IndexParampara que o Milvus possa inferir o tipo de índice com base no tipo de campo escalar.

Para utilizar a indexação automática, omita o parâmetro index_type em createIndex()para que o Milvus possa inferir o tipo de índice com base no tipo de campo escalar.

Para mapeamentos entre tipos de dados escalares e algoritmos de indexação padrão, consulte Algoritmos de indexação de campo escalar.

# Auto indexing
client = MilvusClient(
    uri="http://localhost:19530"
)

index_params = client.create_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.
})

Indexação personalizada

Para usar a indexação personalizada, especifique um tipo de índice específico usando o parâmetro index_type em add_index().

Para usar a indexação personalizada, especifique um tipo de índice específico usando o parâmetro indexType em IndexParam.

Para utilizar a indexação personalizada, especifique um tipo de índice específico utilizando o parâmetro index_type em createIndex().

O exemplo abaixo cria um índice invertido para o campo escalar scalar_2.

index_params = client.create_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
})

Métodos e parâmetros

  • create_index_params()

    Prepara um objeto IndexParams.

  • add_index()

    Adiciona configurações de índice ao objeto IndexParams.

    • nome_do_campo(string)

      O nome do campo escalar a indexar.

    • index_type(string):

      O tipo do índice escalar a ser criado. Para indexação implícita, deixe-o vazio ou omita este parâmetro.

      Para indexação personalizada, os valores válidos são:

      • INVERTED: (Recomendado) Um índice invertido consiste num dicionário de termos que contém todas as palavras tokenizadas ordenadas alfabeticamente. Para obter detalhes, consulte Índice escalar.

      • STL_SORT: Classifica campos escalares usando o algoritmo de classificação da biblioteca de modelos padrão. Suporta apenas campos numéricos (por exemplo, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).

      • Trie: Uma estrutura de dados em árvore para pesquisas e recuperações rápidas de prefixos. Suporta campos VARCHAR.

    • nome_do_índice(string)

      O nome do índice escalar a ser criado. Cada campo escalar suporta um índice.

  • create_index()

    Cria o índice na coleção especificada.

    • nome_da_colecção(string)

      O nome da coleção para a qual o índice é criado.

    • index_params

      O objeto IndexParams que contém as configurações do índice.

Métodos e parâmetros

  • IndexParamPrepara um objeto IndexParam.
    • fieldName(String) O nome do campo escalar a indexar.
    • indexName(String) O nome do índice escalar a criar. Cada campo escalar suporta um índice.
    • indexType(String) O tipo do índice escalar a criar. Para indexação implícita, deixe-o vazio ou omita este parâmetro. Para indexação personalizada, os valores válidos são:
      • INVERTED: (Recomendado) Um índice invertido consiste num dicionário de termos que contém todas as palavras tokenizadas ordenadas alfabeticamente. Para obter detalhes, consulte Índice escalar.
      • STL_SORT: Classifica campos escalares usando o algoritmo de classificação da biblioteca de modelos padrão. Suporta campos booleanos e numéricos (por exemplo, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
      • Trie: Uma estrutura de dados em árvore para pesquisas e recuperações rápidas de prefixos. Suporta campos VARCHAR.
  • CreateIndexReqCria o índice na coleção especificada.
    • collectionName(String) O nome da coleção para a qual o índice é criado.
    • indexParams(List) Uma lista de objectos IndexParam que contêm configurações de índice.

Métodos e parâmetros

  • createIndex

    Cria o índice na coleção especificada.

    • nome_da_colecção(string) O nome da coleção para a qual o índice é criado.
    • field_name(string) O nome do campo escalar a indexar.
    • index_name(string) O nome do índice escalar a criar. Cada campo escalar suporta um índice.
    • index_type(string) O tipo do índice escalar a criar. Para indexação implícita, deixe-o vazio ou omita este parâmetro. Para indexação personalizada, os valores válidos são:
      • INVERTED: (Recomendado) Um índice invertido consiste num dicionário de termos que contém todas as palavras tokenizadas ordenadas alfabeticamente. Para obter detalhes, consulte Índice escalar.
      • STL_SORT: Classifica campos escalares usando o algoritmo de classificação da biblioteca de modelos padrão. Suporta campos booleanos e numéricos (por exemplo, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
      • Trie: Uma estrutura de dados em árvore para pesquisas e recuperações rápidas de prefixos. Suporta campos VARCHAR.

Verificação do resultado

Utilize o método list_indexes() para verificar a criação de índices escalares:

Utilize o método listIndexes() para verificar a criação de índices escalares:

Utilize o método listIndexes() para verificar a criação de índices escalares:

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"
// ]   

Limites

  • Atualmente, a indexação escalar suporta os tipos de dados INT8, INT16, INT32, INT64, FLOAT, DOUBLE, BOOL, VARCHAR e ARRAY, mas não o tipo de dados JSON.

Traduzido porDeepLogo

Try Zilliz Cloud for Free

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

Get Started
Feedback

Esta página foi útil?