Partager via


Rechercher et interroger avec des index de texte dans Azure DocumentDB

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

  • 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
}
  1. Utilisez la createIndex méthode avec l’option text permettant de créer un index de texte sur le title champ.

    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.

  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 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 :

  1. Créez un index pour prendre en charge la recherche sur les champs title et content avec la prise en charge de la langue anglaise. Attribuez également des pondérations plus élevées au title champ 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.

  1. Créez un index pour prendre en charge la recherche sur les champs title et content. 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.

  1. Effectuez une recherche de texte pour l’expression DocumentDB.

    db.products.find(
        { $text: { $search: "DocumentDB" } }
    )
    
  2. Si vous le souhaitez, utilisez l'opérateur de projection $meta avec le champ textScore dans 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.

  1. Supprimez 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.
  • 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.

Étape suivante