Condividi tramite


Eseguire ricerche ed eseguire query con indici di testo in Azure DocumentDB

Una delle funzionalità principali offerte da Azure DocumentDB è l'indicizzazione del testo, che consente una ricerca efficiente e l'esecuzione di query sui dati basati su testo. Il servizio implementa gli indici di testo versione 2 . La versione 2 supporta la distinzione tra maiuscole e minuscole, ma non la diacritica.

Gli indici di testo in Azure DocumentDB sono strutture di dati speciali che ottimizzano le query basate su testo, rendendole più veloci ed efficienti. Sono progettati per gestire contenuto testuale, ad esempio documenti, articoli, commenti o altri dati con un numero elevato di testo. Gli indici di testo usano tecniche come tokenizzazione, stemming e parole chiave per creare un indice che migliora le prestazioni delle ricerche basate su testo.

Prerequisiti

  • Una sottoscrizione di Azure

  • Un cluster Di Azure DocumentDB esistente

Definire un indice di testo

Per semplicità, si consideri un esempio di applicazione blog con la configurazione seguente:

  • Nome del database: cosmicworks
  • Nome raccolta: products

Questa applicazione di esempio archivia gli articoli come documenti con la struttura seguente:

{
  "_id": ObjectId("617a34e7a867530bff1b2346"),
  "title": "Azure DocumentDB - A Game Changer",
  "content": "Azure DocumentDB is a globally distributed, multi-model database service.",
  "author": "John Doe",
  "category": "Technology",
  "published": true
}
  1. Usare il createIndex metodo con l'opzione text per creare un indice di testo nel title campo.

    use cosmicworks;
    
    db.products.createIndex({ title: "text" })
    

    Annotazioni

    Sebbene sia possibile definire un solo indice di testo per ogni raccolta, Azure DocumentDB consente di creare indici di testo in più campi per consentire di eseguire ricerche di testo in diversi campi nei documenti.

  2. Facoltativamente, creare un indice per supportare la ricerca in entrambi i title campi e content .

    db.products.createIndex({ title: "text", content: "text" })
    

Configurare le opzioni per l'indice di testo

Gli indici di testo in Azure DocumentDB includono diverse opzioni per personalizzare il comportamento. Ad esempio, è possibile specificare la lingua per l'analisi del testo, impostare pesi per classificare in ordine di priorità determinati campi e configurare ricerche senza distinzione tra maiuscole e minuscole. Ecco un esempio di creazione di un indice di testo con opzioni:

  1. Creare un indice per supportare la ricerca in entrambi i campi title e content con supporto per la lingua inglese. Assegnare inoltre pesi più elevati al title campo per assegnargli la priorità nei risultati della ricerca.

    db.products.createIndex(
        { title: "text", content: "text" },
        { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false }
    )
    

Pesi negli indici di testo

Quando si crea un indice di testo, è possibile assegnare pesi diversi ai singoli campi nell'indice. Questi pesi rappresentano l'importanza o la pertinenza di ogni campo nella ricerca. Azure DocumentDB calcola un punteggio e i pesi assegnati per ogni documento in base ai termini di ricerca durante l'esecuzione di una query di ricerca di testo. Il punteggio rappresenta la pertinenza del documento per la query di ricerca.

  1. Creare un indice che supporti la ricerca sui campi title e content. Assegnare un peso pari a 2 al campo "titolo" e un peso pari a 1 al campo "contenuto".

    db.products.createIndex(
    { title: "text", content: "text" },
    { weights: { title: 2, content: 1 } }
    )
    

    Annotazioni

    Quando un client esegue una query di ricerca di testo con il termine "DocumentDB", il punteggio per ogni documento nella raccolta verrà calcolato in base alla presenza e alla frequenza del termine nei campi "title" e "content", con maggiore importanza assegnata al campo "title" a causa del peso maggiore.

Eseguire una ricerca di testo usando un indice di testo

Dopo aver creato l'indice di testo, è possibile eseguire ricerche di testo usando l'operatore "text" nelle query. L'operatore di testo prende una stringa di ricerca e la confronta con l'indice di testo per trovare i documenti pertinenti.

  1. Eseguire una ricerca di testo per la frase DocumentDB.

    db.products.find(
        { $text: { $search: "DocumentDB" } }
    )
    
  2. Facoltativamente, usare l'operatore $meta di proiezione insieme al textScore campo in una query per visualizzare il peso

    db.products.find(
        { $text: { $search: "DocumentDB" } },
        { score: { $meta: "textScore" } }
    )
    

Eliminazione di un indice di testo

Per eliminare un indice di testo in MongoDB, è possibile usare il dropIndex() metodo nella raccolta e specificare la chiave di indice o il nome per l'indice di testo da rimuovere.

  1. Eliminare un indice di testo specificando in modo esplicito la chiave.

    db.products.dropIndex({ title: "text" })
    
  2. Facoltativamente, eliminare un indice di testo specificando il nome univoco generato automaticamente.

    db.products.dropIndex("title_text")
    

Limitazioni dell'indice di testo

  • È possibile definire un solo indice di testo in una raccolta.
  • Hint() non è supportato in combinazione con una query usando l'espressione $text.
  • Le operazioni di ordinamento non possono usare l'ordinamento dell'indice di testo in MongoDB.
  • Gli indici di testo possono essere relativamente grandi, consumando spazio di archiviazione significativo rispetto ad altri tipi di indice.

Passo successivo