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 et convertit ces éléments en une requête structurée basée sur les opérateurs. L'interprétation de requête 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 à un utilisateur d'effectuer une recherche avec un minimum 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 de 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. Une chaîne, comme le nom de l'acteur "Tom Hanks", qui apparaît de manière cohérente dans un champ de schéma appelé actors a un niveau de confiance plus élevé. La même chaîne ("Tom Hanks") qui apparaît dans un paragraphe, plutôt qu'un champ de schéma, peut réduire le niveau de confiance. En cas de confiance élevée, 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 de 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 comme objecttype:movies. L'interprétation de requête sait maintenant que "movies" dans la requête est un type d'objet.

  • Analyse les documents dans 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 a l'assurance 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 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 qui en résulte 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 de votre part. Toutefois, pour une interprétation des requêtes optimale, 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 de façon à pouvoir bénéficier de l'interprétation des requêtes.

Activer l'interprétation des noms à afficher

L'interprétation de la requête de Cloud Search utilise les éléments objectDefinitions et propertyDefinitions dans un schéma pour interpréter la requête d'un utilisateur et ajuster les résultats. Pour maximiser 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'objets 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é PropertyDefinition de genre 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 d'action dans un genre" ou "films d'action dans un genre cinématographique" sont interprétés comme genre:action object:movies.
  • "films d'action ou de suspense" est interprété comme objecttype:movies genre:(action OR thriller).
  • "film d'action" ou "films d'action" est interprété 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 nombres et de tri

Vous devez définir les valeurs lessThanOperatorName et greaterThanOperatorName, spécifiées dans IntegerOperatorOptions, pour toutes les propriétés de date et numériques. Ces paramètres permettent l'interprétation automatique des dates et des nombres. De plus, pour activer les interprétations de tri, définissez l'option isSortable pour les propriétés de date et numériques. 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. Les champs runtimelessthan et runtimegreaterthan sont définis pour cette propriété.
  • La propriété de date releaseDate fait référence à la sortie d'un film en salle. Les paramètres releasedbefore et releasedafter sont définis pour cette propriété.

Ces paramètres permettent à Cloud Search d'interpréter les requêtes 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 que la semaine soit la troisième semaine de mars, "films sortis la semaine dernière" est interprété comme objecttype: movies releasedafter:2019-3-10 releasedbefore:2019-3-16.
  • "films d'une durée inférieure à 90 secondes" est interprété comme objjecttype: movies runtimelessthan:90.
  • En supposant que l'année soit 2019, les "films sortis cette année et dont la durée est supérieure à 120" sont interprétés comme releasedafter:2019-1-1 releasedbefore:2019-12-31 objecttype:movies runtimegreaterthan:120.
  • "trier les films par date de sortie" filtre par "objecttype: films" et les résultats présentés sont triés par date de sortie, avec l'ordre de tri par défaut croissant.

Activer l'interprétation d'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. Lorsque vous indexez 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êtes suivantes:

    • "films de la semaine dernière" liste tous les films mis à jour dans l'index la semaine précédente.
    • "films avant janvier 2019" affiche 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 avec un type MIME 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 de requêtes présente les limites suivantes.

  • L'interprétation des requêtes ne fonctionne que pour les LCA de sources de données suivantes :
    • Tous les documents sont publics au sein du domaine (accès par tous les utilisateurs du domaine).
    • Tous les documents sont publics de source de données (toute personne 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 à 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 vous ayez les propriétés priority et severity avec les mêmes noms d'opérateurs définis dans le schéma. Supposons que les deux opérateurs puissent 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 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 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 des opérateurs et des termes en texte libre ne sont pas interprétées. Par exemple, la requête "p0 priority cases severity:s0" ne serait pas acceptée, car "p0 priority cases" (cas de priorité p0) est un terme en texte 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 des résultats ordinaires (non interprétés, classés en fonction de la pertinence). Il n'effectue pas de remplacement complet des résultats.