• À propos de Milvus
  • Commencer
  • Concepts
  • Guide de l'utilisateur
  • Importation de données
  • Outils d'IA
  • Guide d'administration
  • Outils
  • Intégrations
  • Tutoriels
  • FAQ
  • API Reference

INVERSE

Lorsque vous devez effectuer des requêtes de filtrage fréquentes sur vos données, les index INVERTED peuvent améliorer considérablement les performances de la requête. Au lieu de parcourir tous les documents, Milvus utilise des index inversés pour localiser rapidement les enregistrements exacts qui correspondent à vos conditions de filtrage.

Quand utiliser les index INVERTS ?

Utilisez les index INVERTS lorsque vous avez besoin de.. :

  • Filtrer par valeurs spécifiques: Trouver tous les enregistrements dont un champ est égal à une valeur spécifique (par exemple, category == "electronics").

  • Filtrer le contenu d'un texte: Effectuer des recherches efficaces sur les champs VARCHAR

  • Interroger les valeurs des champs JSON: Filtre sur des clés spécifiques dans les structures JSON

Avantage en termes de performances: les index INVERTED peuvent réduire la durée des requêtes de quelques secondes à quelques millisecondes sur les grands ensembles de données en éliminant la nécessité de balayer l'ensemble de la collection.

Fonctionnement des index INVERTED

Un index INVERTED dans Milvus associe chaque valeur de champ unique (terme) à l'ensemble des ID de documents où cette valeur apparaît. Cette structure permet des recherches rapides pour les champs comportant des valeurs répétées ou catégorielles.

Comme le montre le diagramme, le processus se déroule en deux étapes :

  1. Mappage en amont (ID → terme) : Chaque identifiant de document pointe vers la valeur de champ qu'il contient.

  2. Mappage inversé (Terme → ID) : Milvus collecte les termes uniques et établit une correspondance inversée entre chaque terme et tous les ID qui le contiennent.

Par exemple, la valeur "électronique" correspond aux ID 1 et 3, tandis que "livres" correspond aux ID 2 et 5.

How Inverted Index Works Fonctionnement de l'index inversé

Lorsque vous filtrez pour une valeur spécifique (par exemple, category == "electronics"), Milvus recherche simplement le terme dans l'index et récupère directement les ID correspondants. Cela évite de parcourir l'ensemble des données et permet un filtrage rapide, en particulier pour les valeurs catégorielles ou répétées.

Les index INVERTED prennent en charge tous les types de champs scalaires, tels que BOOL, INT8, INT16, INT32, INT64, FLOAT, DOUBLE, VARCHAR, JSON et ARRAY. Toutefois, les paramètres d'indexation d'un champ JSON sont légèrement différents de ceux des champs scalaires ordinaires.

Création d'index sur des champs non JSON

Pour créer un index sur un champ non JSON, procédez comme suit :

  1. Préparez vos paramètres d'index :

    from pymilvus import MilvusClient
    
    client = MilvusClient(uri="http://localhost:19530") # Replace with your server address
    
    # Create an empty index parameter object
    index_params = client.prepare_index_params()
    
  2. Ajoutez l'index INVERTED:

    index_params.add_index(
        field_name="category",           # Name of the field to index
        index_type="INVERTED",          # Specify INVERTED index type
        index_name="category_index"     # Give your index a name
    )
    
  3. Créez l'index :

    client.create_index(
        collection_name="my_collection", # Replace with your collection name
        index_params=index_params
    )
    

Créer des index sur des champs JSONCompatible with Milvus 2.5.11+

Vous pouvez également créer des index INVERTED sur des chemins d'accès spécifiques dans les champs JSON. Pour ce faire, des paramètres supplémentaires sont nécessaires pour spécifier le chemin JSON et le type de données :

# Build index params
index_params.add_index(
    field_name="metadata",                    # JSON field name
    index_type="INVERTED",
    index_name="metadata_category_index",
    params={
        "json_path": "metadata[\"category\"]",    # Path to the JSON key
        "json_cast_type": "varchar"              # Data type to cast to during indexing
    }
)

# Create index
client.create_index(
    collection_name="my_collection", # Replace with your collection name
    index_params=index_params
)

Pour obtenir des informations détaillées sur l'indexation des champs JSON, y compris les chemins d'accès pris en charge, les types de données et les limitations, reportez-vous à Indexation JSON.

Supprimer un index

Utilisez la méthode drop_index() pour supprimer un index existant d'une collection.

  • Dans la version 2.6.3 ou antérieure, vous devez libérer la collection avant de supprimer un index scalaire.

  • À partir de la version 2.6.4, vous pouvez supprimer un index scalaire directement lorsqu'il n'est plus nécessaire, sans avoir à libérer la collection au préalable.

client.drop_index(
    collection_name="my_collection",   # Name of the collection
    index_name="category_index" # Name of the index to drop
)

Meilleures pratiques

  • Créez des index après avoir chargé les données: Créez des index sur des collections qui contiennent déjà des données afin d'améliorer les performances.

  • Utilisez des noms d'index descriptifs: Choisissez des noms qui indiquent clairement le champ et l'objectif

  • Contrôler les performances des index: Vérifiez les performances des requêtes avant et après la création d'index.

  • Tenez compte de vos schémas de requête: Créez des index sur les champs que vous filtrez fréquemment

Prochaines étapes