Utilisation de collections de recherche vectorielle - Amazon OpenSearch Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation de collections de recherche vectorielle

Le type de collection de recherche vectorielle dans OpenSearch Serverless fournit une fonctionnalité de recherche de similarité évolutive et performante. Il vous permet de créer facilement des expériences modernes de recherche augmentée par apprentissage automatique (ML) et des applications d'intelligence artificielle générative (IA) sans avoir à gérer l'infrastructure de base de données vectorielle sous-jacente.

Les exemples d'utilisation des collections de recherche vectorielle incluent les recherches d'images, les recherches de documents, la récupération de musique, les recommandations de produits, les recherches de vidéos, les recherches géolocalisées, la détection des fraudes et la détection des anomalies.

Comme le moteur vectoriel de OpenSearch Serverless est alimenté par la fonction de recherche du voisin le plus proche (k-NN) dans OpenSearch, vous bénéficiez des mêmes fonctionnalités avec la simplicité d'un environnement sans serveur. Le moteur prend en charge les opérations de l' OpenSearch API k-NN. Grâce à ces opérations, vous pouvez tirer parti de la recherche en texte intégral, du filtrage avancé, des agrégations, des requêtes géospatiales, des requêtes imbriquées pour une extraction plus rapide des données et des résultats de recherche améliorés.

Le moteur vectoriel fournit des mesures de distance telles que la distance euclidienne, la similitude des cosinus et la similitude des produits par points, et peut prendre en charge 16 000 dimensions. Vous pouvez stocker des champs contenant différents types de données pour les métadonnées, tels que des nombres, des booléens, des dates, des mots clés et des points géographiques. Vous pouvez également stocker des champs avec du texte pour obtenir des informations descriptives afin d'ajouter du contexte aux vecteurs stockés. La colocation des types de données réduit la complexité, augmente la maintenabilité et évite la duplication des données, les problèmes de compatibilité des versions et les problèmes de licence.

Commencer à utiliser les collections de recherche vectorielle

Dans ce didacticiel, vous allez effectuer les étapes suivantes pour stocker, rechercher et récupérer des intégrations vectorielles en temps réel :

Étape 1 : configurer des autorisations

Pour suivre ce didacticiel (et pour utiliser OpenSearch Serverless en général), vous devez disposer des autorisations AWS Identity and Access Management (IAM) appropriées. Dans ce didacticiel, vous allez créer une collection, télécharger et rechercher des données, puis supprimer la collection.

Votre utilisateur ou votre rôle doit être associé à une politique basée sur l'identité avec les autorisations minimales suivantes :

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "aoss:CreateCollection", "aoss:ListCollections", "aoss:BatchGetCollection", "aoss:DeleteCollection", "aoss:CreateAccessPolicy", "aoss:ListAccessPolicies", "aoss:UpdateAccessPolicy", "aoss:CreateSecurityPolicy", "iam:ListUsers", "iam:ListRoles" ], "Effect": "Allow", "Resource": "*" } ] }

Pour plus d'informations sur les autorisations IAM OpenSearch sans serveur, consultez. Identity and Access Management pour Amazon OpenSearch Serverless

Étape 2 : créer une collection

Une collection est un groupe d' OpenSearch index qui fonctionnent ensemble pour prendre en charge une charge de travail ou un cas d'utilisation spécifique.

Pour créer une collection OpenSearch sans serveur
  1. Ouvrez la console Amazon OpenSearch Service à l'adresse https://console.aws.amazon.com/aos/home.

  2. Choisissez Collections dans le panneau de navigation de gauche, puis choisissez Create collection (Créer une collection).

  3. Nommez le boîtier de collection.

  4. Pour le type de collection, choisissez Recherche vectorielle. Pour plus d’informations, consultez Choix d'un type de collection.

  5. Sous Type de déploiement, désélectionnez Activer la redondance (répliques actives). Cela crée une collection en mode développement ou test et réduit à deux le nombre d'unités de OpenSearch calcul (OCU) de votre collection. Si vous souhaitez créer un environnement de production dans ce didacticiel, laissez la case cochée.

  6. Sous Sécurité, sélectionnez Easy create pour rationaliser votre configuration de sécurité. Toutes les données du moteur vectoriel sont cryptées en transit et au repos par défaut. Le moteur vectoriel prend en charge les autorisations IAM détaillées afin que vous puissiez définir qui peut créer, mettre à jour et supprimer des chiffrements, des réseaux, des collections et des index.

  7. Choisissez Suivant.

  8. Vérifiez vos paramètres de collection et choisissez Submit (Soumettre). Attendez quelques minutes pour que le statut de la collection devienne Active.

Étape 3 : charger et rechercher des données

Un index est un ensemble de documents dotés d'un schéma de données commun qui vous permet de stocker, de rechercher et de récupérer vos intégrations vectorielles et d'autres champs. Vous pouvez créer et télécharger des données vers les index d'une collection OpenSearch sans serveur à l'aide de la console Dev Tools dans les OpenSearch tableaux de bord ou d'un outil HTTP tel que Postman ou awscurl. Ce didacticiel utilise les outils de développement.

Indexer et rechercher des données dans la collection movies
  1. Pour créer un index unique pour votre nouvelle collection, envoyez la demande suivante dans la console Dev Tools. Par défaut, cela crée un index avec un nmslib moteur et une distance euclidienne.

    PUT housing-index { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3 }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. Pour indexer un seul document dans housing-index, envoyez la demande suivante :

    POST housing-index/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  3. Pour rechercher des propriétés similaires à celles de votre index, envoyez la requête suivante :

    GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 10, 20, 30 ], "k": 5 } } } }

Étape 4 : supprimer la collection

La collection de logements étant destinée à des fins de test, assurez-vous de la supprimer lorsque vous aurez terminé d'expérimenter.

Pour supprimer une collection OpenSearch sans serveur
  1. Revenez à la console Amazon OpenSearch Service.

  2. Choisissez Collections dans le volet de navigation de gauche et sélectionnez la collection de propriétés.

  3. Choisissez Supprimer et confirmez la suppression.

Recherche filtrée

Vous pouvez utiliser des filtres pour affiner les résultats de votre recherche sémantique. Pour créer un index et effectuer une recherche filtrée sur vos documents, remplacez les données de téléchargement et de recherche du didacticiel précédent par les instructions suivantes. Les autres étapes restent les mêmes. Pour plus d'informations sur les filtres, voir K-nn search with filters.

Indexer et rechercher des données dans la collection movies
  1. Pour créer un index unique pour votre collection, envoyez la demande suivante dans la console Dev Tools :

    PUT housing-index-filtered { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "method": { "engine": "faiss", "name": "hnsw" } }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }
  2. Pour indexer un seul document dans housing-index-filtered, envoyez la demande suivante :

    POST housing-index-filtered/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" }
  3. Pour rechercher vos données pour un appartement à Seattle à un prix donné et à une distance donnée d'un point géographique, envoyez la demande suivante :

    GET housing-index-filtered/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 0.1, 0.2, 0.3 ], "k": 5, "filter": { "bool": { "must": [ { "query_string": { "query": "Find me 2 bedroom apartment in Seattle under $3000 ", "fields": [ "title" ] } }, { "range": { "price": { "lte": 3000 } } }, { "geo_distance": { "distance": "100miles", "location": { "lat": 48, "lon": 121 } } } ] } } } } } }

Des milliards de charges de travail à grande échelle

Les collections de recherche vectorielle prennent en charge des charges de travail contenant des milliards de vecteurs. Il n'est pas nécessaire de réindexer à des fins de mise à l'échelle, car la mise à l'échelle automatique s'en charge pour vous. Si vous avez des millions de vecteurs (ou plus) dotés d'un grand nombre de dimensions et que vous avez besoin de plus de 200 OCU, contactez le AWS Support pour augmenter le nombre maximum d'unités de OpenSearch calcul (OCU) pour votre compte.

Limites

Les collections de recherche vectorielle présentent les limites suivantes :

  • Les collections de recherche vectorielle ne sont pas compatibles avec le moteur Apache Lucene ANN.

  • Les collections de recherche vectorielle ne prennent en charge que l'algorithme HNSW avec Faiss et ne prennent pas en charge la FIV et l'IVFQ.

  • Les collections de recherche vectorielle ne prennent pas en charge les opérations de l'API d'échauffement, de statistiques et d'entraînement des modèles.

  • Les collections de recherche vectorielle ne prennent pas en charge les scripts intégrés ou stockés.

  • Les informations sur le nombre d'index ne sont pas disponibles dans AWS Management Console les collections de recherche vectorielle.

  • L'intervalle d'actualisation des index des collections de recherche vectorielle est de 60 secondes.

Étapes suivantes

Maintenant que vous savez comment créer une collection de recherche vectorielle et indexer des données, vous pouvez essayer certains des exercices suivants :

  • Utilisez le client OpenSearch Python pour travailler avec des collections de recherche vectorielle. Consultez ce didacticiel sur GitHub.

  • Utilisez le client OpenSearch Java pour travailler avec des collections de recherche vectorielle. Consultez ce didacticiel sur GitHub.

  • Configuré LangChain pour être utilisé OpenSearch comme magasin de vecteurs. LangChain est un framework open source permettant de développer des applications basées sur des modèles de langage. Pour plus d'informations, consultez la LangChain documentation.