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à.
Lavorare con le raccolte di ricerca vettoriale
Con il tipo di raccolta di ricerche vettoriali in OpenSearch Serverless, puoi eseguire ricerche di somiglianza scalabili e ad alte prestazioni. Puoi creare moderne esperienze di ricerca aumentata di machine learning (ML) e applicazioni generative di intelligenza artificiale (AI) senza gestire l'infrastruttura di database vettoriale sottostante.
I casi d'uso per le raccolte di ricerche vettoriali includono la ricerca di immagini, la ricerca di documenti, il recupero di musica, i consigli sui prodotti, le ricerche video, le ricerche basate sulla posizione, il rilevamento di frodi e il rilevamento di anomalie.
Il motore vettoriale per OpenSearch Serverless utilizza la funzione di ricerca k-Nearest Neighbor (k-NN) in.
Il motore vettoriale fornisce metriche di distanza come la distanza euclidea, la somiglianza del coseno e la somiglianza del prodotto scalare e può contenere 16.000 dimensioni. È possibile memorizzare campi con vari tipi di dati per i metadati, ad esempio numeri, valori booleani, date, parole chiave e punti geografici. Puoi anche memorizzare campi con testo per informazioni descrittive per aggiungere più contesto ai vettori memorizzati. La colocazione dei tipi di dati riduce la complessità, aumenta la manutenibilità ed evita la duplicazione dei dati, problemi di compatibilità delle versioni e problemi di licenza.
NextGen raccolte di ricerca vettoriale
NextGen la ricerca vettoriale si ridimensiona su richiesta in base al carico di lavoro per ottimizzare l'equilibrio tra costi e prestazioni. Solo i blocchi di dati necessari per soddisfare le richieste di ricerca attive vengono caricati in memoria e gli operatori scalano dinamicamente in base alla memoria e alle risorse della CPU richieste. Quando la raccolta è inattiva e non ci sono richieste in corso, sia l'indicizzazione che la ricerca vengono ridimensionate fino a zero, garantendo ulteriori risparmi sui costi. Per impostazione predefinita, NextGen include ottimizzazioni integrate che migliorano il richiamo riducendo al contempo costi e latenza.
-
ID documento personalizzato: gli ID di documento personalizzati sono supportati nelle NextGen raccolte, rendendo più semplice per i clienti eseguire aggiornamenti o indicizzare i documenti con ID forniti dall'utente.
-
Indici di compressione 32x: per impostazione predefinita, tutti gli indici vengono creati con una tecnica di compressione 32x avanzata. È possibile ignorare il livello di compressione predefinito e selezionare qualsiasi livello di compressione supportato: 1x, 2x, 8x, 16x o 32x (impostazione predefinita).
-
Accelerazione della creazione dell'indice: l'accelerazione GPU è abilitata per impostazione predefinita per aiutare a creare indici vettoriali su larga scala in modo più rapido ed efficiente. Riduce il tempo necessario per indicizzare i dati in indici vettoriali, offrendo un'esperienza di indicizzazione ad alto rendimento e risparmi sui costi. Le risorse GPU vengono fornite solo quando necessario durante le operazioni di creazione dell'indice. È possibile controllare l'utilizzo della GPU in base all'indice utilizzando l'impostazione.
index.knn.remote_index_build.enabledPer ulteriori informazioni, consulta Accelerazione GPU per l'indicizzazione vettoriale. -
API semplificata: le raccolte di ricerca NextGen vettoriale non richiedono i
modeparametriengineand nelle mappature degli indici. Il sistema determina automaticamente la configurazione ottimale internamente, riducendo la complessità della creazione dell'indice. -
Risposta di ricerca ottimizzata: per impostazione predefinita, le risposte di ricerca nelle raccolte NextGen vettoriali escludono il vettore originale dai risultati. Ciò riduce la latenza di ricerca end-to-end e le dimensioni del payload di risposta. Per includere i vettori nella risposta di ricerca, consulta. Recupera il documento completo con vettori
-
NextGen le raccolte vettoriali hanno una latenza di lettura dopo scrittura () di 10 secondi.
refresh_interval
Guida introduttiva alle raccolte di ricerca vettoriale
In questo tutorial, completerai i seguenti passaggi per archiviare, cercare e recuperare gli incorporamenti vettoriali in tempo reale:
Fase 1: configurazione delle autorizzazioni
Per completare questo tutorial (e per utilizzare OpenSearch Serverless in generale), devi disporre delle autorizzazioni AWS Identity and Access Management (IAM) corrette. In questo tutorial, crei una raccolta, carichi e cerchi dati, quindi elimini la raccolta.
L'utente o il ruolo devono avere una policy basata sull'identità allegata con le seguenti autorizzazioni minime:
Per ulteriori informazioni sulle autorizzazioni IAM OpenSearch Serverless, consulta. Identity and Access Management per Amazon OpenSearch Serverless
Fase 2: creazione di una raccolta
Per creare una nuova raccolta, segui il flusso unificato di creazione della raccolta (NextGen Express Create), che configura automaticamente le politiche di crittografia, rete e accesso ai dati. Per istruzioni, consulta Crea una NextGen raccolta (Express Create).
Per il resto di questo tutorial, la raccolta di esempio ha un nome housing ed è una raccolta di ricerca NextGen vettoriale.
Nota
Se invece scegli di creare una collezione vettoriale classica, consulta le procedure specifiche Lavorare con le raccolte vettoriali classiche per le raccolte Classic.
Fase 3: Caricamento e ricerca dei dati
Un indice è una raccolta di documenti con uno schema di dati comune che consente di archiviare, cercare e recuperare gli incorporamenti vettoriali e altri campi. Puoi creare e caricare dati negli indici di una raccolta OpenSearch Serverless utilizzando la console Dev Tools
Per indicizzare e cercare i dati nella collezione di alloggi
-
Per creare un indice per la tua nuova collezione, invia la seguente richiesta nella console Dev Tools
. Per impostazione predefinita, questo crea un indice con distanza euclidea e compressione 32x. PUT housing-index { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "space_type": "l2" }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } } -
Per utilizzare un livello di compressione diverso,
compression_levelimpostalo nella mappatura del campo. L'esempio seguente crea un indicecompression_levelimpostato su 1x.PUT housing-index-1x { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "compression_level": "1x", "space_type": "l2" }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }I livelli di compressione supportati sono 1x, 2x, 8x, 16x e 32x.
-
Per indicizzare i documenti
housing-index, puoi utilizzare un ID generato dal sistema (POST) o un ID fornito dall'utente (PUT).# System-generated document ID POST housing-index/_doc { "housing-vector": [10, 20, 30], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } # User-provided document ID PUT housing-index/_doc/100 { "housing-vector": [10, 20, 30], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } -
Per cercare proprietà simili a quelle del tuo indice, invia la seguente query. Per impostazione predefinita, la risposta di ricerca esclude il vettore originale da
_sourceper ridurre la latenza e le dimensioni del payload.GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [10, 20, 30], "k": 2 } } } }La risposta esclude il campo da:
housing-vector_source{ "took": 10, "timed_out": false, "_shards": { "total": 0, "successful": 0, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 1, "hits": [ { "_index": "housing-index", "_id": "100", "_score": 1, "_source": { "price": "2800", "location": "47.71, 122.00", "title": "2 bedroom in downtown Seattle" } } ] } }
Recupera il documento completo con vettori
Per ignorare il comportamento predefinito, imposta su true nella _source richiesta di ricerca. Puoi anche usare le excludes opzioniincludes/di _source per recuperare campi specifici.
GET housing-index/_search { "size": 5, "_source": true, "query": { "knn": { "housing-vector": { "vector": [10, 20, 30], "k": 2 } } } }
La risposta ora include il housing-vector campo in_source:
{ "took": 10, "timed_out": false, "_shards": { "total": 0, "successful": 0, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 1, "hits": [ { "_index": "housing-index", "_id": "100", "_score": 1, "_source": { "housing-vector": [10, 20, 30], "price": "2800", "location": "47.71, 122.00", "title": "2 bedroom in downtown Seattle" } } ] } }
Fase 4: Eliminazione della raccolta
Poiché la collezione di alloggi è a scopo di test, eliminala quando hai finito di sperimentare.
Per eliminare una raccolta OpenSearch Serverless
-
Apri la console Amazon OpenSearch Service.
-
Nel riquadro di navigazione a sinistra, scegli Collezioni e seleziona la collezione di alloggi.
-
Scegli Elimina e conferma l'eliminazione.
Ricerca filtrata
Puoi utilizzare i filtri per affinare i risultati della ricerca semantica. Per creare un indice ed eseguire una ricerca filtrata sui tuoi documenti, sostituisci Carica e cerca dati nel tutorial precedente con le seguenti istruzioni. Gli altri passaggi rimangono invariati. Per ulteriori informazioni sui filtri, consulta K-nn search with
Per indicizzare e cercare i dati nella collezione di alloggi
-
Per creare un indice singolo per la tua raccolta, invia la seguente richiesta nella console Dev Tools
: PUT housing-index-filtered { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "space_type": "l2", "method": { "name": "hnsw" } }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } } -
Per indicizzare un singolo documento in housing-index-filtered, invia la seguente richiesta:
POST housing-index-filtered/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } -
Per cercare i dati relativi a un appartamento a Seattle a un determinato prezzo ed entro una determinata distanza da un punto geografico, invia la seguente richiesta:
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 } } } ] } } } } } }
Limitazioni
-
La ricerca radiale non è supportata negli indici NextGen vettoriali che utilizzano la compressione 32x.
Lavorare con le raccolte vettoriali classiche
Le collezioni vettoriali classiche sono la generazione originale della ricerca vettoriale OpenSearch Serverless. Utilizzate le procedure in questa sezione se disponete di una collezione vettoriale classica esistente. Per nuove raccolte, ti consigliamo NextGen : consulta Creazione di raccolte Creare una raccolta NextGen vettoriale.
Nota
-
Le raccolte Amazon OpenSearch Serverless Classic supportano la quantizzazione scalare Faiss a 16 bit, che esegue conversioni tra vettori mobili a 32 bit e vettori a 16 bit. Per ulteriori informazioni, consulta Quantizzazione scalare a 16 bit di Faiss.
È inoltre possibile utilizzare vettori binari per ridurre i costi di memoria. Per ulteriori informazioni, consulta Vettori binari . -
Le raccolte Amazon OpenSearch Serverless Classic supportano la ricerca vettoriale basata su disco, che riduce in modo significativo i costi operativi per i carichi di lavoro vettoriali in ambienti con poca memoria. Per ulteriori informazioni, consulta la ricerca vettoriale. Disk-based
Gli esempi seguenti si applicano alle raccolte vettoriali Classic, che utilizzano il nmslib motore per impostazione predefinita e includono il vettore originale nelle risposte di ricerca.
Per indicizzare e cercare dati in una collezione di alloggi Classic
-
Per creare un indice per la tua collezione Classic, invia la seguente richiesta nella console Dev Tools
. Per impostazione predefinita, questo crea un indice con il nmslibmotore e la distanza euclidea.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" } } } } -
Per indicizzare un singolo documento in housing-index, invia la seguente richiesta:
POST housing-index/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } -
Per cercare proprietà simili a quelle del tuo indice, invia la seguente query:
GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 10, 20, 30 ], "k": 5 } } } }
Per creare un indice ed eseguire una ricerca filtrata, utilizza i seguenti esempi. Per ulteriori informazioni sui filtri, consulta K-nn search with
Per indicizzare ed eseguire una ricerca filtrata su una collezione di alloggi Classic
-
Per creare un indice singolo per la tua collezione, invia la seguente richiesta nella 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" } } } } -
Per indicizzare un singolo documento in housing-index-filtered, invia la seguente richiesta:
POST housing-index-filtered/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } -
Per cercare i dati relativi a un appartamento a Seattle a un determinato prezzo ed entro una determinata distanza da un punto geografico, invia la seguente richiesta:
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 } } } ] } } } } } }
Le raccolte vettoriali classiche presentano le seguenti limitazioni:
-
Le raccolte di ricerca vettoriale non supportano il motore Apache Lucene ANN.
-
Le raccolte di ricerca vettoriale supportano solo l'algoritmo HNSW con Faiss. Non supportano la fecondazione in vitro o la fecondazione in vitro.
-
Le raccolte di ricerca vettoriale non supportano le operazioni API di riscaldamento, statistiche e addestramento dei modelli.
-
Le raccolte di ricerca vettoriale non supportano script in linea o memorizzati.
-
Le informazioni sul conteggio degli indici non sono disponibili nelle raccolte Console di gestione AWS per la ricerca vettoriale.
-
L'intervallo di aggiornamento per gli indici nelle raccolte di ricerca vettoriale è di 60 secondi.
Billion-scale carichi di lavoro
Le raccolte di ricerca vettoriale classiche supportano carichi di lavoro con miliardi di vettori. Non è necessario reindicizzare per scopi di ridimensionamento perché il ridimensionamento automatico lo fa per te. Se hai milioni di vettori (o più) con un numero elevato di dimensioni e hai bisogno di più di 200 OCU, contatta l'AWS assistenza
Fasi successive
Ora che sai come creare una raccolta di ricerca vettoriale e indicizzare i dati, puoi provare i seguenti esercizi:
-
Usa il client OpenSearch Python per lavorare con raccolte di ricerca vettoriale. Guarda questo tutorial su. GitHub
-
Usa il client OpenSearch Java per lavorare con raccolte di ricerca vettoriale. Guarda questo tutorial su. GitHub
-
Configurato LangChain per essere utilizzato OpenSearch come archivio vettoriale. LangChain è un framework open source per lo sviluppo di applicazioni basate su modelli linguistici. Per ulteriori informazioni, consulta la documentazione relativa ad LangChain
.