Memfilter dan mengurutkan hasil

Halaman ini menjelaskan pemfilteran dan pengurutan dengan penelusuran.

Tutorial pemfilteran

Tutorial ini menunjukkan fitur pemfilteran. Dengan begitu, Anda dapat menyesuaikan permintaan penelusuran sesuai dengan kebutuhan Anda atau pelanggan. Anda dapat memfilter berdasarkan satu atau beberapa kolom, memfilter berdasarkan kolom teks atau numerik, atau keduanya. Anda dapat menggunakan bahasa ekspresi untuk membuat predikat untuk setiap kolom atau menggabungkan ekspresi yang berbeda menggunakan operator logika. Misalnya, pembeli yang mencari sepatu dapat menggunakan filter untuk mempersempit penelusurannya ke merek dan warna yang diinginkan.


Untuk mengikuti panduan langkah demi langkah tugas ini langsung di Cloud Shell Editor, klik Pandu saya:

Pandu saya


Tutorial pemesanan

Tutorial ini menunjukkan cara mengurutkan item dalam respons penelusuran. Saat pengguna akhir mencari produk di situs Anda, mereka akan melihat hasil yang diurutkan menurut beberapa kolom. Misalnya, pengguna menelusuri gaun dengan harga dan diskon terbaik. Harga dan diskon adalah beberapa kolom di sini. Pengguna akan melihat gaun yang diurutkan berdasarkan harga, dan untuk gaun dengan harga yang sama, diurutkan berdasarkan diskon.


Untuk mengikuti panduan langkah demi langkah tugas ini langsung di Cloud Shell Editor, klik Pandu saya:

Pandu saya


Contoh set data

Halaman ini menggunakan set data berikut sebagai contoh. Hanya kolom yang diperlukan untuk contoh yang disertakan.

Filter

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);
  }
}

Sintaksis ekspresi filter dapat diringkas dengan EBNF berikut:

  # 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;

Kolom tekstual yang didukung dirangkum dalam tabel berikut.

kolom deskripsi
"productId" ID produk (segmen terakhir Product.name).
"brands" Product.brands.
"categories" Product.categories.
"genders" Audience.genders.
"ageGroups" Audience.age_groups.
"availability" Product.availability. Nilainya adalah salah satu dari "IN_STOCK", "OUT_OF_STOCK", PREORDER", "BACKORDER".
"colorFamilies" ColorInfo.color_families.
"colors" ColorInfo.colors.
"sizes" Product.sizes.
"materials" Product.materials.
"patterns" Product.patterns.
"conditions" Product.conditions.
"attributes.key" Atribut kustom tekstual dalam objek Produk. Kunci dapat berupa kunci apa pun dalam peta Product.attributes, jika nilai atribut bersifat tekstual.
"pickupInStore" FulfillmentInfo.place_ids untuk jenis "pickup-in-store".
"shipToStore" FulfillmentInfo.place_ids untuk jenis "ship-to-store".
"sameDayDelivery" FulfillmentInfo.place_ids untuk jenis "same-day-delivery".
"nextDayDelivery" FulfillmentInfo.place_ids untuk jenis "next-day-delivery".
"customFulfillment1" FulfillmentInfo.place_ids untuk jenis "custom-type-1".
"customFulfillment2" FulfillmentInfo.place_ids untuk jenis "custom-type-2".
"customFulfillment3" FulfillmentInfo.place_ids untuk jenis "custom-type-3".
"customFulfillment4" FulfillmentInfo.place_ids untuk jenis "custom-type-4".
"customFulfillment5" FulfillmentInfo.place_ids untuk jenis "custom-type-5".
"inventory(place_id,attributes.key)" Atribut kustom tekstual di Inventaris.

Kolom numerik yang didukung diringkas dalam tabel berikut.

kolom deskripsi
"price" PriceInfo.price.
"diskon" Diskon. Dihitung dengan (original_price - price) / original_price.
"rating" Rating.average_rating.
"ratingCount" Rating.rating_count.
"attributes.key" Atribut kustom numerik dalam objek Produk. Kunci dapat berupa kunci apa pun dalam peta Product.attributes, jika nilai atribut bersifat numerik.
"inventory(place_id,price)" Harga inventaris.
"inventory(place_id,original_price)" Harga inventaris asli.
"inventory(place_id,attributes.key)" Atribut kustom numerik di Inventaris.

Maksimal 10 konjungsi atau disjungsi bertingkat diizinkan.

Misalnya, untuk menelusuri produk Google dalam situasi berikut, Anda dapat menetapkan query sebagai "Google" dan menetapkan filter sebagai nilai yang ditampilkan dalam tabel berikut:

skenario filter
bukan aksesori Pixel "KATEGORI BUKAN: APA SAJA(\"Pixel > aksesori unggulan\")"
"cheaper than 100 dollars" "price: IN(*, 100.0e)"
"Speaker Nest tidak lebih murah dari 80 dolar" "(categories: ANY(\"Nest > speakers and displays\")) AND (price: IN(80.0i, *))"

Order

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);
  }
}

Kolom yang dapat diurutkan yang didukung diringkas dalam tabel berikut.

kolom deskripsi
"productId" ID produk (segmen terakhir Product.name).
"title" Product.title.
"brands" Product.brands.
"categories" Product.categories.
"genders" Audience.genders.
"ageGroups" Audience.age_groups.
"price" PriceInfo.price.
"diskon" Diskon. Dihitung dengan (original_price - price) / price.
"rating" Rating.average_rating.
"ratingCount" Rating.rating_count.
"attributes.key" Atribut kustom dalam objek Produk. Kunci dapat berupa kunci apa pun dalam peta Product.attributes.
"inventory(place_id,price)" Harga inventaris.
"inventory(place_id,original_price)" Harga inventaris asli.
"inventory(place_id,attributes.key)" Atribut kustom numerik atau tekstual di Inventaris.

Secara default, urutan adalah menaik. Urutan menurun dapat ditentukan dengan akhiran "desc", seperti, "rating desc".

Untuk kolom numerik dengan beberapa nilai, misalnya, kolom berulang atau kolom yang ditetapkan untuk produk varian, nilai minimum digunakan untuk pengurutan menurut urutan menaik dan nilai maksimum digunakan untuk pengurutan menurut urutan menurun.

Pengurutan menurut beberapa kolom didukung melalui penggunaan kolom yang dipisahkan koma dalam urutan prioritas. Kolom prioritas yang lebih rendah digunakan untuk mengurutkan item dengan nilai yang sama untuk kolom prioritas yang lebih tinggi. Misalnya, "rating desc, price" mengurutkan item dengan rating yang sama berdasarkan harga.