$VectorSearch - Amazon DocumentDB

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.

$VectorSearch

Nouveau depuis la version 8.0

Non pris en charge par le cluster Elastic.

L'$vectorSearchopérateur d'Amazon DocumentDB vous permet d'effectuer une recherche vectorielle, une méthode utilisée dans le machine learning pour trouver des points de données similaires en comparant leurs représentations vectorielles à l'aide de mesures de distance ou de similarité. Cette fonctionnalité associe la flexibilité et la richesse des requêtes d'une base de données de documents basée sur JSON à la puissance de la recherche vectorielle, ce qui vous permet de créer des cas d'utilisation de l'apprentissage automatique et de l'IA générative tels que la recherche sémantique, la recommandation de produits, etc.

Paramètres

  • <exact>(facultatif) : indicateur qui indique s'il faut exécuter la recherche du voisin le plus proche exact (ENN) ou du voisin le plus proche approximatif (ANN). La valeur peut être l'une des suivantes :

  • false - pour lancer une recherche ANN

  • vrai - pour exécuter la recherche ENN

S'il est omis ou défini sur false, numCandidates c'est obligatoire.

- `<index>` : Name of the Vector Search index to use. - `<limit>` : Number of documents to return in the results. - `<numCandidates>` (optional): This field is required if 'exact' is false or omitted. Number of nearest neighbors to use during the search. Value must be less than or equal to (<=) 10000. You can't specify a number less than the number of documents to return ('limit'). - `<path>` : Indexed vector type field to search. - `<queryVector>` : Array of numbers that represent the query vector.

Exemple (MongoDB Shell)

L'exemple suivant montre comment utiliser l'$vectorSearchopérateur pour rechercher des descriptions de produits similaires en fonction de leurs représentations vectorielles.

Création d'exemples de documents

db.products.insertMany([ { _id: 1, name: "Product A", description: "A high-quality, eco-friendly product for your home.", description_vector: [ 0.2, 0.5, 0.8 ] }, { _id: 2, name: "Product B", description: "An innovative and modern kitchen appliance.", description_vector: [0.7, 0.3, 0.9] }, { _id: 3, name: "Product C", description: "A comfortable and stylish piece of furniture.", description_vector: [0.1, 0.2, 0.4] } ]);

Création d'un index de recherche vectorielle

db.runCommand( { createIndexes: "products", indexes: [{ key: { "description_vector": "vector" }, vectorOptions: { type: "hnsw", dimensions: 3, similarity: "cosine", m: 16, efConstruction: 64 }, name: "description_index" }] } );

Exemple de requête

db.products.aggregate([ { $vectorSearch: { index: "description_index", limit: 2, numCandidates: 10, path: "description_vector", queryVector: [0.1, 0.2, 0.3] } } ]);

Sortie

[ { "_id": 1, "name": "Product A", "description": "A high-quality, eco-friendly product for your home.", "description_vector": [ 0.2, 0.5, 0.8 ] }, { "_id": 3, "name": "Product C", "description": "A comfortable and stylish piece of furniture.", "description_vector": [ 0.1, 0.2, 0.4 ] } ]

Exemples de code

Pour afficher un exemple de code d'utilisation de la $vectorSearch commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

Node.js
const { MongoClient } = require('mongodb'); async function findSimilarProducts(queryVector) { const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'); const db = client.db('test'); const collection = db.collection('products'); const result = await collection.aggregate([ { $vectorSearch: { index: "description_index", limit: 2, numCandidates: 10, path: "description_vector", queryVector: queryVector } } ]).toArray(); console.log(result); client.close(); } findSimilarProducts([0.1, 0.2, 0.3]);
Python
from pymongo import MongoClient def find_similar_products(query_vector): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') db = client.test collection = db.products result = list(collection.aggregate([ { '$vectorSearch': { 'index': "description_index", 'limit': 2, 'numCandidates': 10, 'path': "description_vector", 'queryVector': query_vector } } ])) print(result) client.close() find_similar_products([0.1, 0.2, 0.3])