Index des champs scalaires
Dans Milvus, un index scalaire est utilisé pour accélérer le métafiltrage par une valeur de champ non vectorielle spécifique, comme un index de base de données traditionnel. Ce guide vous guidera dans la création et la configuration d'index scalaires pour des champs tels que des entiers, des chaînes, etc.
Types d'indexation scalaire
Indexation automatique: Milvus décide automatiquement du type d'index en fonction du type de données du champ scalaire. Cette option convient lorsque vous n'avez pas besoin de contrôler le type d'index spécifique.
Indexation personnalisée: Vous spécifiez le type d'index exact, tel qu'un index inversé ou un index bitmap. Cette option permet de mieux contrôler la sélection du type d'index.
Indexation automatique
Pour utiliser l'indexation automatique, omettez le paramètre index_type dans add_index()
afin que Milvus puisse déduire le type d'index en fonction du type de champ scalaire.
Pour utiliser l'indexation automatique, omettre le paramètre indexType dans IndexParam
pour que Milvus puisse déduire le type d'index en fonction du type de champ scalaire.
Pour utiliser l'indexation automatique, omettre le paramètre index_type dans createIndex()
pour que Milvus puisse déduire le type d'index en fonction du type de champ scalaire.
Pour les correspondances entre les types de données scalaires et les algorithmes d'indexation par défaut, voir Algorithmes d'indexation des champs scalaires.
# 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.
})
Indexation personnalisée
Pour utiliser l'indexation personnalisée, spécifiez un type d'index particulier en utilisant le paramètre index_type dans le fichier add_index()
.
Pour utiliser l'indexation personnalisée, spécifiez un type d'index particulier à l'aide du paramètre indexType dans le fichier IndexParam
.
Pour utiliser l'indexation personnalisée, spécifiez un type d'index particulier à l'aide du paramètre index_type de la commande createIndex()
.
L'exemple ci-dessous crée un index inversé pour le champ scalaire 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éthodes et paramètres
prepare_index_params()
Prépare un objet IndexParams.
add_index()
Ajoute des configurations d'index à l'objet IndexParams.
field_name(chaîne)
Le nom du champ scalaire à indexer.
index_type(chaîne) :
Le type d'index scalaire à créer. Pour l'indexation implicite, laissez ce paramètre vide ou omettez-le.
Pour l'indexation personnalisée, les valeurs valides sont
INVERTED: (Recommandé) Un index inversé consiste en un dictionnaire de termes contenant tous les mots tokenisés triés par ordre alphabétique. Pour plus de détails, voir Index scalaire.
STL_SORT: Trie les champs scalaires à l'aide de l'algorithme de tri de la bibliothèque standard. Ne prend en charge que les champs numériques (par exemple, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
Trie: Une structure de données arborescente pour des recherches et des extractions rapides de préfixes. Prend en charge les champs VARCHAR.
index_name(chaîne)
Le nom de l'index scalaire à créer. Chaque champ scalaire supporte un index.
create_index()
Crée l'index dans la collection spécifiée.
nom_collection(chaîne)
Le nom de la collection pour laquelle l'index est créé.
index_params
L'objet IndexParams qui contient les configurations de l'index.
Méthodes et paramètres
- IndexParamPrépare un objet IndexParam.
- fieldName(Chaîne) Le nom du champ scalaire à indexer.
- indexName(Chaîne) Le nom de l'index scalaire à créer. Chaque champ scalaire supporte un index.
- indexType(Chaîne) Le type d'index scalaire à créer. Pour l'indexation implicite, laissez ce paramètre vide ou omettez-le. Pour l'indexation personnalisée, les valeurs valides sont les suivantes :
- INVERTED: (Recommandé) Un index inversé consiste en un dictionnaire de termes contenant tous les mots symbolisés triés par ordre alphabétique. Pour plus de détails, voir Index scalaire.
- STL_SORT: Trie les champs scalaires à l'aide de l'algorithme de tri de la bibliothèque standard. Prend en charge les champs booléens et numériques (par exemple, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
- Trie: Une structure de données arborescente pour des recherches et des extractions rapides de préfixes. Prend en charge les champs VARCHAR.
- CreateIndexReqCrée l'index dans la collection spécifiée.
- collectionName(String) Le nom de la collection pour laquelle l'index est créé.
- indexParams(List
) Liste d'objets IndexParam contenant des configurations d'index.
Méthodes et paramètres
createIndex
Crée l'index dans la collection spécifiée.
- collection_name(string) Le nom de la collection pour laquelle l'index est créé.
- field_name(string) Le nom du champ scalaire à indexer.
- index_name(string) Le nom de l'index scalaire à créer. Chaque champ scalaire supporte un index.
- index_type(chaîne) Le type d'index scalaire à créer. Pour l'indexation implicite, laissez ce paramètre vide ou omettez-le. Pour l'indexation personnalisée, les valeurs valides sont les suivantes :
- INVERTED: (Recommandé) Un index inversé consiste en un dictionnaire de termes contenant tous les mots tokenisés triés par ordre alphabétique. Pour plus de détails, voir Index scalaire.
- STL_SORT: Trie les champs scalaires à l'aide de l'algorithme de tri de la bibliothèque standard. Prend en charge les champs booléens et numériques (par exemple, INT8, INT16, INT32, INT64, FLOAT, DOUBLE).
- Trie: Une structure de données arborescente pour des recherches et des extractions rapides de préfixes. Prend en charge les champs VARCHAR.
Vérification du résultat
Utilisez la méthode list_indexes()
pour vérifier la création d'index scalaires :
Utilisez la méthode listIndexes()
pour vérifier la création d'index scalaires :
Utilisez la méthode listIndexes()
pour vérifier la création d'index scalaires :
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
- Actuellement, l'indexation scalaire prend en charge les types de données INT8, INT16, INT32, INT64, FLOAT, DOUBLE, BOOL, VARCHAR et ARRAY, mais pas le type de données JSON.