Un schéma Google Cloud Search est une structure JSON qui définit les objets, les propriétés et les options à utiliser pour indexer et interroger 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 présente les principes de base de la création de schémas. Pour savoir comment ajuster votre schéma afin d'améliorer l'expérience de recherche, consultez la page Améliorer la qualité de la recherche.
Créer un schéma
Vous trouverez ci-dessous la liste des étapes permettant de créer votre schéma Cloud Search:
- Identifier le comportement attendu des utilisateurs
- Initialiser une source de données
- Créer un schéma
- Exemple de schéma complet
- Enregistrer votre schéma
- Indexer vos données
- Tester votre schéma
- Ajuster votre schéma
Identifier le comportement attendu des utilisateurs
Anticiper les types de requêtes de vos utilisateurs vous aide à orienter votre stratégie de création de schéma.
Par exemple, lorsque vous envoyez des requêtes à une base de données de films, vous pouvez anticiper la requête "Montre-moi tous les films avec Robert Redford". Par conséquent, votre schéma doit prendre en charge les résultats des requêtes basées sur "tous les films avec un acteur spécifique".
Pour définir votre schéma afin de refléter les modèles de comportement de vos utilisateurs, envisagez d'effectuer les tâches suivantes:
- Évaluer un ensemble varié de requêtes souhaitées provenant de différents utilisateurs.
- Identifier les objets pouvant être utilisés dans les requêtes Les objets sont des ensembles logiques de données connexes, tels qu'un film dans une base de données de films.
- 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 de film 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 possèdent leurs propres propriétés, telles que leur nom ou leur rôle.
- Identifier 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 pourrait être "Les Aventuriers de l'Arche perdue".
- Déterminez les options de tri et de classement souhaitées par vos utilisateurs. Par exemple, lorsqu'ils interrogent des films, les utilisateurs peuvent vouloir effectuer un tri chronologique et les classer par note de l'audience, sans avoir à les trier par ordre alphabétique.
- (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, par exemple le rôle ou le service de l'utilisateur, afin que des suggestions de saisie semi-automatique puissent être fournies en fonction du contexte. Par exemple, pour les personnes qui recherchent une base de données de films, les utilisateurs peuvent ne s'intéresser qu'à un certain genre de films. Les utilisateurs peuvent définir le genre qu'ils souhaitent que leurs recherches renvoient, éventuellement dans leur profil utilisateur. Ensuite, lorsqu'un utilisateur commence à saisir une requête de films, seuls les films de son genre préféré, tels que "films d'action", sont suggérés dans les suggestions de saisie semi-automatique.
- 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 les 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 par la source de données. Lorsqu'un utilisateur clique sur un résultat de recherche, Cloud Search le redirige vers l'élément concerné à l'aide de l'URL fournie dans la requête d'indexation.
Définir vos objets
L'unité de données fondamentale 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, une structure logique des données est « film ». Un autre objet peut être une "personne" pour représenter les acteurs et l'équipe impliqués dans le film.
Chaque objet d'un schéma possède une série de propriétés ou d'attributs qui le décrivent, tels que le titre et la durée d'un 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 illustre les objets "movie" (film) et "person" (personne), ainsi que les propriétés associées.

Un schéma Cloud Search est essentiellement une liste d'instructions de définition d'objet définies dans la balise 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
pour cet objet. Celui-ci doit être unique parmi tous les autres objets du schéma. En règle générale, vous utiliserez une valeur name
décrivant l'objet, telle que movie
pour un objet de 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 page Définition des objets.
Définir les propriétés des objets
Comme indiqué 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
.
Le options
peut être constitué de freshnessOptions
et de displayOptions
.
Les freshnessOptions
permettent 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 libellés et des propriétés spécifiques doivent être affichés 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 du film et sa date de sortie.
L'extrait de code 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 PropertyDefinition comprend les éléments suivants:
- une chaîne
name
. - Liste d'options indépendantes du type, telles que
isReturnable
dans l'extrait précédent. - Un type et les options spécifiques au type qui lui sont associées, telles que
textPropertyOptions
etretrievalImportance
dans l'extrait précédent. - Une valeur
operatorOptions
décrivant comment la propriété est utilisée en tant qu'opérateur de recherche. - Un ou plusieurs
displayOptions
, par exempledisplayLabel
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
pour 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 un acteur a joué.
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 les données que vous souhaitez déclarer plusieurs fois dans votre schéma.
Ajouter des options indépendantes du type
La section 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 ne pouvant pas être renvoyées peuvent être utilisées pour la recherche ou le classement 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 n'a qu'une seule date de sortie, mais peut avoir plusieurs acteurs.isSortable
: indique que la propriété peut être utilisée pour le tri. Cette valeur ne peut pas être définie sur "true" pour les propriétés reproductibles. Par exemple, les résultats de films peuvent être triés par date de sortie ou par note d'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 recherche. L'utilisateur voit les résultats initiaux, puis ajoute des critères ou des attributs pour affiner davantage ces résultats. Cette option ne peut pas avoir la valeur "true" pour les propriétés dont le type est "objet", etisReturnable
doit être défini sur "true" pour définir cette option. Enfin, cette option n'est compatible qu'avec les propriétés d'énumération, booléennes et de texte. Par exemple, dans notre exemple de schéma, nous pouvons autoriser l'ajout d'attributs àgenre
,actorName
,userRating
etmpaaRating
pour permettre l'affinement interactif des résultats de recherche.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 de texte. Le fonctionnement de la recherche avec caractères génériques dans le champ de texte dépend de la valeur définie dans le champ exactMatchWithOperator. SiexactMatchWithOperator
est défini surtrue
, la valeur de texte est tokenisée sous la forme d'une valeur atomique. Une recherche avec caractères génériques est alors effectuée. Par exemple, si la valeur textuelle estscience-fiction
, elle est mise en correspondance avec une requête génériquescience-*
. SiexactMatchWithOperator
est défini surfalse
, la valeur de texte est tokenisée et une recherche avec caractère générique est effectuée sur chaque jeton. Par exemple, si la valeur de texte est "science-fiction", les requêtes génériquessci*
oufi*
correspondent à l'élément, mais passcience-*
.
Ces paramètres généraux de fonctionnalité de recherche sont tous des valeurs booléennes. Ils ont tous la valeur par défaut false
et doivent être définis sur true
pour pouvoir être utilisés.
Le tableau suivant présente les paramètres booléens 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 |
Pour genre
et actorName
, isRepeatable
est défini sur true
, car un film peut appartenir à plusieurs genres et compte 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 dans 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 imaginaire de ce schéma de film, les utilisateurs sont censés vouloir trier les résultats de manière chronologique. releaseDate
est donc un objet de date.
Si, par exemple, vous prévoyez de comparer les versions de décembre d'une année à l'autre avec celles de janvier, un format de chaîne peut s'avérer utile.
Configurer les 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 de code 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 de operatorOptions
facultatifs. Ces options décrivent comment la propriété est utilisée en tant qu'opérateur de recherche. L'extrait suivant montre la propriété movieTitle
avec textPropertyOptions
définissant le type de données et avec 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
, par exemple title
pour movieTitle
. Le nom de l'opérateur est l'opérateur de recherche associé à la propriété. Il s'agit du paramètre que les utilisateurs doivent utiliser 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érateur qui reflètent les mots les plus courants utilisés par les utilisateurs de votre organisation. Par exemple, si vos utilisateurs préfèrent le terme "nom" au lieu de "titre" pour le titre d'un film, le nom de l'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é dans 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 ait une operatorName
de plot
. Tant que ces deux propriétés sont au format texte (textPropertyOptions
), une seule requête utilisant l'opérateur de recherche plot
les récupère.
En plus de operatorName
, les propriétés triables peuvent comporter des champs lessThanOperatorName
et greaterThanOperatorName
dans operatorOptions
.
Les utilisateurs peuvent se servir de ces options pour créer des requêtes basées sur des comparaisons avec une valeur soumise.
Enfin, textOperatorOptions
comporte un champ exactMatchWithOperator
dans operatorOptions
. Si vous définissez exactMatchWithOperator
sur true
, la chaîne de requête doit correspondre à la valeur entière de la propriété, et pas seulement à celle qui se trouve dans le texte.
La valeur textuelle est traitée comme une valeur atomique dans les recherches d'opérateur et les correspondances d'attributs.
Par exemple, envisagez d'indexer des objets "Book" ou "Movie" avec des propriétés de genre.
Les genres peuvent être "Science-Fiction", "Science" et "Fiction". Lorsque exactMatchWithOperator
est défini sur false
ou omis, rechercher un genre ou sélectionner l'attribut "Science" ou "Fiction" renvoie également les résultats pour "Science-Fiction", car le texte est tokenisé et les jetons "Science" et "Fiction" existent dans "Science-Fiction".
Lorsque exactMatchWithOperator
présente la valeur 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
Il existe une section displayOptions
facultative à la fin de toute section propertyDefinition
. Cette section contient une chaîne displayLabel
.
displayLabel
est un libellé de texte recommandé et convivial pour la propriété. Si la propriété est configurée pour l'affichage à l'aide de ObjectDisplayOptions, ce libellé est affiché 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 de code suivant montre la propriété movieTitle
avec un displayLabel
défini sur "Title".
{
"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[]
"
Il existe une section suggestionFilteringOperators[]
facultative à la fin de toute section propertyDefinition
. Dans cette section, vous pouvez définir une propriété permettant de 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 que des données structurées soient renvoyé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 la source de données, envoyez une requête UpdateSchema pour enregistrer votre schéma.
Comme indiqué sur la page de référence UpdateSchema, envoyez 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 réellement.
Indexer vos données
Une fois le schéma enregistré, remplissez la source de données à l'aide d'appels d'index. L'indexation s'effectue normalement dans le connecteur de contenu.
En utilisant le schéma du film, une requête d'indexation de l'API REST pour un seul film se présente comme suit:
{
"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 que 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
.
Toutefois, 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 que la propriété reproductible actorName
est indexée à l'aide d'une liste de valeurs.
Identification des 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 nom d'objet ou de propriété de schéma qui n'a pas été enregistré auprès du service de schémas. En raison de ce problème, la propriété ou l'objet sont ignorés.
Votre requête d'indexation comporte une propriété dont la valeur de type est différente de celle enregistrée dans le schéma. En raison de ce problème, Cloud Search renvoie une erreur 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 d'effectuer des tests 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 affecter un index plus volumineux ni un index de production existant. Pour un dépôt de données de test, créez une LCA qui n'autorise qu'un utilisateur test, afin que les autres utilisateurs ne voient pas 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, consultez 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 Entrée. Tous les films comportant 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 avec un acteur spécifique. À 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 Entrée. Tous les films avec Zane comme acteur doivent être renvoyés dans les résultats de la recherche.
Ajuster votre schéma
Une fois que votre schéma et vos données sont utilisés, continuez à surveiller ce qui fonctionne et ce qui ne fonctionne pas pour vos utilisateurs. Vous devriez envisager d'ajuster votre schéma dans les situations suivantes:
- Indexation d'un champ qui n'avait pas encore été indexé. Par exemple, vos utilisateurs peuvent rechercher des films de manière répétée en fonction du nom du réalisateur. Vous pouvez donc ajuster votre schéma pour utiliser 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érateur sont conçus pour être conviviaux. Si vos utilisateurs se souviennent toujours d'un nom d'opérateur erroné, vous pouvez envisager de le modifier.
Réindexation après une modification du schéma
La modification 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 de fonctionner:
- Noms d'opérateurs.
- Valeurs entières minimales et maximales.
- Classement ordonné par entier et par énumération.
- 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 si les modifications suivantes ont été apportées:
- Ajouter ou supprimer une nouvelle propriété ou un nouvel objet
- Remplacement de
isReturnable
,isFacetable
ouisSortable
defalse
partrue
.
Vous ne devez définir isFacetable
ou isSortable
sur true
que si le cas d'utilisation et le besoin s'y prêtent clairement.
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 endommageraient l'index, ou produiraient des résultats de recherche de mauvaise qualité ou incohérents. Celles-ci incluent les modifications apportées aux éléments suivants:
- Type de données de propriété
- Nom de propriété
- Paramètre
exactMatchWithOperator
. - Paramètre
retrievalImportance
.
Il existe toutefois un moyen de contourner cette limitation.
Effectuer une modification de schéma complexe
Pour éviter les modifications qui généraient des résultats de recherche de mauvaise qualité ou un index de recherche défectueux, Cloud Search empêche certains types de modifications dans les requêtes UpdateSchema une fois le dépôt indexé. Par exemple, le type de données ou le nom d'une propriété ne peuvent pas être modifiés une fois qu'ils ont été définis. Ces modifications ne peuvent pas être réalisées via une simple requête UpdateSchema, même si vous réindexez vos données.
Dans les cas où vous devez apporter une modification non autorisée à votre schéma, vous pouvez souvent apporter une série de modifications autorisées qui produisent le même effet. En général, cela implique de migrer 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:
- 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.
- 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.
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 avec l'ancienne, car cela entraînerait un double comptage des correspondances de requête.
- Lors du remplissage de l'indexation, recherchez la nouvelle propriété et utilisez par défaut l'ancienne pour éviter tout comportement incohérent.
- Une fois le remplissage terminé, exécutez des requêtes de test pour vérifier.
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 requêtes d'indexation ultérieures.
Migrez toute utilisation de l'ancienne propriété vers la nouvelle. Par exemple, si vous remplacez le nom de la propriété "créateur" par "auteur", vous devez mettre à jour le code de votre requête pour utiliser l'auteur là où il faisait référence au créateur précédemment.
Cloud Search conserve un enregistrement de toute propriété ou tout objet supprimé pendant 30 jours afin d'éviter toute réutilisation qui entraînerait des résultats d'indexation inattendus. Au cours de ces 30 jours, vous devez cesser d'utiliser l'objet ou la propriété supprimés, y compris en les omettant dans les futures requêtes d'index. Ainsi, si vous décidez ultérieurement de rétablir cette propriété ou cet objet, vous pourrez le faire de manière à maintenir 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 premier niveau 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 nombres de champs dans chaque objet imbriqué.
Étapes suivantes
Voici quelques étapes que vous pouvez également suivre :
Créez une interface de recherche pour tester votre schéma.
Ajustez votre schéma pour améliorer la qualité de la recherche.
Structurez un schéma pour optimiser l'interprétation des requêtes.
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 la section Définir des synonymes.Créer un connecteur