Indici di campi scalari
In Milvus, un indice scalare viene utilizzato per accelerare il metafiltraggio in base a un valore specifico di un campo non vettoriale, in modo simile a un indice tradizionale di un database. Questa guida illustra la creazione e la configurazione di indici scalari per campi come numeri interi, stringhe, ecc.
Tipi di indicizzazione scalare
Indicizzazione automatica: Milvus decide automaticamente il tipo di indice in base al tipo di dati del campo scalare. È adatta quando non è necessario controllare il tipo di indice specifico.
Indicizzazione personalizzata: Si specifica il tipo esatto di indice, ad esempio un indice invertito. In questo modo si ha un maggiore controllo sulla selezione del tipo di indice.
Indicizzazione automatica
Per utilizzare l'indicizzazione automatica, omettere il parametro index_type in add_index()
in modo che Milvus possa dedurre il tipo di indice in base al tipo di campo scalare.
Per utilizzare l'indicizzazione automatica, omettere il parametro indexType in , in modo che Milvus possa dedurre il tipo di indice in base al tipo di campo scalare. IndexParam
in modo che Milvus possa dedurre il tipo di indice in base al tipo di campo scalare.
Per utilizzare l'indicizzazione automatica, omettere il parametro index_type in , in modo che Milvus possa dedurre il tipo di indice in base al tipo di campo scalare. createIndex()
in modo che Milvus possa dedurre il tipo di indice in base al tipo di campo scalare.
Per le mappature tra i tipi di dati scalari e gli algoritmi di indicizzazione predefiniti, fare riferimento a Algoritmi di indicizzazione dei campi scalari.
# 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.
})
Indicizzazione personalizzata
Per usare l'indicizzazione personalizzata, specificare un particolare tipo di indice usando il parametro index_type in add_index()
.
Per usare l'indicizzazione personalizzata, specificare un particolare tipo di indice usando il parametro indexType in . IndexParam
.
Per utilizzare l'indicizzazione personalizzata, specificare un particolare tipo di indice utilizzando il parametro index_type in . createIndex()
.
L'esempio seguente crea un indice invertito per il campo scalare 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
})
Metodi e parametri
prepare_index_params()
Prepara un oggetto IndexParams.
add_index()
Aggiunge le configurazioni dell'indice all'oggetto IndexParams.
nome_campo(stringa)
Il nome del campo scalare da indicizzare.
index_type(stringa):
Il tipo di indice scalare da creare. Per l'indicizzazione implicita, lasciare vuoto o omettere questo parametro.
Per l'indicizzazione personalizzata, i valori validi sono:
INVERTED: (consigliato) Un indice invertito consiste in un dizionario di termini contenente tutte le parole tokenizzate ordinate alfabeticamente. Per maggiori dettagli, consultare Indice scalare.
STL_SORT: Ordina i campi scalari usando l'algoritmo di ordinamento standard della libreria template. Supporta solo campi numerici (ad esempio, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
Trie: Una struttura di dati ad albero per ricerche e recuperi rapidi di prefissi. Supporta campi VARCHAR.
nome_indice(stringa)
Il nome dell'indice scalare da creare. Ogni campo scalare supporta un indice.
crea_indice()
Crea l'indice nell'insieme specificato.
nome_raccolta(stringa)
Il nome dell'insieme per il quale viene creato l'indice.
parametri_indice
L'oggetto IndexParams che contiene le configurazioni dell'indice.
Metodi e parametri
- IndexParamPrepara un oggetto IndexParam.
- fieldName(String) Il nome del campo scalare da indicizzare.
- indexName(Stringa) Il nome dell'indice scalare da creare. Ogni campo scalare supporta un indice.
- indexType(String) Il tipo di indice scalare da creare. Per l'indicizzazione implicita, lasciare vuoto o omettere questo parametro. Per l'indicizzazione personalizzata, i valori validi sono:
- INVERTED: (consigliato) Un indice invertito consiste in un dizionario di termini contenente tutte le parole tokenizzate ordinate alfabeticamente. Per maggiori dettagli, consultare Indice scalare.
- STL_SORT: Ordina i campi scalari utilizzando l'algoritmo di ordinamento standard della libreria template. Supporta campi booleani e numerici (ad esempio, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
- Trie: Una struttura di dati ad albero per ricerche e recuperi rapidi di prefissi. Supporta campi VARCHAR.
- CreateIndexReqCrea l'indice nell'insieme specificato.
- collectionName(String) Il nome dell'insieme per il quale viene creato l'indice.
- indexParams(Elenco
) Un elenco di oggetti IndexParam che contengono le configurazioni dell'indice.
Metodi e parametri
creaIndice
Crea l'indice nell'insieme specificato.
- nome_raccolta(stringa) Il nome della raccolta per la quale viene creato l'indice.
- nome_campo(stringa) Il nome del campo scalare da indicizzare.
- nome_indice(stringa) Il nome dell'indice scalare da creare. Ogni campo scalare supporta un indice.
- index_type(stringa) Il tipo di indice scalare da creare. Per l'indicizzazione implicita, lasciare vuoto o omettere questo parametro. Per l'indicizzazione personalizzata, i valori validi sono:
- INVERTED: (consigliato) Un indice invertito consiste in un dizionario di termini contenente tutte le parole tokenizzate ordinate alfabeticamente. Per maggiori dettagli, consultare Indice scalare.
- STL_SORT: Ordina i campi scalari utilizzando l'algoritmo di ordinamento standard della libreria template. Supporta campi booleani e numerici (ad esempio, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
- Trie: Una struttura di dati ad albero per ricerche e recuperi rapidi di prefissi. Supporta i campi VARCHAR.
Verifica del risultato
Utilizzare il metodo list_indexes()
per verificare la creazione di indici scalari:
Utilizzare il metodo listIndexes()
per verificare la creazione di indici scalari:
Utilizzare il metodo listIndexes()
per verificare la creazione di indici scalari:
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"
// ]
Limiti
- Attualmente, l'indicizzazione scalare supporta i tipi di dati INT8, INT16, INT32, INT64, FLOAT, DOUBLE, BOOL, VARCHAR e ARRAY, ma non il tipo di dati JSON.