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

La fonctionnalité Interprétation des requêtes de Cloud Search interprète automatiquement les opérateurs et les filtres d'une requête utilisateur, et les convertit 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 à 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 de la 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 de manière cohérente dans un champ de schéma appelé actors entraîne une confiance plus élevée. La même chaîne ("Tom Hanks") apparaissant dans un paragraphe plutôt que dans un champ de schéma peut entraîner une confiance plus faible. En cas de forte confiance, seuls les résultats de l'interprétation de la requête sont affichés à l'utilisateur. En cas de faible degré de confiance, les résultats de l'interprétation de la requête sont combinés avec les résultats d'une recherche par mot clé normale.

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 montre 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

Dans cet exemple de requête, l'interprétation de la 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 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, en association avec le schéma, pour déterminer où se trouve 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 est sûre 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 qu'ils aient à effectuer d'opération supplémentaire. Toutefois, pour une interprétation optimale des requêtes, vous devez structurer votre schéma en suivant les instructions de ce document.

Structurer votre schéma pour 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 du nom à 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 affiner les résultats. Pour maximiser l'intérêt de ces éléments de schéma, vous devez créer des noms à afficher intuitifs à l'aide de displayLabel pour les noms de propriétés, objectDisplayLabel pour les noms d'objets et operatorName pour les opérateurs.

Le schéma suivant montre des noms à afficher intuitifs pour un objet de 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 de l'objet film comporte un objectDisplayLabel "Film".

  • La propriété genre propertyDefinition 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" ou "films d'action" sont interprétés comme genre:action object:movies.
  • "films avec le genre action ou thriller" 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 date, numérique et de tri

Vous devez définir les propriétés lessThanOperatorName et greaterThanOperatorName, spécifiées dans IntegerOperatorOptions, pour toutes les propriétés de date et numériques. Ces paramètres permettent d'interpréter automatiquement les dates et les 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. 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 en salle. 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, "films sortis cette année" est interprété 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" est interprété comme objjecttype: movies runtimelessthan:90.
  • En supposant que l'année soit 2019, "films sortis cette année et durée supérieure à 120" est interprété comme releasedafter:2019-1-1 releasedbefore:2019-12-31 objecttype:movies runtimegreaterthan:120.
  • "Trier les films par date de sortie" filtrerait sur "objecttype: movies" 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 réservée aux opérateurs

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. Remplissez le champ updateTime dans ItemMetadata pour utiliser les opérateurs before et after. Ces paramètres permettent à Cloud Search d'interpréter les requêtes suivantes :

    • "films de la semaine dernière" listerait tous les films qui ont été mis à jour dans l'index la semaine précédente.
    • "films avant janv 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" listerait 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 d'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 ces sources de données :
    • Tous les documents sont publics pour le domaine (tous les membres du domaine peuvent y accéder).
    • Tous les documents sont publics au niveau de la source de données (toutes les personnes ayant accès à la liste de contrôle d'accès à la source de données).
    • La majorité des documents de la source de données ont le même ACL (tous les documents héritent de l'ACL 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 en intention 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érateur 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 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 met en minuscules les 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" 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 mélange toujours les résultats interprétés avec les résultats ordinaires (non interprétés, classés par pertinence). Il n'effectue pas de remplacement complet des résultats sur la page.