Padroneggiare la Vector Search in MongoDB: guida con esempi
Impara a configurare e usare la Vector Search di MongoDB per creare app intelligenti. Questa guida pratica copre indicizzazione vettoriale, best practice per le query ed esempi reali.
L’indicizzazione vettoriale è diventata uno strumento potente per creare applicazioni moderne. Consente di eseguire ricerche per similarità rapide ed efficienti su dati ad alta dimensionalità, spesso chiamati vector embeddings. Questa funzionalità è ora integrata in modo fluido in MongoDB, permettendo agli sviluppatori di costruire funzionalità sofisticate direttamente all’interno dei loro database.
Questo articolo è una guida pratica alla configurazione e all’uso dell’indicizzazione vettoriale in MongoDB. Vedremo il processo passo dopo passo, dalla creazione del primo indice all’esecuzione di query complesse. Imparerai anche le best practice ed esplorerai un esempio reale di creazione di un sistema di raccomandazione prodotti per un e-commerce.
Che cos’è l’indicizzazione vettoriale?
Alla base, l’indicizzazione vettoriale è una tecnica per organizzare gli embeddings vettoriali e accelerare le ricerche per similarità. A differenza degli indici tradizionali che lavorano su valori scalari (come numeri o stringhe), un indice vettoriale è ottimizzato per trovare vettori “vicini” in uno spazio multidimensionale.
Gli embeddings vettoriali sono rappresentazioni numeriche di dati complessi, tra cui testo, immagini e audio. Per esempio, una descrizione di un prodotto può essere convertita in un vettore in cui i prodotti simili hanno vettori più vicini tra loro nello spazio. Questa vicinanza abilita applicazioni potenti come:
Ricerca semantica: trovare prodotti in base al significato della query, non solo alle corrispondenze di parole chiave.
Sistemi di raccomandazione: suggerire prodotti o contenuti agli utenti in base alle loro preferenze.
Riconoscimento di immagini: identificare immagini simili da un ampio database.
Configurare l’indicizzazione vettoriale in MongoDB
Per iniziare, ti servirà un cluster MongoDB Atlas. La vector search è una funzionalità cloud-native. Puoi provarla su MongoDB Atlas o sulla Community edition gratuita. In questo articolo useremo MongoDB Atlas.
Passaggio 1: crea un cluster MongoDB Atlas
Crea un nuovo cluster in MongoDB Atlas. Il tier gratuito M0 è sufficiente per i test.
Passaggio 2: crea una collection e inserisci i dati
Per prima cosa, connettiti al cluster usando MongoDB Shell (mongosh) o il tuo driver preferito. Poi, crea una nuova collection chiamata products e inserisci documenti che contengano un campo vettoriale. Ogni documento deve rappresentare un prodotto e includere un campo embedding, che conterrà la rappresentazione vettoriale del prodotto.
Ecco un esempio più completo con tre documenti di prodotto distinti, ciascuno con un vettore generato casualmente per mostrare come potrebbero apparire i dati. In uno scenario reale, li sostituiresti con embeddings generati da un modello di IA.
db.products.insertMany([
{
"name": "Wireless Noise-Canceling Headphones",
"category": "Electronics",
"description": "Premium over-ear headphones with active noise cancellation and a 30-hour battery life.",
"price": 249.99,
"embedding": [0.012, 0.054, 0.089, -0.031, 0.067, 0.021, -0.045, 0.098, 0.011, -0.076, 0.033, -0.015, -0.087, 0.059, 0.009, 0.042]
},
{
"name": "Smart Coffee Maker",
"category": "Home Goods",
"description": "Programmable coffee machine that can be controlled from your smartphone. Brews up to 12 cups.",
"price": 129.99,
"embedding": [0.056, 0.023, 0.011, 0.078, -0.029, 0.041, 0.087, -0.019, 0.065, 0.002, -0.093, 0.018, 0.057, -0.041, 0.022, 0.064]
},
{
"name": "Ultra-light Backpack",
"category": "Travel",
"description": "Durable and lightweight backpack with multiple compartments, perfect for hiking or daily commutes.",
"price": 79.99,
"embedding": [-0.072, 0.034, 0.019, 0.068, -0.055, 0.081, 0.004, -0.025, 0.039, 0.016, -0.044, 0.062, 0.008, 0.071, -0.013, 0.053]
}
]);Offerto da
Ogni documento contiene name, category, description e price, insieme al fondamentale campo embedding. L’embedding è un array di dimensione fissa di numeri che rappresenta il significato semantico della descrizione del prodotto. La dimensione di questo array, o dimensionalità, dipende dal modello usato per creare gli embeddings. In questo esempio, la dimensionalità è 128.
Questi sono i dati su cui costruiremo il nostro indice vettoriale per abilitare la ricerca semantica e le raccomandazioni di prodotto.
Passaggio 3: crea un indice vettoriale
Una volta che hai i dati con gli embeddings in una collection, il passo successivo è creare un indice vettoriale. Questo indice è cruciale per abilitare ricerche per similarità rapide ed efficienti. Il comando seguente usa createSearchIndex per creare un indice vettoriale sul campo embedding.
La configurazione dell’indice è definita all’interno dell’array fields dell’oggetto definition. Questa struttura è il progetto su cui MongoDB Atlas organizza i tuoi vettori per un recupero ad alta velocità.
I parametri principali per l’indicizzazione vettoriale sono:
path: specifica il nome esatto del campo nei tuoi documenti che contiene l’array vettoriale, che in questo esempio è "embedding".
numDimensions: è il parametro più cruciale. Deve corrispondere esattamente al numero di elementi dell’array vettoriale prodotto dal tuo modello di embedding (ad es. 128, 768, 1536).
similarity: definisce la metrica matematica usata per calcolare la “vicinanza” tra due vettori durante una ricerca.
cosine è in genere consigliata per la ricerca semantica, perché misura l’angolo tra i vettori, concentrandosi sulla direzione semantica.
Altre opzioni includono euclidean (distanza in linea retta) e dotProduct.
Parametri prestazionali opzionali
Per un tuning delle prestazioni avanzato, MongoDB Atlas ti permette di specificare parametri opzionali per ottimizzare storage e memoria:
quantization: questo parametro viene usato per comprimere i vettori, riducendo in modo significativo la dimensione dell’indice e l’impronta in memoria.
scalar o binary possono essere specificati per quantizzare i vettori, scambiando una piccola quota di recall con grandi vantaggi in storage e velocità.
Eseguire query di Vector Search
Una volta creato l’indice, puoi usare lo stage di aggregazione $vectorSearchper eseguire query di similarità.
Troviamo i prodotti più simili a un vettore di query. Questo vettore in genere viene generato dall’input di ricerca di un utente.
// A sample query vector, generated from a user's search for "wireless audio device"
const queryVector = [0.11, 0.22, 0.33, ...];
db.products.aggregate([
{
"$vectorSearch": {
"queryVector": queryVector,
"path": "embedding",
"numCandidates": 100, // Number of documents to scan
"limit": 5 // Number of results to return
}
},
{
"$project": {
"name": 1,
"description": 1,
"_id": 0
}
}
]);Offerto da
queryVector: il vettore che stai cercando.
path: il nome del campo che contiene gli embeddings vettoriali.
numCandidates: il numero di documenti candidati da esaminare nell’indice. Un valore più alto migliora l’accuratezza ma aumenta la latenza.
limit: il numero di risultati principali da restituire.
Lo stage $project è opzionale ma utile per modellare l’output ed escludere i dati vettoriali dal risultato.
Best practice per l’indicizzazione vettoriale
Quando ottimizzi il tuo indice vettoriale, devi bilanciare accuratezza e velocità. La chiave è regolare i parametri dell’indice in base al tuo dataset specifico e agli obiettivi prestazionali.
Scegliere la metrica di similarità giusta
La scelta della metrica è fondamentale perché definisce quanto “simili” sono due vettori. Puoi fare riferimento alla documentazione MongoDB per approfondire i campi.
cosine: ideale per similarità semantica, soprattutto con il testo. Misura l’angolo tra i vettori, ignorandone la lunghezza. È cruciale per modelli in cui la lunghezza del vettore non è significativa.
euclidean: misura la distanza in linea retta tra due vettori. Usala se la magnitudine (o lunghezza) dei vettori è significativa per il loro significato, come in alcuni tipi di dati in cui un valore maggiore indica una caratteristica più forte.
dotProduct: calcola il prodotto scalare di due vettori. Questa metrica è spesso usata nei sistemi di raccomandazione. Quando gli embeddings sono normalizzati a lunghezza 1, il prodotto scalare è funzionalmente equivalente alla similarità coseno.
Gestire le dimensioni degli embeddings
Il parametro delle dimensioni è critico e deve corrispondere esattamente all’output del tuo modello di embedding. Un errore comune è scegliere un numero che non corrisponde all’output del modello. Un modello con un numero di dimensioni maggiore può catturare più dettaglio, ma produrrà un indice più grande e query potenzialmente più lente. Controlla sempre la documentazione del modello per confermare la dimensionalità (ad es. text-embedding-ada-002 di OpenAI produce 1536 dimensioni).
Tuning dell’indice
I parametri numCandidates e numLists sono cruciali per bilanciare velocità e accuratezza. Una buona regola pratica è iniziare con un numCandidates basso e aumentarlo finché non ottieni un livello di accuratezza soddisfacente. Puoi anche sperimentare con diversi valori di numLists per gli indici ivf per trovare il punto di equilibrio per il tuo dataset.
Caso d’uso di esempio: costruire un semplice sistema di raccomandazione
Applichiamo questi concetti a un esempio pratico: un sistema di raccomandazione di prodotti per e-commerce.
Passaggio 1: archivia i dati dei prodotti con embeddings
Per prima cosa, memorizzeremo nomi, categorie e un embedding vettoriale per ciascun prodotto. L’embedding può essere generato dalla descrizione o dalle caratteristiche del prodotto.
Passaggio 2: crea un indice vettoriale su embedding
db.products.createSearchIndex({
"name": "vector_index",
"definition": {
"mappings": {
"fields": [
{
"type": "vector",
"path": "embedding", // The field containing the vectors
"numDimensions": 128, // The correct field name is 'numDimensions'
"similarity": "cosine" // The correct field name is 'similarity'
// Index algorithm (like HNSW) is managed automatically by Atlas
}
]
}
}
});Offerto da
Passaggio 3: esegui una query per prodotti simili
Ora troviamo i prodotti simili allo Smart Speaker. Useremo l’embedding dello Smart Speaker come vettore di query.
Questa query restituirà i tre prodotti principali i cui embeddings sono più vicini a quello dello Smart Speaker, raccomandando di fatto articoli simili, come le Wireless Earbuds.
Conclusione
Le funzionalità di vector search di MongoDB sbloccano nuove possibilità per creare applicazioni intelligenti e personalizzate. Integrando l’indicizzazione vettoriale direttamente nel database, MongoDB semplifica l’architettura, rendendo più facile gestire i dati ed eseguire ricerche per similarità rapide.
Con la potenza della vector search, puoi andare oltre il semplice matching di parole chiave e creare funzionalità che comprendono il contesto e il significato dei tuoi dati. Ti invitiamo a iniziare a sperimentare con il tier gratuito di MongoDB Atlas ed esplorare come l’indicizzazione vettoriale può migliorare le tue applicazioni.
FAQs
Che cos’è un vector embedding e perché è necessario per la vector search?⌄
Un vector embedding è una rappresentazione numerica di dati come testo o immagini. È necessario per la vector search perché consente al database di misurare la similarità semantica tra gli elementi calcolando la distanza tra i loro vettori, andando oltre il semplice matching di parole chiave.
Mi serve una versione specifica di MongoDB per usare la Vector Search?⌄
Sì. La vector search è una funzionalità integrata di MongoDB Atlas, la versione cloud-hosted di MongoDB. Non è disponibile nelle edizioni community o on-premise del database.
Devo generare personalmente i vector embeddings?⌄
Sì, devi generare gli embeddings vettoriali dei tuoi dati prima di poterli archiviare in MongoDB e creare un indice vettoriale. MongoDB non genera questi embeddings per te. In genere userai un servizio di terze parti o un modello pre-addestrato di una piattaforma come OpenAI, Hugging Face o Google AI per convertire testo, immagini o altri dati in vettori numerici.
Posso combinare la vector search con altre query MongoDB?⌄
Sì. La vector search è uno stage di aggregazione ($vectorSearch), il che significa che puoi usarla all’interno di una pipeline di aggregazione più ampia di MongoDB. Questo ti consente di combinarla con altri stage potenti come $match, $project, $limit e $lookup per creare query sofisticate che eseguono filtraggio, ordinamento e arricchimento dei dati in un’unica operazione. Questa capacità è nota come hybrid search ed è essenziale per costruire applicazioni reali.
Qual è la differenza tra i tipi di indice IVF e HNSW?⌄
Sia IVF che HNSW sono algoritmi usati per la ricerca approssimata dei vicini più prossimi (ANN). La differenza principale risiede nel modo in cui strutturano i dati.
Karen è una Data Engineer con la passione per la creazione di piattaforme dati scalabili. Ha esperienza nell'automazione dell'infrastruttura con Terraform ed è entusiasta di condividere ciò che ha imparato in post del blog e tutorial. Karen è una persona che costruisce comunità ed è appassionata nel favorire connessioni tra professionisti dei dati.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
L’indicizzazione vettoriale è diventata uno strumento potente per creare applicazioni moderne. Consente di eseguire ricerche per similarità rapide ed efficienti su dati ad alta dimensionalità, spesso chiamati vector embeddings. Questa funzionalità è ora integrata in modo fluido in MongoDB, permettendo agli sviluppatori di costruire funzionalità sofisticate direttamente all’interno dei loro database.
Questo articolo è una guida pratica alla configurazione e all’uso dell’indicizzazione vettoriale in MongoDB. Vedremo il processo passo dopo passo, dalla creazione del primo indice all’esecuzione di query complesse. Imparerai anche le best practice ed esplorerai un esempio reale di creazione di un sistema di raccomandazione prodotti per un e-commerce.
Che cos’è l’indicizzazione vettoriale?
Alla base, l’indicizzazione vettoriale è una tecnica per organizzare gli embeddings vettoriali e accelerare le ricerche per similarità. A differenza degli indici tradizionali che lavorano su valori scalari (come numeri o stringhe), un indice vettoriale è ottimizzato per trovare vettori “vicini” in uno spazio multidimensionale.
Gli embeddings vettoriali sono rappresentazioni numeriche di dati complessi, tra cui testo, immagini e audio. Per esempio, una descrizione di un prodotto può essere convertita in un vettore in cui i prodotti simili hanno vettori più vicini tra loro nello spazio. Questa vicinanza abilita applicazioni potenti come:
Configurare l’indicizzazione vettoriale in MongoDB
Per iniziare, ti servirà un cluster MongoDB Atlas. La vector search è una funzionalità cloud-native. Puoi provarla su MongoDB Atlas o sulla Community edition gratuita. In questo articolo useremo MongoDB Atlas.
Passaggio 1: crea un cluster MongoDB Atlas
Crea un nuovo cluster in MongoDB Atlas. Il tier gratuito M0 è sufficiente per i test.
Passaggio 2: crea una collection e inserisci i dati
Per prima cosa, connettiti al cluster usando MongoDB Shell (mongosh) o il tuo driver preferito. Poi, crea una nuova collection chiamata products e inserisci documenti che contengano un campo vettoriale. Ogni documento deve rappresentare un prodotto e includere un campo embedding, che conterrà la rappresentazione vettoriale del prodotto.
Ecco un esempio più completo con tre documenti di prodotto distinti, ciascuno con un vettore generato casualmente per mostrare come potrebbero apparire i dati. In uno scenario reale, li sostituiresti con embeddings generati da un modello di IA.
Ogni documento contiene name, category, description e price, insieme al fondamentale campo embedding. L’embedding è un array di dimensione fissa di numeri che rappresenta il significato semantico della descrizione del prodotto. La dimensione di questo array, o dimensionalità, dipende dal modello usato per creare gli embeddings. In questo esempio, la dimensionalità è 128.
Questi sono i dati su cui costruiremo il nostro indice vettoriale per abilitare la ricerca semantica e le raccomandazioni di prodotto.
Passaggio 3: crea un indice vettoriale
Una volta che hai i dati con gli embeddings in una collection, il passo successivo è creare un indice vettoriale. Questo indice è cruciale per abilitare ricerche per similarità rapide ed efficienti. Il comando seguente usa createSearchIndex per creare un indice vettoriale sul campo embedding.
Capire la configurazione
La configurazione dell’indice è definita all’interno dell’array fields dell’oggetto definition. Questa struttura è il progetto su cui MongoDB Atlas organizza i tuoi vettori per un recupero ad alta velocità.
I parametri principali per l’indicizzazione vettoriale sono:
Parametri prestazionali opzionali
Per un tuning delle prestazioni avanzato, MongoDB Atlas ti permette di specificare parametri opzionali per ottimizzare storage e memoria:
Eseguire query di Vector Search
Una volta creato l’indice, puoi usare lo stage di aggregazione $vectorSearch per eseguire query di similarità.
Troviamo i prodotti più simili a un vettore di query. Questo vettore in genere viene generato dall’input di ricerca di un utente.
Lo stage $project è opzionale ma utile per modellare l’output ed escludere i dati vettoriali dal risultato.
Best practice per l’indicizzazione vettoriale
Quando ottimizzi il tuo indice vettoriale, devi bilanciare accuratezza e velocità. La chiave è regolare i parametri dell’indice in base al tuo dataset specifico e agli obiettivi prestazionali.
Scegliere la metrica di similarità giusta
La scelta della metrica è fondamentale perché definisce quanto “simili” sono due vettori. Puoi fare riferimento alla documentazione MongoDB per approfondire i campi.
Gestire le dimensioni degli embeddings
Il parametro delle dimensioni è critico e deve corrispondere esattamente all’output del tuo modello di embedding. Un errore comune è scegliere un numero che non corrisponde all’output del modello. Un modello con un numero di dimensioni maggiore può catturare più dettaglio, ma produrrà un indice più grande e query potenzialmente più lente. Controlla sempre la documentazione del modello per confermare la dimensionalità (ad es. text-embedding-ada-002 di OpenAI produce 1536 dimensioni).
Tuning dell’indice
I parametri numCandidates e numLists sono cruciali per bilanciare velocità e accuratezza. Una buona regola pratica è iniziare con un numCandidates basso e aumentarlo finché non ottieni un livello di accuratezza soddisfacente. Puoi anche sperimentare con diversi valori di numLists per gli indici ivf per trovare il punto di equilibrio per il tuo dataset.
Caso d’uso di esempio: costruire un semplice sistema di raccomandazione
Applichiamo questi concetti a un esempio pratico: un sistema di raccomandazione di prodotti per e-commerce.
Passaggio 1: archivia i dati dei prodotti con embeddings
Per prima cosa, memorizzeremo nomi, categorie e un embedding vettoriale per ciascun prodotto. L’embedding può essere generato dalla descrizione o dalle caratteristiche del prodotto.
Passaggio 2: crea un indice vettoriale su embedding
Passaggio 3: esegui una query per prodotti simili
Ora troviamo i prodotti simili allo Smart Speaker. Useremo l’embedding dello Smart Speaker come vettore di query.
Questa query restituirà i tre prodotti principali i cui embeddings sono più vicini a quello dello Smart Speaker, raccomandando di fatto articoli simili, come le Wireless Earbuds.
Conclusione
Le funzionalità di vector search di MongoDB sbloccano nuove possibilità per creare applicazioni intelligenti e personalizzate. Integrando l’indicizzazione vettoriale direttamente nel database, MongoDB semplifica l’architettura, rendendo più facile gestire i dati ed eseguire ricerche per similarità rapide.
Con la potenza della vector search, puoi andare oltre il semplice matching di parole chiave e creare funzionalità che comprendono il contesto e il significato dei tuoi dati. Ti invitiamo a iniziare a sperimentare con il tier gratuito di MongoDB Atlas ed esplorare come l’indicizzazione vettoriale può migliorare le tue applicazioni.