Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
- Se non hai un abbonamento Azure, crea un account gratuito
Un cluster Di Azure DocumentDB esistente
- Se non si ha un cluster, creare un nuovo cluster
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
}
Usare il
createIndexmetodo con l'opzionetextper creare un indice di testo neltitlecampo.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.
Facoltativamente, creare un indice per supportare la ricerca in entrambi i
titlecampi econtent.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:
Creare un indice per supportare la ricerca in entrambi i campi
titleecontentcon supporto per la lingua inglese. Assegnare inoltre pesi più elevati altitlecampo 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.
Creare un indice che supporti la ricerca sui campi
titleecontent. 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.
Eseguire una ricerca di testo per la frase
DocumentDB.db.products.find( { $text: { $search: "DocumentDB" } } )Facoltativamente, usare l'operatore
$metadi proiezione insieme altextScorecampo in una query per visualizzare il pesodb.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.
Eliminare un indice di testo specificando in modo esplicito la chiave.
db.products.dropIndex({ title: "text" })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.