Obtenir des résultats de recherche

Cette page décrit les requêtes de base avec la recherche, y compris les recherches de requêtes textuelles, les recherches de navigation, la pagination, l'optimisation et les résultats personnalisés.

Identifiants de session utilisateur uniques

Le champ de chaîne visitor_id obligatoire permet d'identifier de manière unique un utilisateur sur un seul appareil. Il sert d'identifiant de session persistant qui permet à AI Commerce Search de suivre le comportement d'un utilisateur spécifique tout au long de son parcours d'achat.

AI Commerce Search utilise l'historique associé à un visitor_id spécifique pour entraîner des modèles et diffuser des résultats de recherche personnalisés. Le système génère des résultats de manière dynamique en fonction du visitor_id spécifique fourni dans la requête. Par exemple, si un visiteur consulte fréquemment des robes vertes, le modèle utilise visitor_id pour les reconnaître ultérieurement et prioriser les articles similaires dans ses résultats de recherche. Pour cette raison, l'ID visiteur doit être formaté de la même manière pour l'ingestion (suivi) des événements utilisateur et pour les requêtes de recherche ou de recommandation (diffusion).

La pertinence est différente de la correspondance. La mise en correspondance consiste à trouver des produits candidats dans l'index qui correspondent à la requête de recherche de l'utilisateur. La pertinence, en revanche, est un degré de correspondance. Il s'agit de classer ces produits de manière à répondre au mieux à l'intention et aux besoins de l'utilisateur. AI Commerce Search utilise des techniques pour améliorer la correspondance et la pertinence, afin d'offrir aux utilisateurs une meilleure expérience de recherche globale qui répond aux besoins des marchands.

Par défaut, la recherche est effectuée par pertinence. Toutefois, certains produits non pertinents peuvent apparaître en bas des recherches par défaut ou dans les requêtes explicites de découverte de produits. Cela ne devient visible que lorsque vous définissez orderBy, car cela réduit la taille des résultats de recherche en général. La taille du rappel diminue, car les produits moins pertinents, qui étaient auparavant renvoyés en bas de la recherche par défaut, sont filtrés dans une certaine mesure. Lisez la section suivante pour découvrir comment personnaliser la recherche.

AI Commerce Search privilégie par défaut la pertinence dans la recherche. Toutefois, la recherche est réglée pour afficher également des éléments peu pertinents plus haut dans les résultats de recherche afin de fournir aux marchands des résultats de recherche plus ciblés et d'augmenter le potentiel de conversion des événements utilisateur.

Ces fonctionnalités de recherche supplémentaires optimisent l'algorithme de pertinence par défaut, en fournissant des fonctionnalités non définies par défaut adaptées au profil d'utilisation de chaque marchand, y compris :

  • Options permettant de trier les résultats, par exemple par prix, par articles les mieux notés ou par meilleures ventes. La recherche non par défaut est personnalisée pour renvoyer des résultats de recherche spécifiques avec les bonnes variantes de produits. Par exemple, pour afficher la variante la moins chère ou la plus chère lors du tri par prix.

  • Application automatique d'un filtre de pertinence plus strict pour les événements utilisateur non définis par défaut.

  • Activer des commandes de boosting/rétrogradation à intensité réglable pour affiner les résultats de recherche.

La recherche fournit des fonctionnalités de recherche par requête textuelle et de recherche par navigation.

Dans le cas d'utilisation de la recherche par requête textuelle, un acheteur peut saisir une requête textuelle sur votre site. La recherche renvoie une réponse contenant les produits qui correspondent aux paramètres des contrôles que vous avez configurés, triés par pertinence et par maximisation des revenus.

Dans le cas d'une navigation, un client peut accéder au menu de votre site et accéder à une catégorie de produits spécifique. La recherche choisit automatiquement l'ordre de tri qui maximise les revenus en s'appuyant sur le comportement et les tendances des utilisateurs. Les résultats de la navigation peuvent être affinés davantage grâce aux commandes que vous avez configurées.

Les requêtes de recherche textuelle et de recherche par navigation utilisent la méthode servingConfigs.search.

Recherches par requête textuelle

Lorsqu'un utilisateur saisit une requête textuelle pour effectuer une recherche sur votre site, la recherche trie les résultats potentiels en fonction de la pertinence, de la popularité, de la possibilité d'achat et de la personnalisation.

La recherche considère une requête servingConfigs.search comme une requête de recherche textuelle si elle comporte un champ query non vide.

Lorsque vous importez un événement utilisateur, envoyez les événements de recherche de requête textuelle générés par la recherche en tant qu'événements utilisateur search. Si l'événement comporte un champ userEvent.searchQuery non vide et un champ userEvent.pageCategories vide, la recherche le considère comme un événement de recherche textuelle.

Traiter les requêtes et les paramètres textuels

Les requêtes standards font l'objet d'une analyse linguistique qui supprime la ponctuation standard. Les chaînes de filtre sont strictement sensibles à la casse. Il est essentiel de comprendre comment traiter les requêtes textuelles et les paramètres pour créer correctement des requêtes API dans AI Commerce Search.

  • Tokenisation et ponctuation des requêtes : le texte en langage naturel transmis au champ query fait l'objet d'une analyse linguistique et d'une correction orthographique automatiques. Au cours de ce processus, la ponctuation standard (comme les virgules, les points, + ou -) est souvent supprimée ou ignorée pour optimiser la compréhension du langage naturel.
  • Termes de requête au singulier et au pluriel : AI Commerce Search évalue les requêtes au singulier et au pluriel séparément en fonction de l'intention de l'utilisateur final et de l'historique de l'engagement utilisateur, comme les clics et les achats. Les acheteurs cliquent souvent sur des produits différents ou en achètent d'autres selon que les termes sont au singulier ou au pluriel. Par exemple, ils peuvent rechercher t-shirt pour un seul t-shirt, ou t-shirts pour un lot de t-shirts. Par conséquent, les requêtes au singulier et au pluriel peuvent renvoyer des résultats de recherche, des classements et des attributs dynamiques différents. Si une forme de requête ne correspond qu'à quelques produits, l'extension des requêtes peut également élargir les résultats de cette requête. Pour développer les termes au singulier, au pluriel ou fléchis dans la langue de votre catalogue afin d'inclure les candidats de chacun, configurez des commandes de synonymes bidirectionnels.
  • Sensibilité stricte à la casse dans les paramètres : alors que les requêtes textuelles standards ne sont généralement pas sensibles à la casse, les paramètres programmatiques le sont strictement.
    • Filtres : les expressions de filtre et leurs valeurs de chaîne littérale sont entièrement sensibles à la casse.
    • Tri : l'expression orderBy est sensible à la casse. Si vous triez par un champ tel que products.title, le moteur triera Apple avant banana avant artichoke. Pour contourner ce problème, vous pouvez importer les titres des produits en majuscules dans un attribut personnalisé distinct (tel que attributes.title_upper) et trier les produits en fonction de cet attribut pour obtenir un tri non sensible à la casse.
  • Caractères spéciaux réservés :
    • Le caractère > est strictement réservé comme délimiteur pour les hiérarchies de catégories (par exemple, Categories > Shoes). Si > apparaît naturellement dans le nom de votre catégorie, vous devez le remplacer par un autre caractère avant l'ingestion et l'interrogation.
    • Le caractère / n'est pas accepté dans les valeurs textuelles des expressions de filtre de recommandation.

Parcourir les recherches

La navigation utilise la navigation sur le site pour produire des résultats de recherche d'une pertinence égale, triés par articles les plus vendus. La recherche utilise l'IA pour optimiser le tri des résultats de navigation en tenant compte de la popularité, de la disponibilité et de la personnalisation.

Pour obtenir les résultats de recherche corrects, tenez compte des points suivants :

  • Les valeurs pageCategories et filter de vos requêtes de recherche doivent correspondre exactement aux valeurs pageCategories et filter de vos événements utilisateur importés. Si les paramètres des requêtes ne correspondent pas à ceux des événements, le modèle de reclassement basé sur les clics appris à partir des événements ne sera pas très performant pour cette requête spécifique et aura un impact négatif sur la qualité des résultats.

  • AI Commerce Search classe un événement utilisateur search comme un événement basé sur la navigation s'il comporte un champ userEvent.searchQuery vide et un champ userEvent.pageCategories non vide. C'est pourquoi vous devez vous assurer d'envoyer les événements de navigation générés par AI Commerce Search en tant qu'événements utilisateur search lorsque vous les importez.

  • Un filtre de navigation doit être valide et indiquer, pour chaque requête de navigation, quels produits appartiennent à la catégorie de produits que l'utilisateur parcourt. Pour ce faire, l'ID de catégorie doit être défini dans les champs filter et page_category. Par exemple, si vous souhaitez que les résultats de recherche soient ciblés sur la catégorie "Maison et jardin". Tout d'abord, le fait de n'avoir qu'une seule valeur filter de "in-stock" n'affine pas suffisamment la recherche pour fournir des résultats de navigation optimaux. Pour fournir des résultats de recherche limités à la catégorie "Maison et jardin", vous devez définir "Home \& Garden" dans la catégorie de page, mais aussi dans le filtre avec categories: ANY("Home & Garden"). Si vous ne définissez pas la catégorie dans la partie "Filtre", les résultats de navigation risquent d'être trop larges et d'inclure de nombreux articles qui ne sont pas liés à la catégorie "Maison et jardin".

Les requêtes de diffusion et les événements dont le champ de requête est vide et dont les champs page_categories sont renseignés sont considérés comme des requêtes de navigation et des événements utilisateur. Le champ page_categories spécifie la page de navigation elle-même. Lorsque la méthode servingConfigs.search envoie une requête, la recherche la considère comme une requête de recherche par navigation si le champ query est vide. Dans ce cas, les résultats sont basés sur les champs filter et pageCategories et, si possible, sur une optimisation et une personnalisation supplémentaires.

Vous pouvez définir la catégorie dans les deux, comme dans cet exemple :

JSON

page_category: "Home & Garden"
filter: "(availability: ANY("IN_STOCK")) AND (categories: ANY("Home & Garden"))"

Sinon, comme la navigation fonctionne avec des requêtes de chaîne vides, les produits d'une catégorie donnée ne s'afficheront pas automatiquement dans les résultats d'une catégorie de page donnée. En d'autres termes, si l'utilisateur final navigue sans rien spécifier à l'aide d'une requête textuelle, la recherche peut ne pas donner de résultats ciblés efficacement, même si l'utilisateur accède à une page de catégorie.

Utiliser des requêtes de recherche

Utilisez les requêtes de recherche pour obtenir des résultats pour les recherches textuelles et les recherches par navigation. Pour effectuer une requête de recherche, utilisez la méthode servingConfigs.search.

Toutes les requêtes de recherche nécessitent placement, qui identifie le nom complet de la ressource de la configuration de diffusion qui sera utilisée. La configuration de diffusion détermine les paramètres et les commandes associées qui affectent les résultats de recherche.

Les requêtes de recherche textuelle nécessitent un champ query non vide.

Les requêtes de recherche de navigation nécessitent un champ pageCategories non vide.

Python

Pour savoir comment installer et utiliser la bibliothèque cliente pour AI Commerce Search, consultez Bibliothèques clientes AI Commerce Search. Pour en savoir plus, consultez la documentation de référence de l'API AI Commerce Search pour Python.

Pour vous authentifier auprès d'AI Commerce Search, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

import google.auth
from google.cloud.retail import SearchRequest, SearchServiceClient

project_id = google.auth.default()[1]


# get search service request:
def get_search_request(query: str):
    default_search_placement = (
        "projects/"
        + project_id
        + "/locations/global/catalogs/default_catalog/placements/default_search"
    )

    search_request = SearchRequest()
    search_request.placement = default_search_placement  # Placement is used to identify the Serving Config name.
    search_request.query = query
    search_request.visitor_id = "123456"  # A unique identifier to track visitors
    search_request.page_size = 10

    print("---search request:---")
    print(search_request)

    return search_request


# call the Retail Search:
def search():
    # TRY DIFFERENT QUERY PHRASES HERE:
    query_phrase = "Hoodie"

    search_request = get_search_request(query_phrase)
    search_response = SearchServiceClient().search(search_request)

    print("---search response---")
    if not search_response.results:
        print("The search operation returned no matching results.")
    else:
        print(search_response)
    return search_response


search()

Node.js

Pour savoir comment installer et utiliser la bibliothèque cliente pour AI Commerce Search, consultez Bibliothèques clientes AI Commerce Search.

Pour vous authentifier auprès d'AI Commerce Search, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

'use strict';

async function main() {
  // Call Retail API to search for a products in a catalog using only search query.

  // Imports the Google Cloud client library.
  const {SearchServiceClient} = require('@google-cloud/retail');

  // Instantiates a client.
  const retailClient = new SearchServiceClient();

  const projectId = await retailClient.getProjectId();

  // Placement is used to identify the Serving Config name.
  const placement = `projects/${projectId}/locations/global/catalogs/default_catalog/placements/default_search`;

  // Raw search query.
  const query = 'Hoodie'; //TRY DIFFERENT QUERY PHRASES

  // A unique identifier for tracking visitors.
  const visitorId = '12345';

  // Maximum number of Products to return.
  const pageSize = 10;

  const IResponseParams = {
    ISearchResult: 0,
    ISearchRequest: 1,
    ISearchResponse: 2,
  };

  const callSearch = async () => {
    console.log('Search start');
    // Construct request
    const request = {
      placement,
      query,
      visitorId,
      pageSize,
    };
    console.log('Search request: ', request);

    // Run request
    const response = await retailClient.search(request, {
      autoPaginate: false,
    });
    const searchResponse = response[IResponseParams.ISearchResponse];
    if (searchResponse.totalSize === 0) {
      console.log('The search operation returned no matching results.');
    } else {
      console.log('Search result: ', JSON.stringify(searchResponse, null, 4));
    }
    console.log('Search end');
  };

  callSearch();
}

process.on('unhandledRejection', err => {
  console.error(err.message);
  process.exitCode = 1;
});

main();

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour AI Commerce Search, consultez Bibliothèques clientes AI Commerce Search. Pour en savoir plus, consultez la documentation de référence de l'API AI Commerce Search pour Java.

Pour vous authentifier auprès d'AI Commerce Search, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


import com.google.cloud.ServiceOptions;
import com.google.cloud.retail.v2.SearchRequest;
import com.google.cloud.retail.v2.SearchResponse;
import com.google.cloud.retail.v2.SearchServiceClient;
import java.io.IOException;
import java.util.UUID;

public class SearchSimpleQuery {

  public static void main(String[] args) throws IOException {
    String projectId = ServiceOptions.getDefaultProjectId();
    String defaultCatalogName =
        String.format("projects/%s/locations/global/catalogs/default_catalog", projectId);
    String defaultSearchPlacementName = defaultCatalogName + "/placements/default_search";

    searchResponse(defaultSearchPlacementName);
  }

  public static void searchResponse(String defaultSearchPlacementName) throws IOException {
    // TRY DIFFERENT QUERY PHRASES HERE:
    String queryPhrase = "Hoodie";
    String visitorId = UUID.randomUUID().toString();
    int pageSize = 10;

    SearchRequest searchRequest =
        SearchRequest.newBuilder()
            .setPlacement(defaultSearchPlacementName)
            .setQuery(queryPhrase)
            .setVisitorId(visitorId)
            .setPageSize(pageSize)
            .build();
    System.out.println("Search request: " + searchRequest);

    // Initialize client that will be used to send requests. This client only
    // needs to be created once, and can be reused for multiple requests. After
    // completing all of your requests, call the "close" method on the client to
    // safely clean up any remaining background resources.
    try (SearchServiceClient client = SearchServiceClient.create()) {
      SearchResponse searchResponse = client.search(searchRequest).getPage().getResponse();
      if (searchResponse.getTotalSize() == 0) {
        System.out.println("The search operation returned no matching results.");
      } else {
        System.out.println("Search response: " + searchResponse);
      }
    }
  }
}

Par défaut, un nombre raisonnable de résultats triés par pertinence est renvoyé.

Pour que la réponse de recherche renvoyée contienne également des attributs produit, veillez à fournir des valeurs d'attributs lorsque vous importez vos données de catalogue. Product possède des attributs système prédéfinis (marque, couleur et taille par exemple) pour lesquels vous pouvez fournir des valeurs. Vous pouvez également inclure des attributs personnalisés que vous définissez avec Product.attributes.

Effectuer des requêtes

Ce tutoriel vous explique comment envoyer une requête de recherche textuelle au service AI Commerce Search et analyser sa réponse.

Filtrer les résultats de recherche à l'aide des suggestions de saisie semi-automatique

Si vous avez implémenté des suggestions de saisie automatique enrichies sur votre interface (où les utilisateurs peuvent sélectionner une requête combinée à une marque ou une catégorie spécifique), vous devez traduire cette sélection en un SearchRequest filtré.

Pour ce faire, extrayez la suggestion de texte et placez-la dans le champ query, puis extrayez l'attribut sélectionné (une marque, par exemple) et mettez-le en forme en tant qu'expression dans le champ filter.

Exemple de requête de recherche à partir d'une suggestion filtrée

Si l'utilisateur a cliqué sur la suggestion chaussure dans Nike, structurez votre SearchRequest comme suit :

{
  "placement": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/placements/default_search",
  "query": "shoe",
  "filter": "brands: ANY(\"Nike\")",
  "visitorId": "user_session_123"
}

Ajouter le nombre de produits aux facettes de suggestion

Pour améliorer encore l'expérience de filtrage, vous pouvez afficher le nombre de produits disponibles pour chaque filtre suggéré avant même que l'utilisateur n'effectue la recherche. Pour utiliser les facettes de suggestion avec le nombre de produits, vous devez contacter l'assistance pour activer la fonctionnalité. Lorsqu'elle est activée, incluez la clé de facette textuelle spécifique dans le facetSpecs de votre SearchRequest pendant au moins sept jours pour permettre au système de calculer le nombre de produits en fonction des données de votre historique de recherche.

Pagination

Utilisez la pagination pour réduire le temps de recherche et la taille des réponses envoyées.

Utiliser la pagination

Ce tutoriel vous explique comment contrôler la pagination dans une requête de recherche textuelle. Lorsqu'un client recherche des produits dans un magasin, il peut améliorer sa navigation dans les résultats de recherche. Par exemple, ils peuvent limiter le nombre d'éléments dans la réponse de recherche à l'aide de la fonctionnalité de taille de page ou accéder à la page de leur choix à l'aide de la fonctionnalité de décalage.

Paginer

Pour passer d'une page à une autre, utilisez page_token ou offset, selon votre cas d'utilisation.

Python

Pour savoir comment installer et utiliser la bibliothèque cliente pour AI Commerce Search, consultez Bibliothèques clientes AI Commerce Search. Pour en savoir plus, consultez la documentation de référence de l'API AI Commerce Search pour Python.

Pour vous authentifier auprès d'AI Commerce Search, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


import google.auth
from google.cloud.retail import SearchRequest, SearchServiceClient

project_id = google.auth.default()[1]


# get search service request:
def get_search_request(query: str, page_size: int, offset: int, next_page_token: str):
    default_search_placement = (
        "projects/"
        + project_id
        + "/locations/global/catalogs/default_catalog/placements/default_search"
    )

    search_request = SearchRequest()
    search_request.placement = default_search_placement
    search_request.visitor_id = "123456"  # A unique identifier to track visitors
    search_request.query = query
    search_request.page_size = page_size
    search_request.offset = offset
    search_request.page_token = next_page_token

    print("---search request:---")
    print(search_request)

    return search_request


# call the Retail Search:
def search():
    # TRY DIFFERENT PAGINATION PARAMETERS HERE:
    page_size = 6
    offset = 0
    page_token = ""

    search_request_first_page = get_search_request(
        "Hoodie", page_size, offset, page_token
    )
    search_response_first_page = SearchServiceClient().search(search_request_first_page)

    print("---search response---")
    if not search_response_first_page.results:
        print("The search operation returned no matching results.")
    else:
        print(search_response_first_page)

    # PASTE CALL WITH NEXT PAGE TOKEN HERE:

    # PASTE CALL WITH OFFSET HERE:

    return search_response_first_page


search()

Node.js

Pour savoir comment installer et utiliser la bibliothèque cliente pour AI Commerce Search, consultez Bibliothèques clientes AI Commerce Search.

Pour vous authentifier auprès d'AI Commerce Search, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

async function main() {
  // Imports the Google Cloud client library.
  const {SearchServiceClient} = require('@google-cloud/retail');

  // Instantiates a client.
  const retailClient = new SearchServiceClient();

  const projectId = await retailClient.getProjectId();

  // Placement is used to identify the Serving Config name.
  const placement = `projects/${projectId}/locations/global/catalogs/default_catalog/placements/default_search`;

  // Raw search query.
  const query = 'Hoodie';

  // A unique identifier for tracking visitors.
  const visitorId = '12345';

  // Maximum number of Products to return.
  const pageSize = 6; // TRY DIFFERENT PAGE SIZES, INCLUDING THOSE OVER 100

  // A 0-indexed integer that specifies the current offset in search results.
  const offset = 0; // TRY DIFFERENT OFFSETS TO SEE DIFFERENT PRODUCTS

  //A page token received from a previous search call.
  let pageToken = '';

  const IResponseParams = {
    ISearchResult: 0,
    ISearchRequest: 1,
    ISearchResponse: 2,
  };

  const callSearch = async () => {
    console.log('Search start');
    // Construct request
    const request = {
      placement,
      query,
      visitorId,
      pageSize,
      offset,
      pageToken,
    };

    // Run request
    const response = await retailClient.search(request, {
      autoPaginate: false,
    });
    const searchResponse = response[IResponseParams.ISearchResponse];
    if (searchResponse.totalSize === 0) {
      console.log('The search operation returned no matching results.');
    } else {
      console.log('Search result: ', JSON.stringify(searchResponse, null, 4));
      pageToken = response[IResponseParams.ISearchResponse].nextPageToken;
      console.log(
        'Next page token:',
        response[IResponseParams.ISearchResponse].nextPageToken
      );
    }
    console.log('Search end');
  };

  // Call search
  await callSearch();

  //PASTE CALL WITH NEXT PAGE TOKEN HERE:
}

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour AI Commerce Search, consultez Bibliothèques clientes AI Commerce Search. Pour en savoir plus, consultez la documentation de référence de l'API AI Commerce Search pour Java.

Pour vous authentifier auprès d'AI Commerce Search, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


import com.google.cloud.ServiceOptions;
import com.google.cloud.retail.v2.SearchRequest;
import com.google.cloud.retail.v2.SearchResponse;
import com.google.cloud.retail.v2.SearchServiceClient;
import java.io.IOException;
import java.util.UUID;

public class SearchWithPagination {

  public static void main(String[] args) throws IOException {
    String projectId = ServiceOptions.getDefaultProjectId();
    String defaultCatalogName =
        String.format("projects/%s/locations/global/catalogs/default_catalog", projectId);
    String defaultSearchPlacementName = defaultCatalogName + "/placements/default_search";

    searchResponse(defaultSearchPlacementName);
  }

  public static void searchResponse(String defaultSearchPlacementName) throws IOException {
    // TRY DIFFERENT PAGINATION PARAMETERS HERE:
    int pageSize = 6;
    String queryPhrase = "Hoodie";
    int offset = 0;
    String pageToken = "";
    String visitorId = UUID.randomUUID().toString();

    SearchRequest searchRequest =
        SearchRequest.newBuilder()
            .setPlacement(defaultSearchPlacementName)
            .setVisitorId(visitorId)
            .setQuery(queryPhrase)
            .setPageSize(pageSize)
            .setOffset(offset)
            .setPageToken(pageToken)
            .build();
    System.out.println("Search request: " + searchRequest);

    // Initialize client that will be used to send requests. This client only
    // needs to be created once, and can be reused for multiple requests. After
    // completing all of your requests, call the "close" method on the client to
    // safely clean up any remaining background resources.
    try (SearchServiceClient client = SearchServiceClient.create()) {
      SearchResponse searchResponseFirstPage = client.search(searchRequest).getPage().getResponse();
      if (searchResponseFirstPage.getTotalSize() == 0) {
        System.out.println("The search operation returned no matching results.");
      } else {
        System.out.println("Search response: " + searchResponseFirstPage);
      }

      // PASTE CALL WITH NEXT PAGE TOKEN HERE:

      // PASTE CALL WITH OFFSET HERE:
    }
  }
}

Jeton de page

Pour passer à la page suivante, vous pouvez utiliser page_token. Par exemple, supposons que vous envoyez l'élément SearchRequest suivant.

JSON

{
  placement: 'projects/PROJECT_NUMBER/locations/global/catalogs/default_catalog/placements/default_search'
  visitor_id: 'VISITOR_ID'
  query: 'shoes'
  page_size: 5
}

Dans SearchResponse, vous pouvez obtenir les cinq produits les plus pertinents ainsi qu'un jeton next_page_token.

JSON

{
  results: [
    products{...}, products{...}, products{...}, products{...}, products{...}
  ]
  next_page_token: "wY4ETNkBDOlVjZ0YWLzUmM40SMhVjMtADMwATL5UGN5MGZlVDJaIQ5LaYsQUw9fC6lIwgE1EgC"
  total_size: 100
  search_token: "NtQKDAiXt4_3BRDCg_jnARABGiQ1ZWRjOTRlOC0wMDAwLTI1YTEtODJlMy1mNGY1ZTgwZDUxOGM"
}

Pour obtenir les cinq produits les plus pertinents suivants (du 6e au 10e), définissez page_token avec le même placement, visitor_id et query que next_page_token à partir du SearchResponse précédent.

Java

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

public static void searchProducts_withNextPageToken(String query, int pageSize)
    throws IOException, InterruptedException {
  try (SearchServiceClient searchClient = SearchServiceClient.create()) {
    SearchRequest firstRequest = SearchRequest.newBuilder()
        .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
        .setBranch(DEFAULT_BRANCH_NAME)
        .setVisitorId(VISITOR_ID)
        .setQuery(query)
        .setPageSize(pageSize)
        .build();

    SearchResponse firstResponse = searchClient.search(firstRequest).getPage()
        .getResponse();
    System.out.println("First search response: " + firstResponse);

    SearchRequest secondRequest = SearchRequest.newBuilder()
        .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
        .setBranch(DEFAULT_BRANCH_NAME)
        .setVisitorId(VISITOR_ID)
        .setQuery(query)
        .setPageSize(pageSize)
        .setPageToken(firstResponse.getNextPageToken())
        .build();

    SearchResponse secondResponse = searchClient.search(secondRequest).getPage()
        .getResponse();
    System.out.println("Second search response: " + secondResponse);
  }
}

Dans cet exemple, SearchRequest ressemble à ceci :

JSON

{
  placement: 'projects/PROJECT_NUMBER/locations/global/catalogs/default_catalog/placements/default_search'
  visitor_id: 'VISITOR_ID'
  query: 'shoes'
  page_size: 5
  page_token: "wY4ETNkBDOlVjZ0YWLzUmM40SMhVjMtADMwATL5UGN5MGZlVDJaIQ5LaYsQUw9fC6lIwgE1EgC"
}

Décalage (offset)

Dans d'autres cas de figure, au lieu de naviguer d'une page à l'autre ou d'obtenir les résultats ayant une pertinence maximale, vous pouvez souhaiter accéder directement à une position donnée à l'aide de offset.

Par exemple, si vous souhaitez accéder à la 10e page de résultats, chaque page comportant cinq résultats, vous pouvez définir la valeur offset sur 45, qui correspond à (10 - 1) * 5.

JSON

{
  placement: 'projects/PROJECT_NUMBER/locations/global/catalogs/default_catalog/placements/default_search'
  visitor_id: 'VISITOR_ID'
  query: 'shoes'
  page_size: 5
  offset: 45
}

Niveaux de performance pour la recherche

La recherche propose plusieurs niveaux de performances qui améliorent de plus en plus vos résultats. Par exemple, pour les cas d'utilisation de recherche par requête textuelle, les résultats peuvent être basés uniquement sur la pertinence. À mesure que vous débloquez des niveaux de performances plus avancés, la recherche peut renvoyer des résultats basés sur la pertinence, la popularité, l'optimisation des revenus et la personnalisation.

La recherche débloque automatiquement des niveaux de performances plus élevés lorsque vous importez des données de catalogue et d'événements utilisateur qui répondent aux exigences minimales de chaque niveau.

Pour en savoir plus sur l'utilisation de cette page pour afficher la qualité des données et les niveaux de performances de recherche, consultez Débloquer les niveaux de performances de recherche. La page Qualité des données de la console AI Commerce Search dans Gemini Enterprise for Customer Experience fournit une évaluation des exigences que vous avez remplies pour chaque niveau.

Évaluer les résultats de la recherche textuelle et de la navigation

Avant de mettre à jour le code de votre site Web pour demander des résultats de recherche textuelle ou de recherche par navigation, vous pouvez prévisualiser les résultats pour vérifier que votre configuration de diffusion fonctionne comme prévu.

Pour en savoir plus sur les configurations de diffusion, consultez À propos des configurations de diffusion.

Vous pouvez prévisualiser les résultats d'une configuration de diffusion à partir de la page Évaluer ou en accédant à la page Détails d'une configuration de diffusion dans la console, puis en cliquant sur l'onglet Évaluer. Les étapes suivantes vous expliquent comment prévisualiser les données à partir de la page Évaluer.

Pour prévisualiser les résultats renvoyés par votre configuration de diffusion :

  1. Accédez à la page Évaluer dans la console AI Commerce Search sur Gemini Enterprise for Customer Experience.

    Accéder à la page "Évaluer"

  2. Cliquez sur l'onglet Recherche.

  3. Sélectionnez la configuration de diffusion que vous souhaitez prévisualiser.

  4. Sélectionnez la branche de catalogue contenant le catalogue que vous souhaitez prévisualiser.

  5. Facultatif : saisissez un ID de visiteur pour prévisualiser les résultats de recherche pour cet utilisateur.

  6. Facultatif : Saisissez un ID utilisateur pour prévisualiser les résultats de recherche de cet utilisateur.

  7. Facultatif : Saisissez une heure de recherche pour prévisualiser les résultats de recherche qui s'afficheraient à l'heure spécifiée.

    Par exemple, si vous avez promu certains produits pour une vente spéciale, vous pouvez voir les résultats tels qu'ils apparaîtraient ce jour-là.

  8. Facultatif : sélectionnez les attributs à afficher à côté des résultats de recherche, puis cliquez sur OK pour les appliquer.

    Les attributs que vous sélectionnez sont utilisés pour générer une liste de filtres d'attributs qui s'affichent sous Ajouter des attributs après avoir effectué la recherche initiale. Ces filtres de facettes peuvent inclure des facettes autres que celles que vous sélectionnez à cette étape, telles que des facettes dynamiques.

  9. Saisissez une requête de recherche textuelle pour prévisualiser les résultats de recherche correspondants.

  10. Cliquez sur Aperçu de la recherche ou appuyez sur Entrée dans n'importe quel champ de saisie pour afficher les résultats.

    Les résultats de recherche s'affichent avec les vignettes disponibles.

    Si votre recherche déclenche un contrôle de redirection, un avis s'affiche avec l'URI de redirection.

  11. Facultatif : Cliquez sur l'icône Grille ou Liste pour modifier l'affichage de vos résultats de recherche dans l'aperçu.

  12. Facultatif : Si vous avez sélectionné des attributs à afficher avec vos résultats, sélectionnez une ou plusieurs valeurs d'attribut dans la liste des attributs pour filtrer les résultats en fonction de ces valeurs. Les résultats sont automatiquement mis à jour après la sélection.

    Lorsque vous sélectionnez plusieurs valeurs d'un même attribut, elles sont appliquées comme le serait un opérateur OR, et les valeurs de différents attributs sont appliquées comme le serait un opérateur AND. Par exemple, après avoir sélectionné les facettes couleur et les valeurs "bleu" et "or", ainsi que les valeurs de matière "coton" et "polyester". Vos résultats de recherche doivent comporter l'attribut "blue" ou "gold", ainsi que l'attribut "cotton" ou "polyester".

Parcourir

  1. Accédez à la page Évaluer dans la console AI Commerce Search sur Gemini Enterprise for Customer Experience.

    Accéder à la page "Évaluer"

  2. Cliquez sur l'onglet Parcourir.

  1. Sélectionnez la configuration de diffusion que vous souhaitez prévisualiser.

  2. Sélectionnez la branche de catalogue contenant le catalogue que vous souhaitez prévisualiser.

  3. Facultatif : Saisissez un ID de visiteur pour prévisualiser les résultats pour cet utilisateur.

  4. Facultatif : Saisissez un ID utilisateur pour prévisualiser les résultats pour cet utilisateur.

  5. Pour prévisualiser l'apparence des résultats avec un filtre spécifique, saisissez une chaîne de filtre. Utilisez la syntaxe d'expression de filtre spécifiée dans la documentation Filtre.

  6. Facultatif : Saisissez une heure de navigation pour prévisualiser les résultats qui s'afficheraient à l'heure spécifiée.

    Par exemple, si vous avez promu certains produits pour un événement promotionnel majeur, vous pouvez voir les résultats tels qu'ils apparaîtraient ce jour-là.

  7. Saisissez la catégorie de pages pour laquelle vous testez les résultats de navigation.

  8. Facultatif : sélectionnez les facettes à afficher à côté des résultats, puis cliquez sur OK pour les appliquer.

    Les attributs que vous sélectionnez sont utilisés pour générer une liste de filtres d'attributs qui s'affichent sous Ajouter des attributs après avoir effectué la recherche initiale. Ces filtres de facettes peuvent inclure des facettes autres que celles que vous sélectionnez à cette étape, telles que des facettes dynamiques.

  9. Cliquez sur Aperçu de la navigation ou appuyez sur Entrée dans n'importe quel champ de saisie pour afficher les résultats.

    Les résultats s'affichent avec les miniatures disponibles.

  10. Facultatif : Cliquez sur l'icône Grille ou Liste pour modifier l'affichage de vos résultats dans l'aperçu.

  11. Facultatif : Si vous avez sélectionné des attributs à afficher avec vos résultats, sélectionnez une ou plusieurs valeurs d'attribut dans la liste des attributs pour filtrer les résultats en fonction de ces valeurs. Les résultats sont automatiquement mis à jour après la sélection.

    Lorsque vous sélectionnez plusieurs valeurs d'un même attribut, elles sont appliquées comme le serait un opérateur OR, et les valeurs de différents attributs sont appliquées comme le serait un opérateur AND. Par exemple, après avoir sélectionné les attributs couleur et matière, vous pouvez filtrer vos résultats de recherche en sélectionnant les valeurs de couleur "bleu" et "or", et les valeurs de matière "coton" et "polyester". Vos résultats doivent comporter l'attribut "blue" ou "gold", ainsi que l'attribut "cotton" ou "polyester".

Pour afficher la page Détails de la configuration de diffusion que vous prévisualisez, cliquez sur Afficher la configuration de diffusion sous le champ Sélectionner une configuration de diffusion.