Condividi tramite


Ricerca full-text in Azure Cosmos DB per NoSQL (anteprima)

Azure Cosmos DB per NoSQL offre ora una potente funzionalità di ricerca full-text in anteprima, progettata per migliorare le funzionalità di ricerca delle applicazioni.

Nota

La ricerca full-text e ibrida è in anteprima anticipata e potrebbe non essere disponibile in tutte le aree in questo momento.

Azure Cosmos DB per NoSQL offre ora una potente funzionalità di ricerca full-text in anteprima, progettata per migliorare le funzionalità di query sui dati. Questa funzionalità include tecniche avanzate di elaborazione del testo, ad esempio stemming, rimozione di parole non significative e tokenizzazione, consentendo ricerche di testo efficienti ed efficaci tramite un indice di testo specializzato. La ricerca full-text include anche l'assegnazione di punteggi full-text con una funzione che valuta la pertinenza dei documenti a una determinata query di ricerca. BM25 o Best Matching 25 considera fattori come la frequenza dei termini, la frequenza inversa del documento e la lunghezza del documento per assegnare punteggi e classificare i documenti. Ciò consente di garantire che i documenti più rilevanti vengano visualizzati nella parte superiore dei risultati della ricerca, migliorando l'accuratezza e l'utilità delle ricerche di testo.

La ricerca full-text è ideale per diversi scenari, tra cui:

  • E-commerce: trovare rapidamente i prodotti in base a descrizioni, recensioni e altri attributi di testo.
  • Gestione dei contenuti: ricerca efficiente tramite articoli, blog e documenti.
  • Supporto tecnico: recuperare i ticket di supporto, le domande frequenti e gli articoli della Knowledge Base pertinenti.
  • Contenuto utente: analizzare e cercare contenuti generati dall'utente, ad esempio post e commenti.
  • RAG per chatbot: migliorare le risposte del chatbot recuperando informazioni rilevanti da corpora di testo di grandi dimensioni, migliorando l'accuratezza e la pertinenza delle risposte.
  • App per intelligenza artificiale multi-agente: consente a più agenti di intelligenza artificiale di eseguire ricerche e analizzare in modo collaborativo grandi quantità di dati di testo, fornendo informazioni dettagliate complete e dettagliate.

Nota

La ricerca full-text e ibrida (anteprima) potrebbe non essere disponibile in tutte le aree al momento.

  1. Abilitare la funzionalità di anteprima "Ricerca full-text e ibrida per NoSQL".
  2. Configurare un contenitore con criteri full-text e indice full-text.
  3. Inserire i dati con le proprietà di testo.
  4. Eseguire query ibride sui dati.

Abilitare la funzionalità di anteprima full-text e ricerca ibrida per NoSQL

La ricerca full-text, l'assegnazione dei punteggi full-text e la ricerca ibrida richiedono l'abilitazione della funzionalità di anteprima nell'account Azure Cosmos DB per NoSQL prima di usare. Per effettuare la registrazione, seguire questa procedura:

  1. Passare alla pagina della risorsa Azure Cosmos DB for NoSQL.
  2. Selezionare il riquadro "Funzionalità" nella voce di menu "Impostazioni".
  3. Selezionare la funzionalità "Full-Text & Hybrid Search for NoSQL API (anteprima)".
  4. Leggere la descrizione della funzionalità per confermare che si vuole abilitarla.
  5. Selezionare "Abilita" per attivare l'indicizzazione vettoriale e la funzionalità di ricerca.

Screenshot della funzionalità full-text e di anteprima della ricerca ibrida nella portale di Azure.

Per usare le funzionalità di ricerca full-text, è prima necessario definire due criteri:

  • Criteri full-text a livello di contenitore che definiscono i percorsi che conterranno testo per le nuove funzioni di sistema di query full-text.
  • Indice full-text aggiunto ai criteri di indicizzazione che consentono una ricerca efficiente.

Criteri full-text

Per ogni proprietà di testo che si vuole configurare per la ricerca full-text, è necessario dichiarare sia la path proprietà della proprietà con il testo che il language del testo. Un semplice criterio full-text può essere:

{
   "defaultLanguage": "en-US",
   "fullTextPaths": [
       {
           "path": "/text",
           "language": "en-US"
       }
   ]
}

La definizione di più percorsi di testo viene eseguita facilmente aggiungendo un altro elemento alla fullTextPolicy matrice:

{
   "defaultLanguage": "en-US",
   "fullTextPaths": [
       {
           "path": "/text1",
           "language": "en-US"
       },
       {
           "path": "/text2",
           "language": "en-US"
       }
   ]
}

Nota

Inglese ("en-us" come lingua) è l'unica lingua supportata in questo momento.

Importante

I caratteri jolly (*, []) non sono attualmente supportati nei criteri full-text o nell'indice full-text.

Indice full-text

Tutte le operazioni di ricerca full-text devono usare un indice full-text. Un indice full-text può essere facilmente definito in qualsiasi criterio di indice di Azure Cosmos DB per NoSQL in base all'esempio seguente.

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        },
    ],
    "fullTextIndexes": [
        {
            "path": "/text"
        }
    ]
}

Analogamente ai criteri full-text, gli indici full-text possono essere definiti in più percorsi.

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        },
    ],
    "fullTextIndexes": [
        {
            "path": "/text"
        },
        {
            "path": "/text2"
        }
    ]
}

Query di ricerca full-text

Le operazioni di ricerca e assegnazione dei punteggi full-text vengono eseguite usando le funzioni di sistema seguenti nel linguaggio di query Di Azure Cosmos DB per NoSQL:

  • FullTextContains: restituisce true se una determinata stringa è contenuta nella proprietà specificata di un documento. Ciò è utile in una WHERE clausola quando si desidera assicurarsi che parole chiave specifiche siano incluse nei documenti restituiti dalla query.
  • FullTextContainsAll: restituisce true se tutte le stringhe specificate sono contenute nella proprietà specificata di un documento. Ciò è utile in una WHERE clausola quando si vuole assicurarsi che più parole chiave siano incluse nei documenti restituiti dalla query.
  • FullTextContainsAny: restituisce true se una delle stringhe specificate è contenuta nella proprietà specificata di un documento. Ciò è utile in una WHERE clausola quando si vuole assicurarsi che almeno una delle parole chiave sia inclusa nei documenti restituiti dalla query.
  • FullTextScore: restituisce un punteggio. Questa operazione può essere usata solo in una ORDER BY RANK clausola, in cui i documenti restituiti vengono ordinati in base alla classificazione del punteggio full-text, con i documenti più rilevanti (con punteggio più alto) nella parte superiore e i documenti meno rilevanti (con punteggio più basso) nella parte inferiore.

Ecco alcuni esempi di ogni funzione in uso.

FullTextContains

In questo esempio si vogliono ottenere i primi 10 risultati in cui la parola chiave "bike" è contenuta nella proprietà c.text.

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "bicycle")

FullTextContainsAll

In questo esempio si vogliono ottenere i primi 10 risultati in cui le parole chiave "rosso" e "bicicletta" sono contenute nella proprietà c.text.

SELECT TOP 10 *
FROM c
WHERE FullTextContainsAll(c.text, "red", "bicycle")

FullTextContainsAny

In questo esempio si vogliono ottenere i primi 10 risultati in cui le parole chiave "rosso" e "bicicletta" o "skateboard" sono contenute nella proprietà c.text.

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "red") AND FullTextContainsAny(c.text, "bicycle", "skateboard")

FullTextScore

In questo esempio si vogliono ottenere i primi 10 risultati in cui sono inclusi "mountain" e "bike" e ordinati in base all'ordine di pertinenza. Ovvero, i documenti con questi termini più spesso dovrebbero essere visualizzati più in alto nell'elenco.

SELECT TOP 10 *
FROM c
ORDER BY RANK FullTextScore(c.text, ["bicycle", "mountain"])

Importante

FullTextScore può essere usato solo nella ORDER BY RANK clausola e non proiettato nell'istruzione SELECT o in una WHERE clausola .