Filtra e ordina i risultati

Questa pagina descrive 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, a campi di testo o numerici oppure a entrambi. Puoi utilizzare un linguaggio delle espressioni per costruire un predicato per ciascun campo oppure 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 Procedura guidata:

Procedura guidata


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, vengono visualizzati i risultati ordinati in base a più campi. Ad esempio, un utente sta cercando un abito con il prezzo e lo sconto migliori. Prezzo e sconto sono più campi. L'utente vedrà gli abiti ordinati per prezzo e, per gli abiti con lo stesso prezzo, per sconto.


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

Procedura guidata


Set di dati di esempio

Questa pagina utilizza il seguente set di dati come esempio. Solo i campi necessari dell'esempio sono inclusi.

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 dell'espressione di filtro può essere riassunta dalla seguente 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 tabella seguente.

campo description
&quot;productId&quot; L'ID prodotto (l'ultimo segmento di Product.name).
"brands" Product.brands.
"categories" Le categorie Product.categories.
"genders" Il parametro Audience.genders.
"ageGroups" Audience.age_groups.
"disponibilità" Il valore Product.availability. Il valore deve essere uno dei seguenti: "IN_STOCK", "OUT_OF_STOCK", PREORDER", "BACKORDER".
"colorFamilies" ColorInfo.color_families.
"colors" ColorInfo.colors.
"dimensioni" Product.sizes.
"materiali" I materiali Product.materials.
"pattern" I pattern Product.
"condizioni" Le condizioni Product.conditions.
"attributes.key" L'attributo personalizzato testuale nell'oggetto Product. La chiave può essere qualsiasi chiave la mappa Product.attributes, se i valori degli attributi sono testuali.
"pickupInStore" ID FulfillmentInfo.place_ids per il tipo "pickup-in-store".
"shipToStore" FulfillmentInfo.place_ids per il tipo "spedizione in negozio".
"sameDayDelivery" ID FulfillmentInfo.place_id per il tipo "consegna in giornata".
"nextDayDelivery" I valori FulfillmentInfo.place_ids per il tipo "next-day-delivery".
"customFulfillment1" Il valore FulfillmentInfo.place_ids per il tipo "custom-type-1".
"customFulfillment2" ID FulfillmentInfo.place_id per il tipo "custom-type-2".
"customFulfillment3" FulfillmentInfo.place_ids per il tipo "custom-type-3".
"customFulfillment4" FulfillmentInfo.place_ids per il tipo "custom-type-4".
"customFulfillment5" Il valore FulfillmentInfo.place_ids per il tipo "custom-type-5".
"inventory(place_id,attributes.key)" L'attributo personalizzato di tipo di testo nell'inventario.

I campi numerici supportati sono riepilogati nella seguente tabella.

campo description
"prezzo" Il parametro PriceInfo.price.
"sconto" Lo sconto. Calcolata come (original_price - price) / original_price.
"valutazione" Il valore Rating.average_rating.
"ratingCount" L'elemento 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.
"inventario(id_luogo,prezzo)" Il prezzo dell'inventario.
"inventory(place_id,original_price)" Il prezzo dell'inventario originale.
"inventory(place_id,attributes.key)" L'attributo personalizzato numerico nello spazio pubblicitario.

Sono consentite al massimo 10 connessioni o disgiunzioni nidificate.

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

scenario filtro
non è un accessorio Pixel "NON categorie: QUALSIASI(\"Pixel > accessori in evidenza\")"
"più economico di 100 dollari" "prezzo: IN(*, 100.0e)"
"Speaker Nest a un prezzo inferiore a 80 dollari" "(categories: any(\"Nest > speaker and display\")) AND (price: IN(80.0i, *))"

Ordine

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 seguente tabella.

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

Per impostazione predefinita, l'ordine è crescente. L'ordine decrescente può essere specificato tramite "desc" come "descrizione valutazione".

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 l'ordinamento in 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 articoli con valori uguali per i campi con priorità più alta. Ad esempio, "rating desc, price" ordina gli articoli con la stessa valutazione in base al prezzo.