Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’une des principales fonctionnalités fournies par Azure DocumentDB est l’indexation de texte, ce qui permet de rechercher et d’interroger efficacement des données textuelles. Le service implémente les index de texte de la version 2 . La version 2 prend en charge le respect de la casse, mais pas la sensibilité diacritique.
Les index de texte dans Azure DocumentDB sont des structures de données spéciales qui optimisent les requêtes basées sur du texte, ce qui les rend plus rapides et plus efficaces. Ils sont conçus pour gérer du contenu textuel comme des documents, des articles, des commentaires ou d’autres données textuelles. Les index de texte utilisent des techniques telles que la segmentation du texte en unités lexicales, la recherche de radical et les mots vides pour créer un index qui améliore les performances des recherches textuelles.
Prerequisites
Un abonnement Azure
- Si vous n’avez pas d’abonnement Azure, créez un compte gratuit
Un cluster Azure DocumentDB existant
- Si vous n’avez pas de cluster, créez un cluster
Définir un index de texte
Par souci de simplicité, prenons un exemple d’application de blog avec la configuration suivante :
-
Nom de la base de données :
cosmicworks -
Nom de la collection :
products
Cet exemple d’application stocke des articles sous forme de documents avec la structure suivante :
{
"_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
}
Utilisez la
createIndexméthode avec l’optiontextpermettant de créer un index de texte sur letitlechamp.use cosmicworks; db.products.createIndex({ title: "text" })Note
Bien que vous ne puissiez définir qu’un seul index de texte par collection, Azure DocumentDB vous permet de créer des index de texte sur plusieurs champs pour vous permettre d’effectuer des recherches de texte sur différents champs de vos documents.
Si vous le souhaitez, créez un index pour prendre en charge la recherche sur les champs
titleetcontent.db.products.createIndex({ title: "text", content: "text" })
Configurer les options d’index de texte
Les index de texte dans Azure DocumentDB sont fournis avec plusieurs options pour personnaliser leur comportement. Par exemple, vous pouvez spécifier la langue pour l’analyse de texte, définir des pondérations pour hiérarchiser certains champs et configurer des recherches qui ne respectent pas la casse. Voici un exemple de création d’un index de texte avec des options :
Créez un index pour prendre en charge la recherche sur les champs
titleetcontentavec la prise en charge de la langue anglaise. Attribuez également des pondérations plus élevées autitlechamp pour la hiérarchiser dans les résultats de recherche.db.products.createIndex( { title: "text", content: "text" }, { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false } )
Pondérations dans les index de texte
Lors de la création d’un index de texte, vous pouvez affecter différentes pondérations à des champs individuels dans l’index. Ces pondérations représentent l’importance ou la pertinence de chaque champ dans la recherche. Azure DocumentDB calcule un score et des pondérations attribuées pour chaque document en fonction des termes de recherche lors de l’exécution d’une requête de recherche de texte. Le score représente la pertinence du document à la requête de recherche.
Créez un index pour prendre en charge la recherche sur les champs
titleetcontent. Affectez une pondération de 2 au champ « titre » et une pondération de 1 au champ « contenu ».db.products.createIndex( { title: "text", content: "text" }, { weights: { title: 2, content: 1 } } )Note
Lorsqu’un client effectue une requête de recherche de texte avec le terme « DocumentDB », le score de chaque document de la collection est calculé en fonction de la présence et de la fréquence du terme dans les champs « title » et « content », avec une importance plus élevée donnée au champ « title » en raison de son poids plus élevé.
Effectuer une recherche de texte à l’aide d’un index de texte
Une fois l’index de texte créé, vous pouvez effectuer des recherches de texte à l’aide de l’opérateur « text » dans vos requêtes. L’opérateur de texte prend une chaîne de recherche et la met en correspondance avec l’index de texte pour rechercher des documents pertinents.
Effectuez une recherche de texte pour l’expression
DocumentDB.db.products.find( { $text: { $search: "DocumentDB" } } )Si vous le souhaitez, utilisez l'opérateur de projection
$metaavec le champtextScoredans une requête pour afficher le poids.db.products.find( { $text: { $search: "DocumentDB" } }, { score: { $meta: "textScore" } } )
Suppression d’un index de texte
Pour supprimer un index de texte dans MongoDB, vous pouvez utiliser la dropIndex() méthode sur la collection et spécifier la clé d’index ou le nom de l’index de texte à supprimer.
Supprimez un index de texte en spécifiant explicitement la clé.
db.products.dropIndex({ title: "text" })Si vous le souhaitez, supprimez un index de texte en spécifiant le nom unique généré automatiquement.
db.products.dropIndex("title_text")
Limitations de l’index de texte
- Un seul index de texte peut être défini sur une collection.
- Hint() n’est pas pris en charge en combinaison avec une requête à l’aide de $text expression.
- Les opérations de tri ne peuvent pas utiliser l’ordre de l’index de texte dans MongoDB.
- Les index de texte peuvent être relativement volumineux, consommant un espace de stockage important par rapport à d’autres types d’index.