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

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

La fonctionnalité d'interprétation des requêtes de Cloud Search interprète automatiquement les opérateurs et les filtres dans la requête d'un utilisateur, puis convertit ces éléments en une requête structurée basée sur des opérateurs. L'interprétation des requêtes utilise les opérateurs définis dans le schéma, ainsi que les documents indexés, pour déduire la signification de la requête de l'utilisateur. Cette fonctionnalité permet à l'utilisateur d'effectuer des recherches avec le moins de mots clés possible, tout en obtenant des résultats précis.

Les résultats réels présentés à l'utilisateur dépendent du niveau de confiance de l'interprétation de la requête. La confiance est basée sur plusieurs facteurs, y compris l'emplacement des chaînes de requête dans les documents indexés. Une chaîne, telle que le nom de l'acteur "Tom Hanks", qui apparaît systématiquement dans un champ de schéma appelé actors, permet d'obtenir un niveau de confiance plus élevé. La même chaîne ("Tom Hanks") qui apparaît dans un paragraphe, plutôt que le champ de schéma, peut réduire le niveau de confiance. Dans le cas d'un niveau de confiance élevé, seuls les résultats de l'interprétation des requêtes sont présentés à l'utilisateur. Dans le cas d'une confiance moindre, les résultats de l'interprétation des requêtes sont mélangés avec des résultats de recherche de mot clé normaux.

Exemple d'interprétation de requête

Supposons que vous ayez une source de données, telle qu'une base de données, contenant des informations sur les films. La figure 1 présente un exemple de requête de recherche et son interprétation.

Présentation de l'interprétation des requêtes
Figure 1. Interprétation de requête

À partir de cet exemple de requête, l'interprétation des requêtes effectue les opérations suivantes:

  • Analyse le schéma et détermine que les objets de niveau supérieur dans la source de données sont classés comme objecttype:movies. L'interprétation de la requête sait désormais que les "films" dans la requête sont un type d'objet.

  • Analyse les documents de la source de données conjointement avec le schéma pour déterminer l'emplacement de la chaîne "action". Si la chaîne se trouve principalement dans un champ de source de données "genre" spécifique, l'interprétation de la requête a la certitude que "action" est une valeur de propriété pour la propriété "genre" telle que définie dans le schéma. Si la chaîne apparaît principalement dans des paragraphes de contenu, le niveau de confiance de l'interprétation de la requête diminue.

L'interprétation de la requête obtenue est la suivante:

  actor:“tom hanks” genre:action objecttype:movies

L'interprétation des requêtes est automatiquement activée pour tous les clients Cloud Search, sans aucun travail supplémentaire. Toutefois, pour une interprétation optimale des requêtes, vous devez structurer votre schéma conformément aux instructions de ce document.

Structurer votre schéma de façon à permettre l'interprétation des requêtes

Vous devez structurer votre schéma pour pouvoir bénéficier de l'interprétation des requêtes.

Activer les interprétations de noms à afficher

L'interprétation des requêtes de Cloud Search s'appuie sur les schémas objectDefinitions et propertyDefinitions pour interpréter la requête d'un utilisateur et ajuster les résultats. Pour optimiser les avantages de ces éléments de schéma, vous devez créer des noms d'affichage intuitifs en utilisant displayLabel pour les noms de propriétés, objectDisplayLabel pour les noms d'objets et operatorName pour les opérateurs.

Le schéma suivant présente des noms à afficher intuitifs pour un objet de type film:

{
  "objectDefinitions": [
    {
      "name": "movie",
        "options": {
          "displayOptions": {
          "objectDisplayLabel": "Films"
        }
        ...
      },
      "propertyDefinitions": [
        {
          "name": "genre",
          "isReturnable": true,
          "isRepeatable": true,
          "isFacetable": true,
          "textPropertyOptions": {
          "retrievalImportance": { "importance": "HIGHEST" },
          "operatorOptions": {
            "operatorName": "genre"
          }
        },
        "displayOptions": {
          "displayLabel": "Category"
        }
      },
      ...
      ]
    }
  ]
}

Dans l'exemple précédent:

  • La définition d'objet "film" comporte un objectDisplayLabel "film".

  • Le genre propertyDefinition comporte un operatorNamegenre et une displayLabelcatégorie.

Ces noms à afficher permettent à Cloud Search d'interpréter les requêtes suivantes:

  • "films d'action", "films d'action de genre" ou "films d'action de genre" sont interprétés comme genre:action object:movies.
  • "films avec des films d'action ou des thrillers" est interprété comme objecttype:movies genre:(action OR thriller).
  • "film d'action" ou "films d'action" sont interprétés comme genre:action objecttype:movies.
  • "films de la catégorie comédie" est interprété comme genre:comedy objecttype:movies.

Activer les interprétations de date, numériques et de tri

Vous devez définir les valeurs lessThanOperatorName et greaterThanOperatorName, spécifiées dans IntegerOperatorOptions, pour toutes les propriétés numériques et de date. Ces paramètres activent la date et les interprétations numériques automatiques. En outre, pour activer les interprétations de tri, définissez l'option isSortable pour les propriétés de date et de valeur numérique. Le schéma suivant montre comment activer ces options.

{
  "objectDefinitions": [
    {
      "options": {
        "displayOptions": {
          "objectDisplayLabel": "Films"
        }
      },
      "propertyDefinitions": [
        {
          "name": "runtime",
          "isReturnable": true,
          "isSortable": true,
          "integerPropertyOptions": {
            "orderedRanking": "DESCENDING",
            "minimumValue": {
              "value": 10
            },
            "maximumValue": {
              "value": 500
            },
            "operatorOptions": {
              "operatorName": "runtime",
              "lessThanOperatorName": "runtimelessthan",
              "greaterThanOperatorName": "runtimegreaterthan"
            }
          },
          "displayOptions": {
            "displayLabel": "Length"
          }
        },
        {
          "name": "releasedate",
          "isReturnable": true,
          "isSortable": true,
          "datePropertyOptions": {
            "operatorOptions": {
              "operatorName": "releasedate",
              "lessThanOperatorName": "releasedbefore",
              "greaterThanOperatorName": "releasedafter"
            }
          }
        }
      ]
    }
  ]
}

Dans l'exemple précédent:

  • La propriété numérique runtime fait référence à la durée d'un film. runtimelessthan et runtimegreaterthan sont définis pour cette propriété.
  • La propriété date releaseDate fait référence à la sortie d'un film au cinéma. Les propriétés releasedbefore et releasedafter sont définies pour cette propriété.

Ces paramètres permettent à Cloud Search d'interpréter les requêtes suivantes:

  • Supposons que l'année soit en 2019, que les "films sortis cette année" soient interprétés comme objecttype: movies releasedafter:2019-1-1 releasedbefore:2019-12-31.
  • En supposant qu'il s'agisse de la troisième semaine de mars, les "films sortis la semaine dernière" sont interprétés comme objecttype: movies releasedafter:2019-3-10 releasedbefore:2019-3-16.
  • Les films dont la durée d'exécution est inférieure à 90 sont interprétés comme objjecttype: movies runtimelessthan:90.
  • Pour l'année 2019, "films sortis cette année et plus de 120 caractères" sont interprétés comme releasedafter:2019-1-1 releasedbefore:2019-12-31 objecttype:movies runtimegreaterthan:120.
  • L'option "sort films par date de sortie" est filtrée par "objecttype: movies" et les résultats présentés sont triés par date de sortie, dans l'ordre croissant de tri par défaut.

Activer l'interprétation des opérateurs réservés

Vous pouvez également utiliser les opérateurs intégrés réservés type, before, after et objecttype pour améliorer l'interprétation des requêtes. Lors de l'indexation d'un document, procédez comme suit:

  1. Renseignez le champ updateTime dans ItemMetadata pour utiliser les opérateurs before et after. Ces paramètres permettent à Cloud Search d'effectuer les interprétations de requête suivantes:

    • "films de la semaine dernière" répertorie tous les films mis à jour dans l'index la semaine précédente.
    • "films avant janv. 2019" permet d'afficher tous les films indexés avant janvier 2019.
  2. Renseignez le champ mimeType dans ItemMetadata pour utiliser la détection automatique du type. Une requête "vidéos d'action" répertorie tous les documents de films d'action de type MIME, application/mp4, application/mpeg4, application/x-shockwave-flash, video/ et application/vnd.google-apps.video.

Limites d'interprétation des requêtes

La fonctionnalité d'interprétation des requêtes présente les limitations suivantes.

  • L'interprétation des requêtes ne fonctionne que pour les LCA de source de données suivantes :
    • Tous les documents sont publics (tous les utilisateurs du domaine peuvent y accéder).
    • Tous les documents sont des sources de données publiques (toutes les personnes ayant accès à la LCA de la source de données).
    • La majorité des documents de la source de données ont la même LCA (tous les documents héritent de la LCA du même élément de conteneur) et aucun lecteur supplémentaire n'est défini.
  • Si plusieurs opérateurs de schéma ont la même valeur, l'interprétation de cette valeur à un intent d'opérateur pour une requête dépend du facteur de confiance global renvoyé par le système d'interprétation de requête. Par exemple, supposons que vous ayez les propriétés priority et severity avec les mêmes noms d'opérateurs définis dans le schéma. Imaginons que les deux opérateurs puissent avoir les valeurs 0, 1, 2 ou 3. Dans cet exemple, "0" peut faire référence à la valeur de l'opérateur pour priority ou severity. Ces valeurs sont ambiguës et le niveau de confiance est plus faible.
  • Par défaut, l'interprétation de la requête dans Cloud Search réduit la casse des valeurs de champs lors de l'interprétation de la requête, à l'exception des opérateurs textuels définis avec les options exactMatchWithOperator.
  • L'opérateur source n'est pas compatible avec les requêtes.
  • Les requêtes qui combinent des termes basés sur des opérateurs et des termes de texte libre ne sont pas interprétées. Par exemple, la requête "p0 priority cases severity:s0" ne sera pas acceptée, car "p0 priorité cases" est un terme textuel libre, tandis que "severity:s0" est un terme basé sur un opérateur.
  • La stratégie d'interprétation des requêtes combine toujours les résultats interprétés avec les résultats ordinaires (non interprétés, classés par pertinence). Elle ne remplace pas les résultats de la page entière.