Extension des requêtes

L'extension des requêtes consiste à assouplir progressivement les contraintes des requêtes afin d'inclure davantage de résultats lorsque aucun ou trop peu de résultats sont trouvés initialement. Cela entraîne un ajustement de la taille des résultats par requête.

Lorsqu'aucun document pertinent n'est trouvé pour une requête, l'extension des requêtes renvoie des documents moins pertinents pour s'assurer qu'elle ne renvoie pas zéro résultat de recherche.

Contrairement à la recherche par attribut dynamique ou aux commandes de diffusion de contenu, par exemple, l'extension des requêtes ne peut pas être configurée directement dans la Google Cloud console. Vous devez plutôt configurer l'extension des requêtes de manière programmatique pour chaque requête de recherche. Pour savoir comment configurer l'extension des requêtes dans l'API, lisez la suite.

Utiliser l'extension des requêtes

Ce tutoriel explique comment activer la fonctionnalité d'extension des requêtes. Lorsqu'un acheteur utilise une expression de recherche ambiguë ou composée de plusieurs mots, il peut obtenir une réponse vide. Une fois l'extension des requêtes activée, la requête est analysée et la liste étendue de produits basée sur la requête de recherche analysée est renvoyée.


Pour obtenir des instructions détaillées sur cette tâche directement dans l' éditeur Cloud Shell, cliquez sur Visite guidée :

Visite guidée


Présentation de l'extension des requêtes

L'extension des requêtes est une fonctionnalité puissante conçue pour améliorer le rappel de recherche et éviter les scénarios sans résultat, en particulier pour les requêtes utilisateur complexes ou de longue traîne.

Au lieu de ne renvoyer aucun résultat lorsqu'aucune correspondance exacte n'est trouvée dans le catalogue de produits, l'extension des requêtes identifie et affiche des produits associés ou alternatifs. Cela améliore l'expérience utilisateur et peut augmenter les taux de conversion.

Voici les principaux cas d'utilisation de l'extension des requêtes :

  • Requêtes de longue traîne : pour les recherches très spécifiques, telles que lait bio à teneur élevée en protéines et faible en matières grasses pour diabétiques,le catalogue peut ne pas avoir de correspondance parfaite. L'extension des requêtes peut renvoyer des produits qui correspondent à des parties de l'intention, tels que des produits balisés avec des attributs ou des valeurs d'attributs de lait adapté aux diabétiques ou de lait à teneur élevée en protéines.
  • Produits alternatifs : si vos utilisateurs recherchent une marque ou un produit qui ne figure pas dans le catalogue, par exemple café Starbucks 100 ml, l'extension des requêtes peut suggérer d'autres marques de café disponibles à l'achat, ce qui évite une recherche sans issue.

Les sections suivantes décrivent la fonctionnalité, le mécanisme de déclenchement et les nuances de configuration de la fonctionnalité d'extension des requêtes dans AI Commerce Search, en mettant l'accent sur le rôle essentiel du filtre canonique.

Mécanisme de déclenchement de l'extension des requêtes

La décision d'activer l'extension des requêtes ou une requête de recherche donnée est automatisée et basée sur une règle de filtre canonique rapidement configurable.

  • Condition de déclenchement : l'extension des requêtes n'est déclenchée que si la recherche initiale avec la requête de filtre canonique génère moins de trois résultats de produits.
  • Seuil : ce seuil de trois peut être modifié par défaut. Il fonctionne bien pour la plupart des cas d'utilisation d'e-commerce, en veillant à ce que l'extension des requêtes ne soit activée que si et quand l'ensemble de résultats initial est réellement clairsemé.

Configurer l'extension des requêtes dans l'API

L'extension des requêtes est configurée de manière programmatique par requête à l'aide de l'API comme suit :

  • Configuration de l'API : vous contrôlez l'extension des requêtes en incluant l'objet queryExpansionSpec dans votre SearchRequest.

  • Paramètres : dans queryExpansionSpec, définissez le champ condition sur AUTO pour activer la fonctionnalité ou sur DISABLED pour la désactiver (valeur par défaut si elle n'est pas spécifiée).

  • Épinglage : vous pouvez éventuellement définir pinUnexpandedResults sur true dans la requête pour vous assurer que les correspondances exactes de la requête d'origine apparaissent en haut des résultats de recherche, suivies des résultats étendus. Pour en savoir plus, consultez la page Épinglage.

Configurer des filtres canoniques

Pour que l'extension des requêtes se déclenche efficacement, vous devez configurer correctement le canonical_filter dans votre requête de recherche.

Pour implémenter correctement l'extension des requêtes, il est essentiel de comprendre les deux principaux paramètres de filtre d'une requête de recherche : les filtres de premier niveau et les filtres canoniques.

  • Filtre de premier niveau (filter) : il s'agit du filtre principal appliqué aux résultats de recherche avant qu'ils ne soient renvoyés à l'utilisateur. Il s'agit d'une combinaison de deux couches potentielles :

    • Filtre métier/de base : règles prédéfinies appliquées à toutes les recherches, souvent sans entrée utilisateur directe, telles que inStock=TRUE, category="groceries", storeId="XYZ".

    • Filtres par attribut sélectionnés par l'utilisateur : filtres appliqués de manière dynamique par l'utilisateur lorsqu'il interagit avec l'interface de recherche, par exemple en sélectionnant des filtres par attribut pour brand="Adidas", size="L".

  • Filtres canoniques (canonical_filter) : il s'agit d'un filtre spécialisé utilisé exclusivement par le module de décision d'extension des requêtes. Son seul rôle est de définir la vue du catalogue par rapport à laquelle la condition de déclenchement de l'extension des requêtes (moins de cinq résultats) est évaluée.

Fonctions principales du filtre canonique

Le filtre canonique est conçu pour faire la distinction entre un résultat de recherche naturellement médiocre et un ensemble de résultats intentionnellement limité par l'utilisateur. Il peut être large pour exclure la logique métier afin de tenir compte des filtres appliqués par l'utilisateur, ou limité pour déclencher l'extension des requêtes si nécessaire, en fonction du scénario utilisateur.

Scénario 1

  • Parcours utilisateur : l'utilisateur recherche t-shirt et obtient des milliers de résultats. Il existe un business_filter par défaut qui, par exemple, ne filtre que les produits en stock et les produits qui correspondent à un attribut personnalisé au niveau du magasin. L'utilisateur applique ensuite des filtres par attribut pour brand="Adidas" and size="L", ce qui réduit le nombre de résultats à deux.
  • Si canonical_filter était défini pour inclure les mêmes conditions filter (par exemple, AVAILABILITY: IN_STOCK AND color: "Red"), le système de décision d'extension des requêtes ne verrait que deux résultats et déclencherait incorrectement l'extension des requêtes, inondant l'utilisateur de produits associés, mais non pertinents, tels que des t-shirts Nike, ce qui enfreindrait le filtrage explicite de l'utilisateur.
  • Le paramètre correct est canonical_filter = business filter. La décision d'extension des requêtes doit être prise en fonction de la requête initiale, à l'exclusion des attributs sélectionnés par l'utilisateur. En conservant un canonical_filter large, le système identifie correctement qu'il existe de nombreux produits correspondants dans le catalogue, ce qui lui permet de respecter les filtres stricts de l'utilisateur sans forcer une extension.

Scénario 2

  • Parcours utilisateur : l'utilisateur recherche t-shirt Adidas avec imprimés graphiques noirs et n'obtient qu'un ou deux résultats, voire aucun. Il existe un business_filter par défaut qui, par exemple, ne filtre que les produits en stock et les produits qui correspondent à un attribut personnalisé au niveau du magasin.
  • Si canonical_filter n'est pas défini ou n'est pas configuré correctement, la recherche avec le filtre canonique peut trouver des produits qui correspondent à la requête, mais qui sont non disponibles ou proviennent d'un autre magasin, ce qui signifie une valeur différente de l'attribut personnalisé au niveau du magasin. Dans ce cas, l'extension des requêtes n'est pas déclenchée.
  • Le paramètre correct est canonical_filter = business filter. Avec ce paramètre, la décision d'extension des requêtes trouve moins de trois produits pour la requête longue donnée, puis déclenche une extension des requêtes et apporte des produits associés à la requête d'origine, c'est-à-dire des produits en stock qui correspondent à l'attribut au niveau du magasin. Cela étend les résultats de recherche pour inclure des t-shirts noirs avec imprimés graphiques d'une autre marque, des t-shirts avec imprimés graphiques d'autres couleurs ou d'autres t-shirts de la marque interrogée. Incluez des contraintes métier pour ce cas d'utilisation de canonical_filter.

Bonnes pratiques concernant l'extension des requêtes

Le filtre canonique doit presque toujours être identique à votre filtre métier ou de base. Cela garantit que le module d'extension des requêtes évalue le potentiel de la requête par rapport à la même vue de catalogue large que celle que vos utilisateurs voient initialement avant de commencer à appliquer des attributs.

Flux de processus de recherche et d'extension des requêtes de bout en bout

Lorsqu'une requête de recherche est effectuée, plusieurs processus parallèles se produisent :

  • Requête reçue : l'API reçoit la requête de recherche contenant la requête, le filter principal et le canonical_filter.

  • Recherche de décision d'extension des requêtes : en parallèle, le module de décision d'extension des requêtes effectue sa propre recherche interne à l'aide de la requête combinée au filtre canonique.

  • Vérification du nombre de résultats : le module vérifie le nombre de produits renvoyés par sa recherche interne.

    • Si le nombre de résultats est supérieur ou égal à cinq : l'extension des requêtes n'est pas déclenchée. Les résultats de recherche standards passent à l'étape de filtrage finale.
    • Si le nombre de résultats est inférieur à cinq : l'extension des requêtes est déclenchée. Le modèle assouplit systématiquement la requête pour trouver des produits associés. Par exemple, le modèle peut trouver des téléphones Pixel 4, des écouteurs Pixel ou même des téléphones Samsung pour téléphone Pixel 5.
  1. Filtrage final : l'ensemble de produits (l'ensemble d'origine ou l'ensemble étendu de l'extension des requêtes) est transmis à l'étape finale. Dans ce cas, le filtre de premier niveau, contenant les règles métier et tous les attributs sélectionnés par l'utilisateur, est strictement appliqué.
  • Réponse envoyée : la liste finale filtrée des produits est renvoyée dans la réponse de l'API.

Cas d'utilisation avancé de l'activation sélective de l'extension des requêtes

Vous pouvez configurer stratégiquement les filtres pour activer ou désactiver l'extension des requêtes pour des parties spécifiques de votre catalogue.

Prenons l'exemple d'un grand catalogue contenant des produits d'épicerie, des appareils électroniques et des vêtements de mode. Dans un tel scénario, vous devez tenir compte des aspects suivants.

Objectif

Activez l'extension des requêtes pour les requêtes d'épicerie difficiles à trouver ou rares, mais n'affichez aucun résultat pour les articles électroniques ou de mode. Le besoin métier consiste à n'activer l'extension des requêtes que de manière sélective sur la partie épicerie.

Configuration

Pour ce scénario d'utilisation, l'extension sélective des requêtes peut être configurée comme suit :

  • canonical_filter: définissez-le sur large. Il doit inclure toutes les catégories (épicerie, électronique et mode), ainsi que toutes les règles de base telles que la disponibilité des stocks, en définissant le filtre canonique avec category="groceries" OR category="electronics" OR category="fashion") AND inStock=TRUE.
  • filter : définissez-le sur limité, en fonction du contexte de l'utilisateur. Pour un utilisateur dans la section épicerie, le filtre serait category="groceries" AND inStock=TRUE.

Fonctionnement

Dans ce scénario, l'extension sélective des requêtes fonctionne comme suit :

  • L'utilisateur recherche "iPhone 20" : le module d'extension des requêtes utilise le canonical_filter large, trouve les modèles d'iPhone existants (moins de cinq résultats) et décide de ne pas déclencher l'extension des requêtes. Les résultats de recherche standards (iPhones existants) sont ensuite transmis au filtre principal, qui les bloque, car category="electronics" ne correspond pas à category="groceries". L'utilisateur voit correctement zéro résultat.
  • L'utilisateur recherche *lait pour diabétiques à teneur élevée en protéines* : le module d'extension des requêtes utilise le canonical_filter large et trouve moins de cinq résultats, ce qui déclenche l'extension des requêtes en trouvant des produits laitiers associés. Ces produits sont transmis au filtre principal. Comme ils correspondent à category="groceries", ces produits sont renvoyés à l'utilisateur.

En manipulant la portée du canonical_filter (la vue de prise de décision) et du filter principal (la vue de sortie finale), vous contrôlez précisément l'expérience de recherche.

Exemple d'ensemble de données

Cette page utilise l'ensemble de données suivant comme exemple. Développez-le pour afficher les champs de l'exemple d'ensemble de données de description de produit.

Exemple d'ensemble de données de produits

ID title chaînes catégories price_info.price
"nest_mini_2nd_gen" "Nest Mini (2e génération)" ["Google", "Nest"] ["Nest > enceintes et écrans"] 49.00
"nest_audio" "Nest Audio" ["Google", "Nest"] ["Nest > enceintes et écrans"] 99.99
"nest_hub_max" "Nest Hub Max" ["Google", "Nest"] ["Nest > enceintes et écrans"] 229.00
"nest_hub" "Nest Hub" ["Google", "Nest"] ["Nest > enceintes et écrans"] 88.99
"google_home_max" "Google Home Max" ["Google", "Nest"] ["Nest > enceintes et écrans"] 299.00
"google_home_mini" "Google Home Mini" ["Google", "Nest"] ["Nest > enceintes et écrans"] 49.00
"google_pixel_5" "Google Pixel 5" ["Google", "Pixel"] ["Pixel > téléphones"] 699.00
"google_pixel_4a_with_5g" "Google Pixel 4a compatible 5G" ["Google", "Pixel"] ["Pixel > téléphones"] 499.00
"google_pixel_4a" "Téléphones Google Pixel 4a" ["Google", "Pixel"] ["Pixel > téléphones"] 349.00
"google_pixel_stand" "Google Pixel Stand" ["Google", "Pixel"] ["Pixel > accessoires sélectionnés"] 79.00
"google_pixel_buds" "Google Pixel Buds" ["Google", "Pixel"] ["Pixel > accessoires sélectionnés"] 179.00
"google_pixel_5_case" "Coque pour le Google Pixel 5" ["Google", "Pixel"] ["Pixel > accessoires sélectionnés"] 40.00
"google_pixel_4a_5g_case" "Coque pour le Google Pixel 4a (5G)" ["Google", "Pixel"] ["Pixel > accessoires sélectionnés"] 40.00
"google_pixel_4a_case" "Coque pour le Google Pixel 4a" ["Google", "Pixel"] ["Pixel > accessoires sélectionnés"] 40.00

L'extension des requêtes élargit les requêtes de recherche pour obtenir plus de résultats

L'extension des requêtes augmente le rappel pour les termes de requête avec peu de résultats, en particulier les requêtes de longue traîne. La requête élargie génère un plus grand nombre de résultats de recherche.

Cette fonctionnalité de recherche est basée sur une spécification qui détermine les conditions d'extension des requêtes. Elle inclut une option pinUnexpandedResults qui est désactivée par défaut. Lorsque cette option est définie sur true, elle affiche les produits non étendus en haut des résultats de recherche. Le haut est suivi des résultats étendus.

Java

import com.google.cloud.retail.v2.SearchRequest;
import com.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec;
import com.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.Condition;
import com.google.cloud.retail.v2.SearchResponse;
import com.google.cloud.retail.v2.SearchServiceClient;

public static void searchProductsWithQueryExpansion(String query, int pageSize,
    Condition condition) throws IOException, InterruptedException {
  QueryExpansionSpec queryExpansionSpec = QueryExpansionSpec.newBuilder()
      .setCondition(condition)
      .build();

  SearchRequest searchRequest = SearchRequest.newBuilder()
      .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
      .setBranch(DEFAULT_BRANCH_NAME)
      .setVisitorId(VISITOR_ID)
      .setQuery(query)
      .setPageSize(pageSize)
      .setQueryExpansionSpec(queryExpansionSpec)
      .build();

  try (SearchServiceClient searchClient = SearchServiceClient.create()) {
    SearchResponse response = searchClient.search(searchRequest).getPage().getResponse();
    System.out.println("Search response: " + searchResponse);
  }
}

Par exemple, si vous recherchez Google Pixel 5 sans extension des requêtes, le résultat est limité aux ID google_pixel_5. Toutefois, avec l'extension des requêtes , vous pouvez également obtenir les ID google_pixel_4a_with_5g, google_pixel_4a et google_pixel_5_case dans l'exemple d'ensemble de données de description de produit.