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

La fonctionnalité d'interprétation des requêtes de Cloud Search interprète automatiquement les opérateurs et les filtres de 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 des 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 à un utilisateur d'effectuer des recherches avec très peu de mots clés, tout en obtenant des résultats précis.

Les résultats réels présentés à l'utilisateur dépendent du niveau de confiance dans l'interprétation de la requête. La confiance dépend de plusieurs facteurs, y compris l'emplacement des chaînes de requête dans les documents indexés. L'apparition d'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, entraîne un niveau de confiance plus élevé. La même chaîne ("Tom Hanks") qui apparaît dans un paragraphe, et non dans un champ de schéma, peut entraîner un niveau de confiance moins élevé. Si le niveau de confiance est élevé, seuls les résultats de l'interprétation de la requête sont présentés à l'utilisateur. Si le niveau de confiance est plus faible, les résultats de l'interprétation de la requête sont mélangés aux résultats de recherche par mot clé normaux.

Exemple d'interprétation d'une requête

Supposons que vous disposiez d'une source de données, telle qu'une base de données, contenant des informations sur des films. La figure 1 présente un exemple de requête de recherche et l'interprétation qui en résulte.

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

Pour cet exemple de requête, l'interprétation de requête effectue les opérations suivantes:

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

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

L'interprétation de la requête résultante 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 action 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 pour permettre l'interprétation des requêtes

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

Activer l'interprétation des noms à afficher

L'interprétation des requêtes de Cloud Search utilise objectDefinitions et propertyDefinitions dans un schéma 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 à afficher intuitifs en utilisant displayLabel pour les noms de propriété, objectDisplayLabel pour les noms d'objet et operatorName pour les opérateurs.

Le schéma suivant illustre des noms à afficher intuitifs pour un objet "movie" :

{
  "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 de l'objet "movie" comporte un objectDisplayLabel "Film".

  • La propriété genreDefinition comporte un operatorName "genre" et une displayLabel "Category".

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

  • "films d'action", "films de genre action" ou "films d'action de genre" sont interprétés comme genre:action object:movies.
  • "films avec genre d'action ou de thriller" 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 dates, de chiffres et de tri

Vous devez définir les champs lessThanOperatorName et greaterThanOperatorName, spécifiés dans IntegerOperatorOptions, pour toutes les propriétés numériques et de date. Ces paramètres activent l'interprétation automatique des dates et des chiffres. En outre, pour activer les interprétations de tri, définissez l'option isSortable pour les propriétés numériques et de date. 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é de date releaseDate fait référence à la date de sortie d'un film dans les cinémas. releasedbefore et releasedafter sont définis pour cette propriété.

Ces paramètres permettent à Cloud Search d'effectuer les interprétations de requête suivantes:

  • En supposant que l'année soit 2019, les "films sortis cette année" sont interprétés comme objecttype: movies releasedafter:2019-1-1 releasedbefore:2019-12-31.
  • En supposant qu'il s'agit de la troisième semaine en mars, "films sortis la semaine dernière" est interprété comme objecttype: movies releasedafter:2019-3-10 releasedbefore:2019-3-16.
  • "films avec une durée d'exécution inférieure à 90" est interprété comme objjecttype: movies runtimelessthan:90.
  • En partant du principe que l'année est 2019, "films sortis cette année et d'une durée supérieure à 120" est interprété comme releasedafter:2019-1-1 releasedbefore:2019-12-31 objecttype:movies runtimegreaterthan:120.
  • L'option "trier les films par date de sortie" filtrerait sur "objecttype: films", et les résultats présentés seraient triés par date de sortie, l'ordre de tri par défaut étant croissant.

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" listerait tous les films mis à jour dans l'index la semaine précédente.
    • "films antérieurs à janvier 2019" listerait 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" liste tous les documents de films d'action dont le type MIME est application/mp4, application/mpeg4, application/x-shockwave-flash, video/ et application/vnd.google-apps.video.

Limites concernant l'interprétation des requêtes

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

  • L'interprétation des requêtes ne fonctionne que pour les LCA de source de données suivantes :
    • Tous les documents sont publics (accès à tous les utilisateurs du domaine).
    • 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), sans lecteur supplémentaire défini.
  • Si plusieurs opérateurs de schéma ont la même valeur, l'interprétation de cette valeur dans un intent d'opérateur pour une requête dépend du facteur de confiance global renvoyé par le système d'interprétation des requêtes. Par exemple, supposons que les propriétés priority et severity utilisent les mêmes noms d'opérateur que ceux définis dans le schéma. Supposons que les deux opérateurs peuvent avoir les valeurs 0, 1, 2 ou 3. Dans cet exemple, "0" dans une requête 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 des requêtes de Cloud Search réduit la casse des valeurs de champ lors de l'interprétation de la requête, à l'exception des opérateurs de texte 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 un opérateur et des termes en texte libre ne sont pas interprétées. Par exemple, la requête "p0 priority cases territory:s0" (cas de priorité p0) ne sera pas acceptée, car "p0 priority cases" (cas de priorité p0) est un terme à texte libre, tandis que "CVE: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 des résultats ordinaires (non interprétés, classés en fonction de la pertinence). Elle n'effectue pas un remplacement complet des résultats.