milvus-logo
LFAI
Home
  • Concepts

Index scalaire

Milvus prend en charge les recherches filtrées combinant des champs scalaires et vectoriels. Pour améliorer l'efficacité des recherches impliquant des champs scalaires, Milvus a introduit l'indexation des champs scalaires à partir de la version 2.1.0. Cet article présente une vue d'ensemble de l'indexation des champs scalaires dans Milvus, vous aidant à comprendre sa signification et sa mise en œuvre.

Vue d'ensemble

Lorsque vous effectuez des recherches de similarité vectorielle dans Milvus, vous pouvez utiliser des opérateurs logiques pour organiser les champs scalaires en expressions booléennes.

Lorsque Milvus reçoit une demande de recherche avec une telle expression booléenne, il analyse l'expression booléenne dans un arbre syntaxique abstrait (AST) afin de générer un plan physique pour le filtrage des attributs. Milvus applique ensuite le plan physique dans chaque segment pour générer un jeu de bits comme résultat du filtrage et inclut le résultat comme paramètre de recherche vectorielle pour réduire la portée de la recherche. Dans ce cas, la vitesse des recherches vectorielles dépend fortement de la vitesse du filtrage d'attributs.

Attribute filtering in a segment Filtrage d'attributs dans un segment

L'indexation des champs scalaires est un moyen d'assurer la rapidité du filtrage des attributs en triant les valeurs des champs scalaires d'une manière particulière afin d'accélérer la recherche d'informations.

Algorithmes d'indexation des champs scalaires

Milvus vise à obtenir une faible utilisation de la mémoire, une grande efficacité de filtrage et un temps de chargement court grâce à ses algorithmes d'indexation des champs scalaires. Ces algorithmes sont classés en deux catégories principales : l'indexation automatique et l'indexation inversée.

Indexation automatique

Milvus propose l'option AUTOINDEX pour vous éviter de devoir choisir manuellement un type d'index. Lors de l'appel de la méthode create_index, si l'option index_type n'est pas spécifiée, Milvus sélectionne automatiquement le type d'index le plus approprié en fonction du type de données.

Le tableau suivant répertorie les types de données pris en charge par Milvus et les algorithmes d'indexation automatique correspondants.

Type de donnéesAlgorithme d'indexation automatique
VARCHARIndex inversé
INT8Index inversé
INT16Index inversé
INT32Indice inversé
INT64Indice inversé
FLOATIndice inversé
DOUBLEIndex inversé

Indexation inversée

L'indexation inversée offre un moyen flexible de créer un index pour un champ scalaire en spécifiant manuellement les paramètres de l'index. Cette méthode fonctionne bien pour différents scénarios, y compris les requêtes ponctuelles, les requêtes de correspondance de motifs, les recherches en texte intégral, les recherches JSON, les recherches booléennes et même les requêtes de correspondance de préfixes.

Les index inversés mis en œuvre dans Milvus sont alimentés par Tantivy, une bibliothèque de moteur de recherche en texte intégral. Tantivy garantit que l'indexation inversée dans Milvus est à la fois efficace et rapide.

Un index inversé se compose de deux éléments principaux : un dictionnaire de termes et une liste inversée. Le dictionnaire de termes comprend tous les mots tokenisés triés par ordre alphabétique, tandis que la liste inversée contient la liste des documents dans lesquels chaque mot apparaît. Cette configuration rend les requêtes ponctuelles et les requêtes par plage beaucoup plus rapides et efficaces que les recherches par force brute.

Inverted index diagram Schéma de l'index inversé

Les avantages de l'utilisation d'un index inversé sont particulièrement évidents dans les opérations suivantes :

  • Requête ponctuelle: Par exemple, lors de la recherche de documents contenant le mot Milvus, le processus commence par vérifier si Milvus est présent dans le dictionnaire des termes. S'il n'est pas trouvé, aucun document ne contient le mot. En revanche, s'il est trouvé, la liste inversée associée à Milvus est récupérée, indiquant les documents qui contiennent le mot. Cette méthode est beaucoup plus efficace qu'une recherche brute dans un million de documents, car le dictionnaire de termes triés réduit considérablement le temps nécessaire pour trouver le mot Milvus.
  • Interrogation par plage: L'efficacité des requêtes de portée, telles que la recherche de documents contenant des mots alphabétiquement supérieurs à très, est également améliorée par le dictionnaire de termes triés. Cette approche est plus efficace qu'une recherche brute et fournit des résultats plus rapides et plus précis.

Résultats des tests

Pour démontrer les améliorations de performances apportées par les index scalaires dans Milvus, une expérience a été menée pour comparer les performances de plusieurs expressions utilisant l'indexation inversée et la recherche par force brute sur des données brutes.

L'expérience a consisté à tester diverses expressions dans deux conditions : avec un index inversé et avec une recherche par force brute. Pour garantir l'équité, la même distribution des données a été maintenue entre les tests, en utilisant la même collection à chaque fois. Avant chaque test, la collection a été libérée et l'index a été supprimé et reconstruit. En outre, une requête à chaud a été effectuée avant chaque test pour minimiser l'impact des données froides et chaudes, et chaque requête a été exécutée plusieurs fois pour garantir la précision.

Pour un ensemble de données d'un million d' enregistrements, l'utilisation d'un index inversé peut améliorer jusqu'à 30 fois les performances pour les requêtes ponctuelles. Les gains de performance peuvent être encore plus significatifs pour des ensembles de données plus importants.

Recommandations en matière de performances

Pour tirer pleinement parti des capacités de Milvus en matière d'indexation de champs scalaires et libérer sa puissance dans les recherches de similarité vectorielle, vous pouvez avoir besoin d'un modèle pour estimer la taille de la mémoire requise en fonction des données dont vous disposez.

Les tableaux suivants répertorient les fonctions d'estimation pour tous les types de données pris en charge par Milvus.

  • Champs numériques

    Type de donnéesFonction d'estimation de la mémoire (Mo)
    INT8numOfRows * 12 / 1024 / 1024
    INT16numOfRows * 12 / 1024 / 1024
    INT32numOfRows * 12 / 1024 / 1024
    INT64numOfRows * 24 / 1024 / 1024
    FLOAT32numOfRows * 12 / 1024 / 1024
    DOUBLEnumOfRows * 24 / 1024 / 1024
  • Champs de la chaîne

    Longueur de la chaîneFonction d'estimation de la mémoire (MB)
    (0, 8]numOfRows * 128 / 1024 / 1024
    (8, 16]numOfRows * 144 / 1024 / 1024
    (16, 32]numOfRows * 160 / 1024 / 1024
    (32, 64]numOfRows * 192 / 1024 / 1024
    (64, 128]numOfRows * 256 / 1024 / 1024
    (128, 65535]numOfRows * strLen * 1.5 / 1024 / 1024

Et ensuite

Traduit parDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

Cette page a-t - elle été utile ?