Filtra e ordina i risultati

In questa pagina vengono descritti i filtri e l'ordinamento con la ricerca.

Tutorial sui filtri

Questo tutorial illustra la funzionalità di filtro. Consente di perfezionare le richieste di ricerca in base alle tue esigenze o a quelle del tuo cliente. Puoi filtrare in base a uno o più campi, in base a campi di testo o numerici oppure a entrambi. Puoi utilizzare un linguaggio di espressione per creare un predicato per ogni campo o combinare espressioni diverse utilizzando operatori logici. Ad esempio, un acquirente che cerca scarpe può utilizzare i filtri per restringere la ricerca al brand e al colore che preferisce.


Per seguire le indicazioni dettagliate per questa attività direttamente nell'editor di Cloud Shell, fai clic su Aiuto:

Guidami


Tutorial sull'ordinamento

Questo tutorial mostra come ordinare gli articoli in una risposta di ricerca. Quando un utente finale cerca un prodotto sul tuo sito, gli vengono mostrati i risultati ordinati in base a più campi. Ad esempio, un utente sta cercando un abito con il prezzo e lo sconto migliori. Qui sono presenti più campi relativi a prezzo e sconto. L'utente vedrà gli abiti ordinati per prezzo e gli abiti con lo stesso prezzo ordinati per sconto.


Per seguire le indicazioni dettagliate per questa attività direttamente nell'editor di Cloud Shell, fai clic su Aiuto:

Guidami


Set di dati di esempio

Questa pagina utilizza il seguente set di dati come esempio. Sono inclusi solo i campi necessari per l'esempio.

Filtro

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 searchFilteredProducts(String query, int pageSize,
    String filter) throws IOException, InterruptedException {
  SearchRequest searchRequest = SearchRequest.newBuilder()
      .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
      .setBranch(DEFAULT_BRANCH_NAME)
      .setVisitorId(VISITOR_ID)
      .setQuery(query)
      .setPageSize(pageSize)
      .setFilter(filter)
      .build();

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

La sintassi delle espressioni di filtro può essere riepilogata come segue EBNF:

  # A single expression or multiple expressions that are joined by "AND" or "OR".
  filter = expression, { " AND " | "OR", expression };

  # Expressions can be prefixed with "-" or "NOT" to express a negation.
  expression = [ "-" | "NOT " ],
    # A parenthetical expression.
    | "(", expression, ")"
    # A simple expression applying to a text field.
    # Function "ANY" returns true if the field contains any of the literals.
    ( text_field, ":", "ANY", "(", literal, { ",", literal }, ")"
    # A simple expression applying to a numerical field. Function "IN" returns true
    # if a field value is within the range. By default, lower_bound is inclusive and
    # upper_bound is exclusive.
    | numerical_field, ":", "IN", "(", lower_bound, ",", upper_bound, ")"
    # A simple expression that applies to a numerical field and compares with a double value.
    | numerical_field, comparison, double );

  # A lower_bound is either a double or "*", which represents negative infinity.
  # Explicitly specify inclusive bound with the character 'i' or exclusive bound
  # with the character 'e'.
  lower_bound = ( double, [ "e" | "i" ] ) | "*";

  # An upper_bound is either a double or "*", which represents infinity.
  # Explicitly specify inclusive bound with the character 'i' or exclusive bound
  # with the character 'e'.
  upper_bound = ( double, [ "e" | "i" ] ) | "*";

  # Supported comparison operators.
  comparison = "<=" | "<" | ">=" | ">" | "=";

  # A literal is any double quoted string. You must escape backslash (\) and
  # quote (") characters.
  literal = double quoted string;

  text_field = see the table below;

  numerical_field = see the table below;

I campi di testo supportati sono riassunti nella seguente tabella.

campo description
"ID prodotto" L'ID prodotto (l'ultimo segmento di Product.name).
"brand" Il valore Product.brands.
"categorie" Le categorie di prodotto.
"generi" Il segmento Audience.genders.
"ageGroups" Il segmento Audience.age_groups.
"disponibilità" Il valore Product.availability. Il valore è uno dei seguenti: "IN_STOCK", "OUT_OF_STOCK", PREORDER", "BACKORDER".
"colorFamiglie" Il campo ColorInfo.color_families.
"colori" Il file ColorInfo.colors.
"dimensioni" Il valore Product.sizes.
"materiali" Il campo Product.materials.
"pattern" Il valore Product.patterns.
"conditions" Le condizioni del prodotto.
"attributes.key" L'attributo testuale personalizzato nell'oggetto Product. La chiave può essere qualsiasi chiave nella mappa Product.attributes, se i valori degli attributi sono testuali.
"pickupInStore" FulfillmentInfo.place_id per il tipo "pickup-in-store".
"shipToStore" Il campo FulfillmentInfo.place_ids per il tipo "ship-to-store".
"sameDayDelivery" Il FulfillmentInfo.place_ids per il tipo "same-day-delivery".
"nextDayDelivery" Il campo FulfillmentInfo.place_ids per il tipo "next-day-delivery".
"customFulfillment1" Il FulfillmentInfo.place_ids per il tipo "custom-type-1".
"customFulfillment2" Il FulfillmentInfo.place_ids per il tipo "custom-type-2".
"customFulfillment3" Il FulfillmentInfo.place_ids per il tipo "custom-type-3".
"customFulfillment4" Il FulfillmentInfo.place_ids per il tipo "custom-type-4".
"customFulfillment5" Il FulfillmentInfo.place_ids per il tipo "custom-type-5".
"inventory(place_id,attributes.key)" L'attributo testuale personalizzato nello spazio pubblicitario.

I campi numerici supportati sono riassunti nella seguente tabella.

campo description
"price" L'elemento PriceInfo.price.
"discount" Lo sconto. Calcolato in base a (prezzo_originale - prezzo) / prezzo_originale.
"valutazione" Il parametro Rating.average_rating.
"ratingCount" Il parametro Rating.rating_count.
"attributes.key" L'attributo personalizzato numerico nell'oggetto Product. La chiave può essere qualsiasi chiave nella mappa Product.attributes, se i valori degli attributi sono numerici.
"inventory(place_id,price)" Il prezzo dell'inventario.
"inventory(place_id,original_price)" Il prezzo originale dell'inventario.
"inventory(place_id,attributes.key)" L'attributo numerico personalizzato nello spazio pubblicitario.

Sono consentite al massimo 10 congiunzioni o disgiunzioni nidificate.

Ad esempio, per cercare rispettivamente un prodotto Google nelle seguenti situazioni, potresti impostare query come "Google" e impostare filter come valori mostrati nella seguente tabella:

scenario filtro
non è un accessorio Pixel "NOT categorie: QUALSIASI(\"Pixel > accessori in primo piano\")"
"meno di 100 dollari" "prezzo: IN(*, 100.0e)"
"Speaker Nest a meno di 80 dollari" "(categorie: Any(\"Nest > speaker e display\")) AND (price: IN(80.0i, *))"

Ordina

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 searchOrderedProducts(String query, int pageSize,
    String orderBy) throws IOException, InterruptedException {
  SearchRequest searchRequest = SearchRequest.newBuilder()
      .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
      .setBranch(DEFAULT_BRANCH_NAME)
      .setVisitorId(VISITOR_ID)
      .setQuery(query)
      .setPageSize(pageSize)
      .setOrderBy(orderBy)
      .build();

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

I campi ordinabili supportati sono riepilogati nella tabella seguente.

campo description
"ID prodotto" L'ID prodotto (l'ultimo segmento di Product.name).
"titolo" Il titolo del prodotto.
"brand" Il valore Product.brands.
"categorie" Le categorie di prodotto.
"generi" Il segmento Audience.genders.
"ageGroups" Il segmento Audience.age_groups.
"price" L'elemento PriceInfo.price.
"discount" Lo sconto. Calcolato per (prezzo_originale - prezzo) / prezzo.
"valutazione" Il parametro Rating.average_rating.
"ratingCount" Il parametro Rating.rating_count.
"attributes.key" L'attributo personalizzato nell'oggetto Product. La chiave può essere qualsiasi chiave nella mappa Product.attributes.
"inventory(place_id,price)" Il prezzo dell'inventario.
"inventory(place_id,original_price)" Il prezzo originale dell'inventario.
"inventory(place_id,attributes.key)" L'attributo personalizzato numerico o testuale nello spazio pubblicitario.

Per impostazione predefinita, l'ordine è crescente. L'ordine decrescente può essere specificato da un suffisso "decrescente", ad esempio "decrescente".

Per un campo numerico con più valori, ad esempio un campo ripetuto o un campo impostato per le varianti dei prodotti, il valore minimo viene utilizzato per ordinare in base all'ordine crescente e il valore massimo per l'ordinamento in ordine decrescente.

L'ordinamento in base a più campi è supportato tramite l'utilizzo di campi separati da virgole in ordine di priorità. I campi con priorità inferiore vengono utilizzati per ordinare elementi con valori uguali per i campi con priorità più elevata. Ad esempio, l'opzione "descritta di classificazione, prezzo" ordina gli elementi con la stessa valutazione in base al prezzo.