Í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 ou um índice bitmap. 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 IndexParam
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 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 = 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.
})
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 = 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
})
Métodos e parâmetros
prepare_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.