Mendapatkan hasil penelusuran

Halaman ini menjelaskan pembuatan kueri dasar dengan penelusuran, termasuk penelusuran kueri teks, penelusuran jelajah, penomoran halaman, pengoptimalan, dan hasil yang dipersonalisasi.

ID sesi pengguna unik

Kolom string visitor_id yang wajib diisi digunakan untuk mengidentifikasi pengguna secara unik di satu perangkat. ID ini berfungsi sebagai ID sesi persisten yang memungkinkan AI Commerce Search melacak perilaku pengguna tertentu di sepanjang perjalanan belanjanya.

AI Commerce Search menggunakan histori yang terkait dengan visitor_id tertentu untuk melatih model dan menyajikan hasil penelusuran yang dipersonalisasi. Sistem akan menghasilkan hasil secara dinamis berdasarkan visitor_id tertentu yang diberikan dalam permintaan. Misalnya, jika pengunjung sering melihat gaun hijau, model akan menggunakan visitor_id untuk mengenalinya nanti dan memprioritaskan item serupa di hasil penelusurannya. Oleh karena itu, ID pengunjung harus diformat secara identik di seluruh penyerapan (pelacakan) peristiwa pengguna dan permintaan penelusuran atau rekomendasi (penayangan).

Relevansi berbeda dengan pencocokan. Pencocokan adalah menemukan produk kandidat dalam indeks yang sesuai dengan kueri penelusuran pengguna. Di sisi lain, relevansi adalah tingkat kecocokan. Proses ini melibatkan pemeringkatan produk tersebut dengan cara yang paling sesuai dengan niat dan kebutuhan pengguna. AI Commerce Search menggunakan teknik untuk meningkatkan pencocokan dan relevansi demi pengalaman penelusuran yang lebih baik secara keseluruhan bagi pengguna yang memenuhi kebutuhan retailer.

Penelusuran ditetapkan secara default ke relevansi. Namun, beberapa produk yang tidak relevan dapat muncul di bagian bawah penelusuran default atau dalam permintaan penemuan produk eksplisit. Hal ini hanya akan terlihat saat Anda menetapkan orderBy, karena akan mengurangi ukuran hasil penelusuran secara umum. Ukuran perolehan menurun karena produk yang kurang relevan, yang sebelumnya ditampilkan di bagian bawah penelusuran default, difilter hingga tingkat tertentu. Baca bagian berikutnya untuk mengetahui cara menyesuaikan penelusuran.

AI Commerce Search secara default mengutamakan relevansi dalam penelusuran. Namun, penelusuran disesuaikan untuk juga menampilkan item yang sedikit relevan di posisi yang lebih tinggi dalam hasil penelusuran guna memberikan hasil penelusuran yang lebih bertarget kepada retailer untuk meningkatkan potensi konversi peristiwa pengguna.

Fitur penelusuran tambahan ini mengoptimalkan algoritma relevansi default, yang menyediakan fitur non-default yang disesuaikan dengan profil penggunaan setiap retailer, termasuk:

  • Opsi untuk mengurutkan hasil, seperti berdasarkan harga, rating tertinggi, atau item terlaris. Penelusuran non-default disesuaikan untuk menampilkan hasil penelusuran tertentu dengan varian produk yang benar. Misalnya, untuk menampilkan varian termurah atau termahal saat mengurutkan berdasarkan harga.

  • Penerapan otomatis filter relevansi yang lebih ketat untuk peristiwa pengguna non-default.

  • Mengaktifkan kontrol penguatan/penurunan kekuatan yang dapat disesuaikan untuk menyesuaikan hasil penelusuran.

Penelusuran menyediakan kemampuan penelusuran kueri teks dan penelusuran jelajah.

Dalam kasus penggunaan penelusuran kueri teks, pembeli dapat memasukkan kueri berbasis teks di situs Anda. Penelusuran menampilkan respons penelusuran yang berisi produk yang sesuai dengan parameter kontrol yang telah Anda siapkan, diurutkan berdasarkan relevansi dan maksimalisasi pendapatan.

Dalam kasus penggunaan penjelajahan, pembeli mungkin membuka menu situs Anda dan membuka kategori produk tertentu. Penelusuran secara otomatis memilih tata urutan yang paling memaksimalkan pendapatan dengan mempelajari perilaku dan tren pengguna. Hasil penjelajahan dapat disaring lebih lanjut dengan kontrol yang telah Anda siapkan.

Permintaan penelusuran teks dan penelusuran jelajah menggunakan metode servingConfigs.search.

Penelusuran kueri teks

Saat pengguna memasukkan kueri teks untuk melakukan penelusuran di situs Anda, penelusuran akan mengurutkan hasil penelusuran potensial berdasarkan relevansi, popularitas, kemampuan untuk dibeli, dan personalisasi.

Penelusuran menganggap permintaan servingConfigs.search sebagai permintaan penelusuran berbasis teks jika memiliki kolom query yang tidak kosong.

Saat mengupload peristiwa pengguna, kirim peristiwa penelusuran kueri teks yang dihasilkan oleh penelusuran sebagai peristiwa pengguna search. Jika peristiwa memiliki kolom userEvent.searchQuery yang tidak kosong dan kolom userEvent.pageCategories yang kosong, penelusuran akan menganggapnya sebagai peristiwa penelusuran berbasis teks.

Cara memproses kueri dan parameter teks

Kueri standar menjalani analisis linguistik, yang menghapus tanda baca standar. String filter sangat peka huruf besar/kecil. Memahami cara memproses kueri dan parameter teks sangat penting untuk membuat permintaan API di AI Commerce Search dengan benar.

  • Tokenisasi dan tanda baca kueri: Teks bahasa alami yang diteruskan ke kolom query akan menjalani analisis linguistik dan koreksi ejaan otomatis. Selama proses ini, tanda baca standar (seperti koma, titik, +, atau -) sering kali dihapus atau diabaikan untuk mengoptimalkan natural language understanding.
  • Istilah kueri tunggal dan jamak: AI Commerce Search mengevaluasi kueri tunggal dan jamak secara terpisah berdasarkan niat pengguna akhir dan engagement pengguna historis, seperti klik dan pembelian. Pembeli sering kali mengklik atau membeli produk yang berbeda untuk istilah tunggal dan jamak, seperti kaus untuk satu kaus versus kaus untuk multipak. Akibatnya, kueri tunggal dan jamak dapat menampilkan hasil penelusuran, peringkat, dan faset dinamis yang berbeda. Jika satu bentuk kueri hanya cocok dengan beberapa produk, perluasan kueri juga dapat memperluas hasil untuk kueri tersebut. Untuk memperluas istilah tunggal, jamak, atau infleksi dalam bahasa katalog Anda agar menyertakan kandidat satu sama lain, konfigurasikan kontrol sinonim dua arah.
  • Kepekaan huruf besar/kecil yang ketat dalam parameter: Meskipun kueri teks standar umumnya tidak peka huruf besar/kecil, parameter terprogram sangat peka huruf besar/kecil.
    • Filter: Ekspresi filter dan nilai string literalnya sepenuhnya peka huruf besar/kecil.
    • Pengurutan: Ekspresi orderBy peka huruf besar/kecil. Jika Anda mengurutkan berdasarkan kolom seperti products.title, mesin akan mengurutkan Apple sebelum banana sebelum artichoke. Solusinya adalah mengupload judul produk dalam huruf besar semua ke atribut kustom terpisah (seperti attributes.title_upper) dan mengurutkan atribut tersebut untuk mendapatkan pengurutan yang tidak peka huruf besar/kecil.
  • Karakter khusus yang dicadangkan:
    • Karakter > hanya digunakan sebagai pembatas untuk hierarki kategori (seperti Categories > Shoes). Jika > muncul secara alami dalam nama kategori, Anda harus menggantinya dengan karakter lain sebelum penyerapan dan pembuatan kueri.
    • Karakter / tidak didukung dalam nilai tekstual dalam ekspresi filter rekomendasi.

Menjelajahi penelusuran

Penjelajahan menggunakan navigasi situs untuk menghasilkan hasil penelusuran dengan relevansi yang sama yang diurutkan berdasarkan item terlaris. Penelusuran memanfaatkan AI untuk mengoptimalkan cara pengurutan hasil penjelajahan dengan mempertimbangkan popularitas, kemungkinan pembelian, dan personalisasi.

Untuk mendapatkan hasil penelusuran jelajah yang benar, pertimbangkan hal berikut:

  • Nilai pageCategories dan filter dalam permintaan penelusuran Anda harus sama persis dengan nilai pageCategories dan filter dalam peristiwa pengguna yang diupload. Jika parameter dalam permintaan tidak cocok dengan parameter dalam peristiwa, model pengurutan ulang berbasis klik yang dipelajari dari peristiwa tidak akan berperforma baik untuk kueri spesifik ini dan akan berdampak negatif pada kualitas hasil.

  • AI Commerce Search mengategorikan peristiwa pengguna search sebagai peristiwa berbasis penjelajahan jika memiliki kolom userEvent.searchQuery kosong dan kolom userEvent.pageCategories yang tidak kosong. Oleh karena itu, Anda harus memastikan bahwa Anda mengirim peristiwa penjelajahan yang dihasilkan oleh AI Commerce Search sebagai peristiwa pengguna search saat menguploadnya.

  • Filter jelajah harus valid dan menunjukkan produk yang termasuk dalam kategori produk yang dijelajahi pengguna untuk setiap kueri jelajah. Untuk melakukan penyiapan ini, ID kategori harus ditentukan di kolom filter dan page_category. Misalnya, jika Anda ingin hasil penelusuran ditargetkan ke Rumah & Taman. Pertama, hanya memiliki satu nilai filter dari "in-stock" tidak cukup menyaring penelusuran untuk memberikan hasil penjelajahan yang optimal. Untuk memberikan hasil penelusuran yang dibatasi untuk Rumah & Taman, Anda tidak hanya perlu menetapkan "Home \& Garden" dalam kategori halaman, tetapi juga dalam filter dengan categories: ANY("Home & Garden"). Jika Anda lupa menentukan kategori di bagian filter, hasil penjelajahan mungkin terlalu luas dan menyertakan banyak item non-Rumah & Taman.

Permintaan dan peristiwa penayangan dengan kolom kueri kosong dan kolom page_categories yang terisi dianggap sebagai permintaan penjelajahan dan peristiwa pengguna. Kolom page_categories menentukan halaman jelajah itu sendiri. Saat metode servingConfigs.search mengirim permintaan, penelusuran akan menganggapnya sebagai permintaan penelusuran jelajah jika kolom query kosong. Jika demikian, hasilnya didasarkan pada kolom filter dan pageCategories serta, jika tersedia, pengoptimalan dan personalisasi lebih lanjut.

Anda dapat menetapkan kategori di keduanya seperti dalam contoh ini:

JSON

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

Jika tidak, karena penjelajahan berfungsi dengan kueri string kosong, produk dalam kategori tertentu tidak akan otomatis ditampilkan dalam hasil untuk kategori halaman tertentu. Dengan kata lain, jika pengguna akhir menjelajah tanpa menentukan apa pun menggunakan kueri teks, hasil penelusuran mungkin tidak memberikan hasil yang ditargetkan secara efektif, meskipun pengguna membuka halaman kategori.

Menggunakan permintaan penelusuran

Gunakan permintaan penelusuran untuk mendapatkan hasil penelusuran teks dan penelusuran jelajah. Untuk membuat permintaan penelusuran, gunakan metode servingConfigs.search.

Semua permintaan penelusuran memerlukan placement, yang mengidentifikasi nama resource lengkap konfigurasi penayangan yang akan digunakan. Konfigurasi penayangan menentukan setelan dan kontrol terkait yang memengaruhi hasil penelusuran.

Permintaan penelusuran kueri teks memerlukan kolom query yang tidak kosong.

Permintaan penelusuran jelajah memerlukan kolom pageCategories yang tidak kosong.

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk AI Commerce Search, lihat library klien AI Commerce Search. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python AI Commerce Search.

Untuk melakukan autentikasi ke AI Commerce Search, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk AI Commerce Search, lihat library klien AI Commerce Search.

Untuk melakukan autentikasi ke AI Commerce Search, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

'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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk AI Commerce Search, lihat library klien AI Commerce Search. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java AI Commerce Search.

Untuk melakukan autentikasi ke AI Commerce Search, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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

Secara default, sejumlah hasil yang diurutkan berdasarkan relevansi akan ditampilkan.

Untuk mendapatkan atribut produk yang ditampilkan dengan respons penelusuran, pastikan untuk memberikan nilai atribut saat Anda mengimpor data katalog. Product memiliki atribut sistem yang telah ditetapkan seperti merek, warna, dan ukuran yang dapat Anda berikan nilainya. Anda juga dapat menyertakan atribut kustom yang Anda tentukan dengan Product.attributes.

Tutorial membuat kueri

Tutorial ini menunjukkan cara mengirim kueri penelusuran berbasis teks ke layanan AI Commerce Search dan menganalisis responsnya.

Memfilter hasil penelusuran menggunakan saran pelengkapan otomatis

Jika Anda telah menerapkan saran pelengkapan otomatis yang diperkaya di frontend (tempat pengguna dapat memilih kueri yang digabungkan dengan merek atau kategori tertentu), Anda harus menerjemahkan pilihan tersebut menjadi SearchRequest yang difilter.

Untuk menerapkannya, ekstrak saran teks dan tempatkan ke kolom query, lalu ekstrak atribut yang dipilih (seperti merek) dan format sebagai ekspresi di kolom filter.

Contoh permintaan penelusuran dari saran yang difilter

Jika pengguna mengklik saran shoe di Nike, susun SearchRequest Anda sebagai berikut:

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

Menambahkan jumlah produk ke faset saran

Untuk lebih meningkatkan pengalaman pemfilteran, Anda dapat menampilkan jumlah produk yang tersedia untuk setiap filter saran bahkan sebelum pengguna menjalankan penelusuran. Untuk menggunakan faset saran dengan jumlah produk, Anda harus menghubungi dukungan untuk mengaktifkan fitur ini. Jika diaktifkan, sertakan kunci faset tekstual tertentu di facetSpecs dari SearchRequest Anda selama minimal 7 hari agar sistem dapat menghitung jumlah produk berdasarkan data histori penelusuran Anda.

Penomoran halaman

Gunakan penomoran halaman untuk mengurangi waktu pencarian dan ukuran respons yang dikirim.

Tutorial penomoran halaman

Tutorial ini menunjukkan cara mengontrol penomoran halaman dalam permintaan penelusuran berbasis teks. Saat mencari produk di toko, pembeli dapat meningkatkan navigasi mereka melalui hasil penelusuran. Misalnya, mereka dapat membatasi jumlah item dalam respons penelusuran menggunakan fitur ukuran halaman atau melompat ke halaman yang diinginkan menggunakan fitur offset.

Memberi nomor halaman

Untuk beralih dari satu halaman ke halaman lain, gunakan page_token atau offset, sesuai dengan kasus penggunaan Anda.

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk AI Commerce Search, lihat library klien AI Commerce Search. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python AI Commerce Search.

Untuk melakukan autentikasi ke AI Commerce Search, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk AI Commerce Search, lihat library klien AI Commerce Search.

Untuk melakukan autentikasi ke AI Commerce Search, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Untuk mempelajari cara menginstal dan menggunakan library klien untuk AI Commerce Search, lihat library klien AI Commerce Search. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java AI Commerce Search.

Untuk melakukan autentikasi ke AI Commerce Search, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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:
    }
  }
}

Token halaman

Untuk beralih ke halaman berikutnya, Anda dapat menggunakan page_token. Misalnya, Anda mengirim SearchRequest berikut.

JSON

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

Dari SearchResponse, Anda bisa mendapatkan produk yang dihasilkan dengan 5 relevansi teratas, beserta next_page_token.

JSON

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

Untuk mendapatkan produk hasil dengan 5 relevansi berikutnya (ke-6 hingga ke-10), Anda harus menetapkan page_token menggunakan placement, visitor_id, dan query yang sama sebagai next_page_token dari SearchResponse sebelumnya.

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

Dalam contoh ini, SearchRequest terlihat seperti ini:

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"
}

Offset

Dalam beberapa kasus lain, alih-alih berpindah dari satu halaman ke halaman lain atau mendapatkan hasil dengan relevansi teratas, Anda dapat langsung beralih ke posisi tertentu dengan offset.

Misalnya, jika Anda menginginkan halaman kesepuluh dari hasil saat ukuran halaman adalah 5, Anda dapat menetapkan offset menjadi 45, yang dihitung dengan (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
}

Tingkat performa penelusuran

Penelusuran menawarkan beberapa tingkat performa penelusuran yang semakin meningkatkan hasil Anda. Misalnya, untuk kasus penggunaan penelusuran kueri teks, hasil mungkin hanya didasarkan pada relevansi. Saat Anda membuka tingkat performa yang lebih tinggi, penelusuran dapat menampilkan hasil yang didasarkan pada relevansi, popularitas, pengoptimalan pendapatan, dan personalisasi.

Penelusuran otomatis membuka tingkat performa yang lebih tinggi saat Anda mengupload data katalog dan peristiwa pengguna yang memenuhi persyaratan minimum setiap tingkat.

Untuk informasi selengkapnya tentang cara menggunakan halaman ini untuk melihat tingkat kualitas data dan performa penelusuran, lihat Memanfaatkan tingkat performa penelusuran. Halaman Kualitas data di konsol AI Commerce Search di Gemini Enterprise for Customer Experience memberikan penilaian tentang persyaratan yang telah Anda penuhi untuk setiap tingkat.

Mengevaluasi hasil penelusuran dan penjelajahan teks

Sebelum memperbarui kode situs untuk meminta hasil Text Search atau penelusuran jelajah, Anda dapat melihat pratinjau hasil untuk mengonfirmasi bahwa konfigurasi penayangan berfungsi seperti yang Anda harapkan.

Untuk mengetahui informasi selengkapnya tentang konfigurasi penayangan, lihat Tentang konfigurasi penayangan.

Anda dapat melihat pratinjau hasil konfigurasi penayangan dari halaman Evaluate, atau dengan membuka halaman Details konfigurasi penayangan di konsol, lalu mengklik tab Evaluate. Langkah-langkah berikut menunjukkan cara melihat pratinjau dari halaman Evaluate.

Untuk melihat pratinjau hasil yang ditampilkan oleh konfigurasi penayangan Anda:

  1. Buka halaman Evaluate di konsol AI Commerce Search di Gemini Enterprise for Customer Experience.

    Buka halaman Evaluate

  2. Klik tab Search.

  3. Pilih konfigurasi penayangan yang ingin Anda lihat pratinjaunya.

  4. Pilih cabang katalog yang berisi katalog yang ingin Anda lihat pratinjaunya.

  5. Opsional: Masukkan ID pengunjung untuk melihat pratinjau hasil penelusuran bagi pengguna tersebut.

  6. Opsional: Masukkan ID pengguna untuk melihat pratinjau hasil penelusuran bagi pengguna tersebut.

  7. Opsional: Masukkan waktu penelusuran untuk melihat pratinjau hasil penelusuran yang akan muncul pada waktu yang ditentukan.

    Misalnya, jika Anda telah mempromosikan produk tertentu untuk promo spesial, Anda dapat melihat hasil yang akan muncul pada hari tersebut.

  8. Opsional: Pilih faset yang akan ditampilkan bersama hasil penelusuran, lalu klik Oke untuk menerapkannya.

    Aspek yang Anda pilih digunakan untuk membuat daftar filter aspek yang muncul di bagian Add facets setelah Anda melakukan penelusuran awal. Filter faset ini dapat mencakup faset selain yang Anda pilih di langkah ini, seperti faset dinamis.

  9. Masukkan kueri penelusuran berbasis teks untuk melihat pratinjau hasil penelusuran untuk kueri tersebut.

  10. Klik Pratinjau penelusuran atau tekan enter di kolom input mana pun untuk melihat hasilnya.

    Hasil penelusuran ditampilkan dengan gambar thumbnail yang tersedia.

    Jika penelusuran Anda memicu kontrol pengalihan, pemberitahuan yang menampilkan URI pengalihan akan muncul.

  11. Opsional: Klik ikon Petak atau ikon Daftar untuk mengubah cara hasil penelusuran ditampilkan dalam pratinjau.

  12. Opsional: Jika Anda memilih faset untuk ditampilkan bersama hasil, pilih satu atau beberapa nilai faset dari daftar faset untuk memfilter hasil berdasarkan nilai tersebut. Hasilnya akan otomatis diperbarui setelah dipilih.

    Saat Anda memilih beberapa nilai dari faset yang sama, nilai tersebut akan diterapkan seperti operator OR, dan nilai di berbagai faset akan diterapkan seperti operator AND. Misalnya, setelah memilih faset color dan nilai "blue" dan "gold", serta nilai material "cotton" dan "polyester". Hasil penelusuran Anda harus memiliki "blue" atau "gold" sebagai atribut, dan juga harus memiliki "cotton" atau "polyester" sebagai atribut.

Jelajahi

  1. Buka halaman Evaluate di konsol AI Commerce Search di Gemini Enterprise for Customer Experience.

    Buka halaman Evaluate

  2. Klik tab Jelajahi.

  1. Pilih konfigurasi penayangan yang ingin Anda lihat pratinjaunya.

  2. Pilih cabang katalog yang berisi katalog yang ingin Anda lihat pratinjaunya.

  3. Opsional: Masukkan ID pengunjung untuk melihat pratinjau hasil bagi pengguna tersebut.

  4. Opsional: Masukkan ID pengguna untuk melihat pratinjau hasil bagi pengguna tersebut.

  5. Untuk melihat pratinjau tampilan hasil dengan filter tertentu yang ditambahkan, masukkan string filter. Gunakan sintaksis ekspresi filter yang ditentukan dalam dokumentasi Filter.

  6. Opsional: Masukkan waktu penjelajahan untuk melihat pratinjau hasil yang akan muncul pada waktu yang ditentukan.

    Misalnya, jika Anda telah mempromosikan produk tertentu untuk acara diskon puncak, Anda dapat melihat hasil yang akan muncul pada hari tersebut.

  7. Masukkan kategori halaman yang hasil penjelajahannya sedang Anda uji.

  8. Opsional: Pilih faset yang akan ditampilkan bersama hasil dan klik OK untuk menerapkannya.

    Aspek yang Anda pilih digunakan untuk membuat daftar filter aspek yang muncul di bagian Add facets setelah Anda melakukan penelusuran awal. Filter faset ini dapat mencakup faset selain yang Anda pilih di langkah ini, seperti faset dinamis.

  9. Klik Browse preview atau tekan enter di kolom input mana pun untuk melihat hasilnya.

    Hasil ditampilkan dengan gambar thumbnail yang tersedia.

  10. Opsional: Klik ikon Petak atau ikon Daftar untuk mengubah cara hasil ditampilkan dalam pratinjau.

  11. Opsional: Jika Anda memilih faset untuk ditampilkan bersama hasil, pilih satu atau beberapa nilai faset dari daftar faset untuk memfilter hasil berdasarkan nilai tersebut. Hasilnya akan otomatis diperbarui setelah dipilih.

    Saat Anda memilih beberapa nilai dari faset yang sama, nilai tersebut akan diterapkan seperti operator OR, dan nilai di berbagai faset akan diterapkan seperti operator AND. Misalnya, setelah memilih faset color dan material, Anda dapat memfilter hasil penelusuran dengan memilih nilai warna "blue" dan "gold", serta nilai bahan "cotton" dan "polyester". Hasil Anda harus memiliki "blue" atau "gold" sebagai atribut, dan juga harus memiliki "cotton" atau "polyester" sebagai atribut.

Untuk melihat halaman Details untuk konfigurasi penayangan yang Anda lihat pratinjaunya, klik View serving config di bagian kolom Select serving config.