Créer et enregistrer un schéma

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Un schéma Google Cloud Search est une structure JSON qui définit les objets, les propriétés et les options à utiliser pour l'indexation et l'interrogation de vos données. Le connecteur de contenu lit les données de votre dépôt et, en fonction du schéma enregistré, les structure et les indexe.

Pour créer un schéma, fournissez un objet de schéma JSON à l'API, puis enregistrez-le. Vous devez enregistrer un objet de schéma pour chacun de vos dépôts avant de pouvoir indexer vos données.

Ce document couvre les principes de base de la création de schémas. Pour savoir comment ajuster votre schéma afin d'améliorer la recherche, consultez Améliorer la qualité de la recherche.

Créer un schéma

Voici la liste des étapes utilisées pour créer votre schéma Cloud Search:

  1. Identifiez le comportement attendu des utilisateurs
  2. Initialiser une source de données
  3. Créer un schéma
  4. Exemple de schéma complet
  5. Enregistrer votre schéma
  6. Indexer vos données
  7. Tester votre schéma
  8. Ajuster votre schéma
.

Identifier le comportement attendu des utilisateurs

Anticiper les types de requêtes que vos utilisateurs effectuent vous aide à élaborer votre stratégie de création de schéma.

Par exemple, lors de l'émission de requêtes sur une base de données de films, vous pouvez anticiper une requête de l'utilisateur telle que "Montre-moi tous les films avec Robert Redford". Votre schéma doit donc accepter les résultats de requête basés sur "tous les films avec un acteur spécifique".

Pour définir votre schéma afin de refléter les modèles comportementaux de l'utilisateur, envisagez d'effectuer les tâches suivantes:

  1. Évaluer un ensemble varié de requêtes souhaitées provenant de différents utilisateurs
  2. Identifiez les objets qui pourraient être utilisés dans les requêtes. Les objets sont des ensembles logiques de données associées, comme un film dans une base de données de films.
  3. Identifiez les propriétés et les valeurs qui composent l'objet et qui peuvent être utilisées dans les requêtes. Les propriétés sont les attributs indexables de l'objet. Elles peuvent inclure des valeurs primitives ou d'autres objets. Par exemple, un objet "movie" peut avoir des propriétés telles que le titre et la date de sortie du film en tant que valeurs primitives. L'objet "movie" peut également contenir d'autres objets, tels que des membres de la distribution, qui ont leurs propres propriétés, telles que leur nom ou leur rôle.
  4. Identifiez des exemples de valeurs valides pour les propriétés. Les valeurs sont les données réelles indexées pour une propriété. Par exemple, le titre d'un film dans votre base de données peut être "Raiders of the Lost Ark".
  5. Déterminez les options de tri et de classement souhaitées par vos utilisateurs. Par exemple, lors de l'interrogation de films, les utilisateurs peuvent vouloir trier les résultats par ordre chronologique et les classer par nombre d'audience, sans avoir à les trier par titre par ordre alphabétique.
  6. (Facultatif) Déterminez si l'une de vos propriétés représente un contexte plus spécifique dans lequel les recherches peuvent être exécutées, comme le poste ou le service des utilisateurs, afin que des suggestions de saisie semi-automatique puissent être fournies en fonction du contexte. Par exemple, les utilisateurs recherchant une base de données de films peuvent ne s'intéresser qu'à un certain genre de films. Les utilisateurs définissent le genre de recherche qu'ils souhaitent voir apparaître, éventuellement dans leur profil utilisateur. Ensuite, lorsqu'un utilisateur commence à saisir une requête sur des films, seuls les films du genre souhaité, tels que "films d'action", sont suggérés dans les suggestions de saisie semi-automatique.
  7. Dressez la liste de ces objets, propriétés et exemples de valeurs pouvant être utilisés dans les recherches. (Pour en savoir plus sur l'utilisation de cette liste, consultez la section Définir des options d'opérateur.)

Initialiser votre source de données

Une source de données représente les données d'un dépôt qui ont été indexées et stockées dans Google Cloud. Pour obtenir des instructions sur l'initialisation d'une source de données, consultez Gérer des sources de données tierces.

Les résultats de recherche d'un utilisateur sont renvoyés à partir de la source de données. Lorsqu'un utilisateur clique sur un résultat de recherche, Cloud Search le redirige vers l'élément en utilisant l'URL fournie dans la requête d'indexation.

Définir vos objets

L'unité de données de base dans un schéma est l'objet, également appelé objet de schéma, qui est une structure logique de données. Dans une base de données de films, l'une des structures logiques de données est "film". Un autre objet peut être "person" (personne) pour représenter les acteurs et l'équipe du film.

Chaque objet d'un schéma possède une série de propriétés ou d'attributs décrivant l'objet, tels que le titre et la durée du film, ou le nom et la date de naissance d'une personne. Les propriétés d'un objet peuvent inclure des valeurs primitives ou d'autres objets.

La Figure 1 montre les objets "movie" (film) et "person" (personne), ainsi que les propriétés associées.

Dessin de connexions de schémas entre entités
Figure 1. Exemple de schéma montrant deux objets et un sous-objet.

Un schéma Cloud Search est essentiellement une liste d'instructions de définition d'objet définies dans le tag objectDefinitions. L'extrait de schéma suivant montre les instructions objectDefinitions pour les objets de schéma "movie" et "person".

{
  "objectDefinitions": [
    {
      "name": "movie",
      ...
    },
    {
      "name": "person",
      ...
    }
  ]
}

Lorsque vous définissez un objet de schéma, vous fournissez un name qui doit être unique parmi tous les objets du schéma. En règle générale, vous utiliserez une valeur name qui décrit l'objet, par exemple movie pour un objet de type film. Le service de schéma utilise le champ name comme identifiant de clé pour les objets indexables. Pour en savoir plus sur le champ name, consultez la définition de l'objet.

Définir les propriétés des objets

Comme spécifié dans la documentation de référence sur ObjectDefinition, le nom de l'objet est suivi d'un ensemble de options et d'une liste de propertyDefinitions. options peut également se composer de freshnessOptions et de displayOptions. La méthode freshnessOptions permet d'ajuster le classement des résultats de recherche en fonction de l'actualisation d'un élément. Les displayOptions permettent de définir si des étiquettes et des propriétés spécifiques sont affichées dans les résultats de recherche pour un objet.

La section propertyDefinitions vous permet de définir les propriétés d'un objet, telles que le titre et la date de sortie du film.

L'extrait suivant montre l'objet movie avec deux propriétés: movieTitle et releaseDate.

{
  "objectDefinitions": [
    {
      "name": "movie",
      "propertyDefinitions": [
        {
          "name": "movieTitle",
          "isReturnable": true,
          "isWildcardSearchable": true,
          "textPropertyOptions": {
            "retrievalImportance": { "importance": "HIGHEST" },
            "operatorOptions": {
              "operatorName": "title"
            }
          },
          "displayOptions": {
            "displayLabel": "Title"
          }
        },
        {
          "name": "releaseDate",
          "isReturnable": true,
          "isSortable": true,
          "datePropertyOptions": {
            "operatorOptions": {
              "operatorName": "released",
              "lessThanOperatorName": "releasedbefore",
              "greaterThanOperatorName": "releasedafter"
            }
          },
          "displayOptions": {
            "displayLabel": "Release date"
          }
      ...
      ]
    }
  ]
}

La propriété PropertyDefinition comprend les éléments suivants:

  • Une chaîne name.
  • Une liste d'options indépendantes du type, telles que isReturnable dans l'extrait précédent.
  • Un type et ses options spécifiques au type associées, telles que textPropertyOptions et retrievalImportance dans l'extrait précédent.
  • operatorOptions décrivant l'utilisation de la propriété en tant qu'opérateur de recherche.
  • Un ou plusieurs displayOptions, tels que displayLabel dans l'extrait précédent.

La propriété name d'une propriété doit être unique au sein de l'objet conteneur, mais le même nom peut être utilisé dans d'autres objets et sous-objets. Dans la figure 1, le titre et la date de sortie du film ont été définis deux fois : une fois dans l'objet movie et une autre fois dans le sous-objet filmography de l'objet person. Ce schéma réutilise le champ movieTitle afin qu'il soit compatible avec deux types de comportements de recherche:

  • Afficher les résultats de films lorsque les utilisateurs recherchent le titre d'un film.
  • Afficher les résultats de personnes lorsque les utilisateurs recherchent le titre d'un film dans lequel a joué un acteur.

De même, le schéma réutilise le champ releaseDate, car il a la même signification pour les deux champs movieTitle.

Lorsque vous développez votre propre schéma, réfléchissez à la manière dont votre dépôt peut comporter des champs associés contenant des données que vous souhaitez déclarer plusieurs fois dans votre schéma.

Ajouter des options indépendantes du type

L'élément PropertyDefinition répertorie les options de fonctionnalité de recherche générale communes à toutes les propriétés, quel que soit le type de données.

  • isReturnable : indique si la propriété identifie les données à renvoyer dans les résultats de recherche via l'API Query. Tous les exemples de propriétés de film peuvent être renvoyés. Les propriétés non renvoyées peuvent être utilisées pour rechercher ou classer des résultats sans être renvoyées à l'utilisateur.
  • isRepeatable : indique si plusieurs valeurs sont autorisées pour la propriété. Par exemple, un film ne peut avoir qu'une seule date de sortie, mais peut avoir plusieurs acteurs.
  • isSortable : indique que la propriété peut être utilisée pour le tri. Cela ne peut pas être vrai pour les propriétés reproductibles. Par exemple, les résultats peuvent être triés par date de sortie ou par audience.
  • isFacetable : indique que la propriété peut être utilisée pour générer des attributs. Un attribut permet d'affiner les résultats de la recherche. L'utilisateur voit les résultats initiaux, puis ajoute des critères, ou attributs, pour les affiner. Cette option ne peut pas avoir la valeur "true" pour les propriétés dont le type est "object", et isReturnable doit être défini sur "true" pour être définie. Enfin, cette option n'est compatible qu'avec les propriétés enum, booléennes et textuelles. Par exemple, dans notre exemple de schéma, nous pouvons rendre genre, actorName, userRating et mpaaRating facetable afin de pouvoir les utiliser pour affiner les résultats de recherche de manière interactive.
  • isWildcardSearchable indique que les utilisateurs peuvent effectuer une recherche avec caractères génériques pour cette propriété. Cette option n'est disponible que pour les propriétés textuelles. Le fonctionnement de la recherche avec caractères génériques sur le champ de texte dépend de la valeur définie dans le champ exactMatchWithOperator. Si exactMatchWithOperator est défini sur true, la valeur de texte est tokenisée sous la forme d'une valeur atomique et une recherche générique est effectuée sur cette valeur. Par exemple, si la valeur textuelle est science-fiction, une requête générique science-* lui correspond. Si exactMatchWithOperator est défini sur false, la valeur de texte est tokenisée et une recherche de caractères génériques est effectuée sur chaque jeton. Par exemple, si la valeur de texte est "science-fiction", le caractère générique sci* ou fi* correspond à l'élément, mais pas science-*.

Ces paramètres de fonctionnalité de recherche générale sont tous des valeurs booléennes. Ils ont tous une valeur false par défaut et doivent être définis sur true pour pouvoir être utilisés.

Le tableau suivant présente les paramètres booléens qui sont définis sur true pour toutes les propriétés de l'objet movie:

Propriété isReturnable isRepeatable isSortable isFacetable isWildcardSearchable
movieTitle true true
releaseDate true true
genre true true true
duration true
actorName true true true true
userRating true true
mpaaRating true true

genre et actorName ont tous les deux été isRepeatable définis sur true, car un film peut appartenir à plusieurs genres et comporte généralement plusieurs acteurs. Une propriété ne peut pas être triée si elle est reproductible ou contenue dans un sous-objet reproductible.

Définir le type

La section de référence PropertyDefinition répertorie plusieurs xxPropertyOptions, où xx est un type spécifique, tel que boolean. Pour définir le type de données de la propriété, vous devez définir l'objet de type de données approprié. La définition d'un objet de type de données pour une propriété établit le type de données de cette propriété. Par exemple, la définition de textPropertyOptions pour la propriété movieTitle indique que le titre du film est de type texte. L'extrait suivant montre la propriété movieTitle avec textPropertyOptions définissant le type de données.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    ...
  },
  ...
},

Une propriété ne peut être associée qu'à un seul type de données. Par exemple, dans notre schéma de film, releaseDate ne peut être qu'une date (par exemple, 2016-01-13) ou une chaîne (par exemple, January 13, 2016), mais pas les deux.

Voici les objets de type de données utilisés pour spécifier les types de données des propriétés de l'exemple de schéma de film:

Propriété Objet de type de données
movieTitle textPropertyOptions
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions
mpaaRating textPropertyOptions

Le type de données que vous choisissez pour la propriété dépend de vos cas d'utilisation attendus. Dans le scénario fictif de ce schéma de films, les utilisateurs doivent vouloir trier les résultats par ordre chronologique. releaseDate est donc un objet de date. Si, par exemple, il était prévu de comparer les versions de décembre entre les années et les versions de janvier, un format de chaîne peut être utile.

Configurer des options spécifiques au type

La section de référence PropertyDefinition renvoie aux options associées à chaque type. La plupart des options spécifiques au type sont facultatives, à l'exception de la liste de possibleValues dans enumPropertyOptions. De plus, l'option orderedRanking vous permet de classer les valeurs les unes par rapport aux autres. L'extrait suivant montre la propriété movieTitle avec textPropertyOptions définissant le type de données et avec l'option spécifique au type retrievalImportance.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    ...
  },
  ...
}

Voici les options supplémentaires spécifiques au type utilisées dans l'exemple de schéma:

Propriété Type Options spécifiques au type
movieTitle textPropertyOptions retrievalImportance
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions orderedRanking, maximumValue
mpaaRating textPropertyOptions

Définir les options d'opérateur

En plus des options spécifiques au type, chaque type est associé à un ensemble d'operatorOptions facultatifs. Ces options décrivent la manière dont la propriété est utilisée en tant qu'opérateur de recherche. L'extrait suivant montre la propriété movieTitle avec le paramètre textPropertyOptions pour le type de données et les options spécifiques au type retrievalImportance et operatorOptions.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
      "operatorName": "title"
    }
  },
  ...
}

Chaque operatorOptions possède un operatorName, tel que title pour un movieTitle. Le nom de l'opérateur est l'opérateur de recherche pour la propriété. L'opérateur de recherche est le paramètre que les utilisateurs sont censés employer pour affiner une recherche. Par exemple, pour rechercher des films en fonction de leur titre, l'utilisateur saisit title:movieName, où movieName est le nom d'un film.

Les noms d'opérateur ne doivent pas nécessairement être identiques au nom de la propriété. Utilisez plutôt des noms d'opérateurs qui reflètent les mots les plus couramment utilisés par les utilisateurs de votre organisation. Par exemple, si vos utilisateurs préfèrent le terme "nom" à "titre" pour le titre d'un film, le nom d'opérateur doit être défini sur "nom".

Vous pouvez utiliser le même nom d'opérateur pour plusieurs propriétés, à condition que toutes les propriétés soient associées au même type. Lorsque vous utilisez un nom d'opérateur partagé lors d'une requête, toutes les propriétés utilisant ce nom d'opérateur sont récupérées. Par exemple, supposons que l'objet "movie" ait les propriétés plotSummary et plotSynopsis, et que chacune de ces propriétés possède un operatorName de plot. Tant que ces deux propriétés sont textuelles (textPropertyOptions), une seule requête utilisant l'opérateur de recherche plot les récupère.

En plus de operatorName, les propriétés pouvant être triées peuvent contenir des champs lessThanOperatorName et greaterThanOperatorName dans operatorOptions. Les utilisateurs peuvent utiliser ces options pour créer des requêtes basées sur des comparaisons avec une valeur envoyée.

Enfin, textOperatorOptions dispose d'un champ exactMatchWithOperator dans operatorOptions. Si vous définissez exactMatchWithOperator sur true, la chaîne de requête doit correspondre à la valeur de propriété entière, et non uniquement à celle trouvée dans le texte. La valeur de texte est traitée comme une valeur atomique dans les recherches d'opérateurs et les correspondances d'attributs.

Par exemple, envisagez d'indexer des objets Livre ou Film avec des propriétés de genre. Les genres peuvent être "Science-Fiction", "Science" et "Fiction". Si exactMatchWithOperator est défini sur false ou omis, la recherche d'un genre ou la sélection de l'attribut "Science" ou "Fiction" renvoie également des résultats pour "Science-Fiction", car le texte est tokenisé et que les jetons "Science" et "Fiction" existent dans "Science-Fiction". Lorsque exactMatchWithOperator est défini sur true, le texte est traité comme un jeton unique. Par conséquent, ni "Science", ni "Fiction" ne correspondent à "Science-Fiction".

(Facultatif) Ajouter la section displayOptions

Une section displayOptions facultative est présente à la fin de toute section propertyDefinition. Cette section contient une chaîne displayLabel. displayLabel est une étiquette de texte recommandée pour la propriété. Si la propriété est configurée pour l'affichage à l'aide de ObjectDisplayOptions, cette étiquette est affichée devant la propriété. Si la propriété est configurée pour l'affichage et que displayLabel n'est pas défini, seule la valeur de la propriété est affichée.

L'extrait suivant montre la propriété movieTitle avec un élément displayLabel défini sur "Title" (Titre).

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
       "operatorName": "title"
    }
},
  "displayOptions": {
    "displayLabel": "Title"
  }
},

Voici les valeurs displayLabel pour toutes les propriétés de l'objet movie dans l'exemple de schéma:

Propriété displayLabel
movieTitle Title
releaseDate Release date
genre Genre
duration Run length
actorName Actor
userRating Audience score
mpaaRating MPAA rating

(Facultatif) Ajouter une section suggestionFilteringOperators[]

Une section suggestionFilteringOperators[] facultative est présente à la fin de toute section propertyDefinition. Cette section vous permet de définir une propriété utilisée pour filtrer les suggestions de saisie semi-automatique. Par exemple, vous pouvez définir l'opérateur genre pour filtrer les suggestions en fonction du genre de film préféré de l'utilisateur. Ensuite, lorsque l'utilisateur saisit sa requête de recherche, seuls les films correspondant à son genre préféré s'affichent dans les suggestions de saisie semi-automatique.

Enregistrer votre schéma

Pour obtenir des données structurées à partir de requêtes Cloud Search, vous devez enregistrer votre schéma auprès du service de schéma Cloud Search. L'enregistrement d'un schéma nécessite l'ID de source de données que vous avez obtenu lors de l'étape Initialiser une source de données.

À l'aide de l'ID de source de données, émettez une requête UpdateSchema pour enregistrer votre schéma.

Comme indiqué sur la page de référence UpdateSchema, exécutez la requête HTTP suivante pour enregistrer votre schéma:

PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema

Le corps de votre requête doit contenir les éléments suivants:

{
  "validateOnly": // true or false,
  "schema": {
    // ... Your complete schema object ...
  }
}

Utilisez l'option validateOnly pour tester la validité de votre schéma sans l'enregistrer.

Indexer vos données

Une fois le schéma enregistré, remplissez la source de données à l'aide d'appels d'index. L'indexation est normalement effectuée dans le connecteur de contenu.

Avec le schéma de film, une requête d'indexation de l'API REST pour un seul film ressemblerait à ceci:

{
  "name": "datasource/<data_source_id>/items/titanic",
  "acl": {
    "readers": [
      {
        "gsuitePrincipal": {
          "gsuiteDomain": true
        }
      }
    ]
  },
  "metadata": {
    "title": "Titanic",
    "sourceRepositoryUrl": "http://www.imdb.com/title/tt2234155/?ref_=nv_sr_1",
    "objectType": "movie"
  },
  "structuredData": {
    "object": {
      "properties": [
        {
          "name": "movieTitle",
          "textValues": {
            "values": [
              "Titanic"
            ]
          }
        },
        {
          "name": "releaseDate",
          "dateValues": {
            "values": [
              {
                "year": 1997,
                "month": 12,
                "day": 19
              }
            ]
          }
        },
        {
          "name": "actorName",
          "textValues": {
            "values": [
              "Leonardo DiCaprio",
              "Kate Winslet",
              "Billy Zane"
            ]
          }
        },
        {
          "name": "genre",
          "enumValues": {
            "values": [
              "Drama",
              "Action"
            ]
          }
        },
        {
          "name": "userRating",
          "integerValues": {
            "values": [
              8
            ]
          }
        },
        {
          "name": "mpaaRating",
          "textValues": {
            "values": [
              "PG-13"
            ]
          }
        },
        {
          "name": "duration",
          "textValues": {
            "values": [
              "3 h 14 min"
            ]
          }
        }
      ]
    }
  },
  "content": {
    "inlineContent": "A seventeen-year-old aristocrat falls in love with a kind but poor artist aboard the luxurious, ill-fated R.M.S. Titanic.",
    "contentFormat": "TEXT"
  },
  "version": "01",
  "itemType": "CONTENT_ITEM"
}

Notez que la valeur de movie dans le champ objectType correspond au nom de la définition d'objet dans le schéma. En faisant correspondre ces deux valeurs, Cloud Search sait quel objet de schéma utiliser lors de l'indexation.

Notez également comment l'indexation de la propriété de schéma releaseDate utilise les sous-propriétés year, month et day dont elle hérite, car elle est définie en tant que type de données date via datePropertyOptions. Cependant, comme year, month et day ne sont pas définis dans le schéma, vous ne pouvez pas interroger l'une de ces propriétés (par exemple, year) individuellement.

Notez également comment la propriété reproductible actorName est indexée à l'aide d'une liste de valeurs.

Identifier les problèmes d'indexation potentiels

Les deux problèmes les plus courants liés aux schémas et à l'indexation sont les suivants:

  • Votre requête d'indexation contient un objet de schéma ou un nom de propriété qui n'a pas été enregistré auprès du service de schéma. Par conséquent, la propriété ou l'objet sont ignorés.

  • Votre requête d'indexation possède une propriété avec une valeur de type différente de celle enregistrée dans le schéma. Ce problème provoque l'affichage d'une erreur par Cloud Search au moment de l'indexation.

Tester votre schéma avec plusieurs types de requêtes

Avant d'enregistrer votre schéma pour un dépôt de données de production volumineux, envisagez de le tester avec un dépôt de données de test plus petit. Les tests avec un dépôt de test plus petit vous permettent d'ajuster rapidement votre schéma et de supprimer les données indexées, sans impact sur un index plus important ou existant. Pour un dépôt de données de test, créez une LCA qui n'autorise qu'un utilisateur de test afin que les autres utilisateurs n'aient pas accès à ces données dans les résultats de recherche.

Pour créer une interface de recherche en vue de valider les requêtes de recherche, reportez-vous à la section Interface de recherche

Cette section contient plusieurs exemples de requêtes que vous pouvez utiliser pour tester un schéma de film.

Tester avec une requête générique

Une requête générique renvoie tous les éléments de la source de données contenant une chaîne spécifique. À l'aide d'une interface de recherche, vous pouvez exécuter une requête générique sur une source de données de films en saisissant le mot "titanic" et en appuyant sur Retour. Tous les films contenant le mot "titanic" doivent être renvoyés dans les résultats de recherche.

Effectuer un test avec un opérateur

L'ajout d'un opérateur à la requête limite les résultats aux éléments correspondant à cette valeur d'opérateur. Par exemple, vous pouvez utiliser l'opérateur actor pour rechercher tous les films dans lesquels joue un acteur particulier. À l'aide d'une interface de recherche, vous pouvez effectuer cette requête avec opérateur en saisissant simplement une paire opérateur = valeur, telle que "actor:Zane", puis en appuyant sur Retour. Tous les films avec Zane comme acteur doivent apparaître dans les résultats de recherche.

Ajuster votre schéma

Une fois votre schéma et vos données utilisés, continuez à surveiller ce qui fonctionne et ce qui ne fonctionne pas pour vos utilisateurs. Nous vous conseillons d'ajuster votre schéma dans les situations suivantes:

  • Indexer un champ qui n'avait pas encore été indexé Par exemple, vos utilisateurs peuvent rechercher plusieurs fois des films en se basant sur le nom du réalisateur. Vous pouvez donc ajuster votre schéma de façon à accepter le nom du réalisateur en tant qu'opérateur.
  • Modification du nom des opérateurs de recherche en fonction des commentaires des utilisateurs. Les noms d'opérateurs sont conçus pour être conviviaux. Si vos utilisateurs se souviennent régulièrement du mauvais nom d'opérateur, vous pouvez envisager de le modifier.

Réindexation après une modification du schéma

La modification de l'une des valeurs suivantes dans votre schéma ne nécessite pas la réindexation de vos données. Il vous suffit d'envoyer une nouvelle requête UpdateSchema pour que votre index continue à fonctionner:

  • Noms d'opérateurs.
  • Nombres entiers minimum et maximum.
  • Classement ordonné par nombres entiers et énumérations.
  • Options d'actualisation
  • Options d'affichage

Pour les modifications suivantes, les données précédemment indexées continueront de fonctionner selon le schéma précédemment enregistré. Toutefois, vous devez réindexer les entrées existantes pour voir les modifications basées sur le schéma mis à jour, le cas échéant:

  • Ajouter ou supprimer une propriété ou un objet
  • Remplacement de isReturnable, isFacetable ou isSortable de false par true.

Vous devez définir isFacetable ou isSortable sur true uniquement si vous avez un cas d'utilisation et un besoin clairement définis.

Enfin, lorsque vous mettez à jour votre schéma en marquant une propriété isSuggestable, vous devez réindexer vos données, ce qui retarde l'utilisation de la saisie semi-automatique pour cette propriété.

Modifications de propriété non autorisées

Certaines modifications de schéma ne sont pas autorisées, même si vous réindexez vos données, car elles perturbent l'index ou produisent des résultats de recherche insatisfaisants ou incohérents. Cela inclut les modifications suivantes:

  • Type de données "Propriété".
  • Nom de propriété
  • exactMatchWithOperator.
  • retrievalImportance.

Toutefois, il existe un moyen de contourner cette limitation.

Effectuer une modification de schéma complexe

Pour éviter les modifications susceptibles de générer de mauvais résultats de recherche ou un index de recherche non fonctionnel, Cloud Search empêche certains types de modifications dans les requêtes UpdateSchema après l'indexation du dépôt. Par exemple, le type de données ou le nom d'une propriété ne peuvent plus être modifiés une fois qu'ils ont été définis. Ces modifications ne peuvent pas être obtenues via une simple requête UpdateSchema, même si vous réindexez vos données.

Dans les situations où vous devez apporter une modification interdite à votre schéma, vous pouvez souvent effectuer une série de modifications autorisées afin d'obtenir le même effet. En général, cela implique de migrer d'abord les propriétés indexées d'une ancienne définition d'objet vers une nouvelle, puis d'envoyer une requête d'indexation qui n'utilise que la propriété la plus récente.

Pour modifier le type de données ou le nom d'une propriété, procédez comme suit:

  1. Ajoutez une propriété à la définition d'objet dans votre schéma. Utilisez un nom différent de celui de la propriété que vous souhaitez modifier.
  2. Envoyez la requête UpdateSchema avec la nouvelle définition. N'oubliez pas d'envoyer le schéma complet, y compris la nouvelle et l'ancienne propriété, dans la requête.
  3. Remplissez l'index à partir du dépôt de données. Pour remplir l'index, envoyez toutes les requêtes d'indexation avec la nouvelle propriété, mais pas l'ancienne, car cela entraînerait un double comptage des correspondances de requête.

    1. Lors du remplissage de l'index, recherchez la nouvelle propriété et utilisez l'ancienne propriété par défaut pour éviter tout comportement incohérent.
    2. Une fois le remplissage terminé, exécutez des requêtes de test pour vérifier.
  4. Supprimez l'ancienne propriété. Émettez une autre requête UpdateSchema sans l'ancien nom de propriété et arrêtez d'utiliser l'ancien nom de propriété dans les futures requêtes d'indexation.

  5. Migrez toute utilisation de l'ancienne propriété vers la nouvelle. Par exemple, si vous modifiez le nom de la propriété de "créateur" en "auteur", vous devez mettre à jour votre code de requête pour qu'il utilise "auteur" là où il a déjà référencé le créateur.

Cloud Search conserve une trace de toute propriété ou objet supprimé pendant 30 jours afin d'éviter toute réutilisation susceptible de provoquer des résultats d'indexation inattendus. Au cours de ces 30 jours, vous devez migrer toutes les utilisations de l'objet ou de la propriété supprimés, y compris en les omettant des requêtes d'index futures. Ainsi, si vous décidez par la suite de rétablir cette propriété ou cet objet, vous pourrez le faire en préservant l'exactitude de votre index.

Connaître les limites de taille

Cloud Search impose des limites à la taille des objets de données structurées et des schémas. Ces limites sont les suivantes:

  • Le nombre maximal d'objets de niveau supérieur est de 10.
  • La profondeur maximale d'une hiérarchie de données structurées est de 10 niveaux.
  • Le nombre total de champs dans un objet est limité à 1 000, ce qui inclut le nombre de champs primitifs et la somme des champs dans chaque objet imbriqué.

Étapes suivantes

Voici quelques étapes que vous pouvez également suivre :

  1. Créez une interface de recherche pour tester votre schéma.

  2. Ajustez votre schéma pour améliorer la qualité de la recherche.

  3. Structurer un schéma pour une interprétation optimale des requêtes

  4. Découvrez comment exploiter le schéma _dictionaryEntry pour définir des synonymes des termes couramment utilisés dans votre entreprise. Pour utiliser le schéma _dictionaryEntry, consultez Définir des synonymes.

  5. Créez un connecteur.