milvus-logo
LFAI
Casa
  • Guida per l'utente

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. IndexParamin 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.

Tradotto daDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

Questa pagina è stata utile?