Partager via


Recherche et interrogation avec des index de texte dans Azure Cosmos DB pour MongoDB vCore

S’APPLIQUE À : MongoDB vCore

L’indexation de texte est l’une des principales fonctionnalités d’Azure Cosmos DB for MongoDB vCore et permet des recherches et des requêtes efficaces des données textuelles. Le service implémente les index de texte version 2. La version 2 prend en charge le respect de la casse, mais pas la sensibilité diacritique.

Les index de texte dans Azure Cosmos DB for MongoDB sont des structures de données spéciales qui optimisent les requêtes de 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 toute autre données textuelles volumineuses. 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.

Prérequis

Définir un index de texte

Par souci de simplicité, prenons l’exemple d’une application de blog qui stocke des articles avec la structure de document 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 Cosmos DB - A Game Changer",
  "content": "Azure Cosmos DB is a globally distributed, multi-model database service.",
  "author": "John Doe",
  "category": "Technology",
  "published": true
}
  1. Utiliser la méthode createIndex avec l’option text pour créer un index de texte sur le champ title.

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

    Remarque

    Même vous ne pouvez définir un seul index de texte par collection, Azure Cosmos DB for MongoDB vCore vous permet de créer des index de texte sur plusieurs champs pour vous permettre d’effectuer des recherches de texte dans différents champs de vos documents.

  2. Si vous le souhaitez, créez un index pour prendre en charge la recherche sur les champs title et content.

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

Configurer les options d’index de texte

Les index de texte dans Azure Cosmos DB for MongoDB 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 :

  1. Créez un index pour prendre en charge la recherche sur les champs title et content avec prise en charge de la langue anglaise. Nous avons également attribué des pondérations plus élevées au champ title pour le prioriser 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 attribuer 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 Cosmos DB for MongoDB vCore calcule un score et des pondérations affecté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 par rapport à la requête de recherche.

  1. Créer un index pour prendre en charge la recherche sur les champs title et content. Assignez une pondération de 2 sur le champ « titre » et une pondération de 1 sur le champ « contenu ».

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

    Remarque

    Lorsqu’un client effectue une requête de recherche de texte avec le terme « Cosmos DB », 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 « titre » et « contenu », avec une plus grande importance accordée au champ « titre » en raison de sa pondération plus élevée.

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 « texte » 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 les documents pertinents.

  1. Effectuer une recherche de texte pour l’expression Cosmos DB.

    db.products.find(
        { $text: { $search: "Cosmos DB" } }
    )
    
  2. Si vous le souhaitez, utilisez l’opérateur de projection $meta avec le champ textScore dans une requête pour voir la pondération

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

Supression d’un index de texte

Pour supprimer un index de texte dans MongoDB, vous pouvez utiliser la méthode dropIndex() sur la collection et spécifier la clé d’index ou le nom de l’index de texte que vous souhaitez supprimer.

  1. Supprimer un index de texte en spécifiant explicitement la clé.

    db.products.dropIndex({ title: "text" })
    
  2. 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.
  • Les index de texte prennent en charge les recherches de texte simples et ne fournissent pas de fonctionnalités de recherche avancées, comme les recherches d’expressions régulières.
  • Hint() n’est pas pris en charge en association avec une requête utilisant une expression $text.
  • Les opérations de tri ne peuvent utiliser le classement de l’index de texte dans MongoDB.
  • Les index de texte peuvent être relativement volumineux et consommer un espace de stockage important par rapport à d’autres types d’index.

Étape suivante