Extension des requêtes

L'expansion de requête consiste à assouplir progressivement les contraintes de la requête pour inclure plus de résultats lorsqu'aucun ou trop peu de résultats ne sont trouvés au départ. Cela entraîne un ajustement de la taille des résultats par requête.

Lorsqu'il n'y a aucun document pertinent pour une requête, l'expansion de requête renvoie des documents moins pertinents pour s'assurer qu'elle ne renvoie aucun résultat de recherche.

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

Utiliser l'extension des requêtes

Ce tutoriel explique comment activer la fonctionnalité d'expansion des requêtes. Lorsqu'un client utilise une expression de recherche ambiguë ou composée de plusieurs mots, il peut obtenir une réponse vide. Une fois l'expansion de requête activée, la requête est analysée et la liste élargie des 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 de longue traîne ou complexes.

Au lieu de ne renvoyer aucun résultat lorsqu'aucune correspondance exacte n'est trouvée dans le catalogue de produits, l'expansion de requête 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'expansion de requête :

  • Requêtes longue traîne : pour les recherches très spécifiques, comme lait bio riche en protéines et faible en matières grasses pour diabétiques,il est possible que le catalogue ne contienne pas de résultat parfaitement adapté. L'expansion de requête peut renvoyer des produits correspondant à des parties de l'intention, comme des produits tagués avec des attributs ou des valeurs d'attributs de lait adapté aux diabétiques ou de lait riche 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'expansion de requête peut suggérer d'autres marques de café disponibles à l'achat, ce qui évite une recherche infructueuse.

Les sections suivantes décrivent la fonctionnalité d'expansion des requêtes dans Vertex AI Search pour le commerce, son mécanisme de déclenchement et les nuances de configuration. Elles mettent plus particulièrement 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'expansion des requêtes ou une requête de recherche donnée est automatisée et basée sur une règle de filtrage canonique rapidement configurable.

  • Condition de déclenchement : l'expansion de la requête 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 3 par défaut peut être modifié. Elle fonctionne bien pour la plupart des cas d'utilisation d'e-commerce, en veillant à ce que l'expansion des requêtes ne soit activée que si et quand l'ensemble de résultats initial est réellement clairsemé.

Configurer l'expansion de requête dans l'API

L'expansion de requête est configurée par programmation pour chaque requête à l'aide de l'API, comme suit :

  • Configuration de l'API : vous contrôlez l'expansion 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 aucune valeur n'est spécifiée).

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

Configurer des filtres canoniques

Pour que l'expansion de requête se déclenche efficacement, vous devez configurer correctement canonical_filter dans votre demande de recherche.

Pour implémenter correctement l'expansion de requête, 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 de base/d'entreprise : règles prédéfinies appliquées à toutes les recherches, souvent sans saisie directe de l'utilisateur, comme inStock=TRUE, category="groceries", storeId="XYZ".

    • Filtres par facettes 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 facettes 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'expansion 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'expansion de requête (moins de cinq résultats) est évaluée.

Fonctions de filtrage canoniques de base

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 restreint par l'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 ceux qui correspondent à un attribut personnalisé au niveau du magasin. L'utilisateur applique ensuite des filtres à facettes pour brand="Adidas" et size="L", ce qui réduit le nombre de résultats à deux.
  • Si canonical_filter est identique à filter : le système de décision d'expansion de requête ne verrait que deux résultats et déclencherait à tort l'expansion de requête, en affichant des produits associés, mais non pertinents, tels que des t-shirts Nike, ce qui ne respecte pas le filtrage explicite de l'utilisateur.
  • Le paramètre correct est canonical_filter = business filter : la décision d'expansion de la requête doit être prise en fonction de la requête initiale, à l'exclusion des facettes sélectionnées par l'utilisateur.

Scénario 2

  • Parcours utilisateur : l'utilisateur recherche t-shirt adidas avec motifs 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 ceux 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 en rupture de stock ou proviennent d'un autre magasin (c'est-à-dire une valeur différente de l'attribut personnalisé au niveau du magasin). Dans ce cas, l'expansion de la requête n'est pas déclenchée.
  • Le paramètre correct est canonical_filter = business filter. La décision d'expansion de la requête trouverait moins de trois produits pour la longue requête donnée, puis déclencherait une expansion de la requête et apporterait des produits associés à la requête d'origine, c'est-à-dire des produits en stock correspondant à l'attribut au niveau du magasin. Les résultats de recherche seraient donc élargis pour inclure des t-shirts noirs à motifs d'une autre marque, des t-shirts à motifs d'autres couleurs ou d'autres t-shirts de la marque mentionnée dans la requête.

Bonnes pratiques pour l'expansion des requêtes

Le filtre canonique doit presque toujours être identique à votre filtre d'entreprise ou de base. Cela permet au module d'expansion de requête d'évaluer le potentiel de la requête par rapport à la même vue générale du catalogue que vos utilisateurs voient initialement avant de commencer à appliquer des facettes.

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

Lorsqu'une demande de recherche est effectuée, plusieurs processus parallèles se déroulent :

  • 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'expansion de requête : en parallèle, le module de décision d'expansion de requête 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'expansion de la requête n'est pas déclenchée. Les résultats de recherche standards passent à l'étape de filtrage finale.
    • Si moins de cinq résultats sont trouvés : l'expansion de la requête 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 5, des téléphones Pixel 4, des écouteurs Pixel ou même des téléphones Samsung.
  1. Filtrage final : l'ensemble de produits (l'ensemble d'origine ou l'ensemble étendu à partir de l'expansion de requête) est transmis à l'étape finale. Dans ce cas, le filtre de premier niveau, qui contient les règles métier et les facettes sélectionnées par l'utilisateur, est appliqué de manière stricte.
  • Réponse envoyée : la liste filtrée finale des produits est renvoyée dans la réponse de l'API.

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

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

Prenons l'exemple d'un grand catalogue contenant des produits alimentaires, des appareils électroniques et des vêtements. Dans un tel scénario, vous devez garder à l'esprit les 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 produits électroniques ou de mode. L'objectif est d'activer l'expansion des requêtes de manière sélective uniquement pour la partie "épicerie".

Configuration

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

  • canonical_filter : définissez-le sur broad (large). Il doit inclure toutes les catégories : produits alimentaires, électronique et mode, ainsi que toutes les règles de base comme 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 étroit, 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'expansion sélective des requêtes fonctionne comme suit :

  • L'utilisateur recherche "iPhone 20" : le module d'expansion de requête 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'expansion de requête. 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 riche en protéines" : le module d'expansion de requête utilise la requête large canonical_filter et trouve moins de cinq résultats. Il déclenche donc l'expansion de requête en recherchant 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 le champ d'application de canonical_filter (vue de prise de décision) et de filter principal (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'ensemble de données d'exemple 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

Extension des requêtes

L'expansion de requête augmente le rappel pour les termes de requête avec peu de résultats, en particulier les requêtes de longue traîne.

Cette fonctionnalité de recherche est basée sur une spécification qui détermine les conditions d'expansion des requêtes. Il inclut une option pinUnexpandedResults qui est désactivée par défaut. Lorsque ce paramètre est défini sur true, les produits non étendus s'affichent en haut des résultats de recherche. Ensuite, les résultats développés s'affichent.

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 expansion de la requête, le résultat est limité aux ID google_pixel_5. Toutefois, avec l'expansion des requêtes, vous pouvez également obtenir les ID google_pixel_4a_with_5g, google_pixel_4a et google_pixel_5_case dans l'ensemble de données d'exemple de description de produit.