$ Ricerca vettoriale - Amazon DocumentDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

$ Ricerca vettoriale

Nuovo dalla versione 8.0

Non supportato dal cluster Elastic.

L'$vectorSearchoperatore in Amazon DocumentDB consente di eseguire ricerche vettoriali, un metodo utilizzato nell'apprendimento automatico per trovare punti dati simili confrontando le loro rappresentazioni vettoriali utilizzando metriche di distanza o similarità. Questa funzionalità combina la flessibilità e l'ampia gamma di interrogazioni di un database di documenti basato su JSON con la potenza della ricerca vettoriale, consentendoti di creare casi d'uso di machine learning e intelligenza artificiale generativa come la ricerca semantica, la raccomandazione di prodotti e altro ancora.

Parametri

  • <exact>(opzionale): Contrassegno che specifica se eseguire la ricerca Exact Nearest Neighbor (ENN) o Approximate Nearest Neighbor (ANN). Il valore può essere uno dei seguenti:

  • false: per eseguire una ricerca ANN

  • true - per eseguire una ricerca ENN

Se omesso o impostato su false, numCandidates è obbligatorio.

- `<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.

Esempio (MongoDB Shell)

L'esempio seguente mostra come utilizzare l'$vectorSearchoperatore per trovare descrizioni di prodotti simili in base alle loro rappresentazioni vettoriali.

Crea documenti di esempio

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] } ]);

Crea un indice di ricerca vettoriale

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

Esempio di query

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

Output

[ { "_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 ] } ]

Esempi di codice

Per visualizzare un esempio di codice per l'utilizzo del $vectorSearch comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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])