Ricerca ibrida in Azure Cosmos DB per NoSQL (anteprima)
Azure Cosmos DB per NoSQL supporta ora una potente funzionalità di ricerca ibrida che combina La ricerca vettoriale con l'assegnazione dei punteggi di ricerca full-text (BM25) usando la funzione Fusion rank reciproca (RRF).
Nota
La ricerca full-text e ibrida è in anteprima anticipata e potrebbe non essere disponibile in tutte le aree in questo momento.
Che cos'è la ricerca ibrida?
La ricerca ibrida sfrutta i punti di forza dei metodi di ricerca basati su parole chiave tradizionali e basati su vettori per offrire risultati di ricerca più pertinenti e accurati. La ricerca ibrida è facile da eseguire in Azure Cosmos DB per NoSQL grazie alla possibilità di archiviare sia i metadati che i vettori all'interno dello stesso documento.
La ricerca ibrida in Azure Cosmos DB per NoSQL integra due metodologie di ricerca distinte:
- Ricerca vettoriale: usa modelli di Machine Learning per comprendere il significato semantico delle query e dei documenti. Ciò consente risultati di ricerca più sfumati e con riconoscimento del contesto, particolarmente utili per query complesse in cui la ricerca di parole chiave tradizionale potrebbe non essere breve.
- Ricerca full-text (BM25): algoritmo ben stabilito che assegna punteggi ai documenti in base alla presenza e alla frequenza di parole e termini. BM25 è particolarmente efficace per le ricerche di parole chiave semplici, fornendo una baseline affidabile per la pertinenza della ricerca.
I risultati della ricerca vettoriale e della ricerca full-text vengono quindi combinati usando la funzione RRF (Reciprocal Rank Fusion). RRF è un metodo di aggregazione di classificazione che unisce le classificazioni da più algoritmi di ricerca per produrre una singola classificazione unificata. In questo modo, i risultati finali della ricerca traggono vantaggio dai punti di forza di entrambi gli approcci di ricerca e offrono diversi vantaggi.
- Rilevanza migliorata: combinando la comprensione semantica con la corrispondenza delle parole chiave, la ricerca ibrida offre risultati più rilevanti per un'ampia gamma di query.
- Accuratezza migliorata: la funzione RRF garantisce che i risultati più pertinenti di entrambi i metodi di ricerca siano classificati in ordine di priorità.
- Versatilità: adatto per diversi casi d'uso, tra cui La generazione aumentata di recupero (RAG) per migliorare le risposte generate da un LLM in base ai propri dati.
Come usare la ricerca ibrida
- Abilitare la funzionalità Ricerca vettoriale in Azure Cosmos DB per NoSQL.
- Abilitare la funzionalità di anteprima full-text e ricerca ibrida per NoSQL.
- Creare un contenitore con criteri vettoriali, criteri full-text, indice vettoriale e indice full-text.
- Inserire i dati con proprietà di testo e vettore.
- Eseguire query ibride sui dati.
Configurare criteri e indici per la ricerca ibrida
Importante
Attualmente, i criteri vettoriali e gli indici vettoriali non sono modificabili dopo la creazione. Per apportare modifiche, creare una nuova raccolta.
Criteri vettoriali di esempio
{
"vectorEmbeddings": [
{
"path":"/vector",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":3
},
}
Un criterio full-text di esempio
{
"defaultLanguage": "en-US",
"fullTextPaths": [
{
"path": "/text",
"language": "en-US"
}
]
}
Criteri di indicizzazione di esempio con indici full-text e vettoriali
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
},
{
"path": "/vector/*"
}
],
"fullTextIndexes": [
{
"path": "/text"
}
],
"vectorIndexes": [
{
"path": "/vector",
"type": "DiskANN"
}
]
}
Query di ricerca ibrida
È possibile eseguire query di ricerca ibride sfruttando la RRF
funzione di sistema in una ORDER BY RANK
clausola che include sia una VectorDistance
funzione FullTextScore
che . Ad esempio, una query con parametri per trovare i risultati principali k più rilevanti sarà simile alla seguente:
SELECT TOP @k *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, @queryVector), FullTextScore(c.content, [@searchTerm1, @searchTerm2, ...]))
Si supponga di disporre di un documento con incorporamenti vettoriali archiviati in ogni documento nella proprietà c.vector
e nei dati di testo contenuti nella proprietà c.text. Per ottenere i 10 documenti più rilevanti usando la ricerca ibrida, la query può essere scritta come segue:
SELECT TOP 10 *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, [1,2,3]), FullTextScore(c.text, ["text", "to", "search", "goes" ,"here])