이 문서는 Recommendations AI, Retail Search, 새로운 Retail 콘솔에 대한 문서입니다. 제한된 GA 단계에서 Retail Search를 사용하려면 Cloud 영업팀에 문의하세요.

Recommendations AI만 사용하는 경우 Recommendations 콘솔에서 Recommendations AI 문서를 참조하세요.

쿼리 및 페이지로 나누기

이 페이지에서는 Retail 검색을 사용한 기본 쿼리와 페이지 나누기 사용에 대해 설명합니다.

검색 미리보기

검색결과를 요청하기 위해 웹사이트 코드를 업데이트하기 전에 검색 미리보기를 사용하여 모델이 예상대로 작동하는지 확인할 수 있습니다.

Retail 검색을 위한 먼저 제공 구성을 만들었는지 확인합니다.

제공 구성에 의해 반환된 검색결과를 미리 보려면 다음 단계를 따르세요.

  1. Google Cloud Console의 Retail 평가 페이지로 이동합니다.

    평가 페이지로 이동

  2. 미리 보려는 제공 구성을 선택합니다.

  3. 특정 검색어에 대한 검색결과를 미리 보려면 검색어 및 방문자 ID를 입력합니다.

  4. 검색 미리보기를 클릭하여 검색결과를 확인합니다.

쿼리

검색 요청의 최소 버전은 placementquery가 필요합니다.

자바

public static SearchResponse searchProducts(String query) throws IOException, InterruptedException {
  SearchServiceClient searchClient = getSearchServiceClient();

  SearchRequest searchRequest = SearchRequest.newBuilder()
      .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
      .setBranch(DEFAULT_BRANCH_NAME)
      .setVisitorId(VISITOR_ID)
      .setQuery(query)
      .build();

  SearchResponse response = searchClient.search(searchRequest).getPage().getResponse();

  searchClient.shutdownNow();
  searchClient.awaitTermination(2, TimeUnit.SECONDS);

  return response;
}

Python

def search_products(query: str):
    search_request = SearchRequest()
    search_request.placement = default_search_placement
    search_request.branch = default_catalog
    search_request.query = query
    search_request.filter = build_isolation_filter(test_id)
    search_request.visitor_id = visitor_id

    print(search_request)

    return get_search_service_client().search(search_request)

기본적으로 관련성에 따라 적당한 수의 결과가 반환됩니다.

검색 응답으로 반환된 제품 속성을 가져오려면 카탈로그 데이터를 가져올 때 속성 값을 제공해야 합니다. Product에는 값을 제공할 수 있는 브랜드, 색상, 크기와 같은 사전 정의된 시스템 속성이 있습니다. Product.attributes로 정의하는 커스텀 속성을 포함할 수도 있습니다.

페이지 나누기

페이지로 나누기를 사용하여 유선으로 전송되는 응답의 조회 시간과 크기를 줄일 수 있습니다.

한 페이지에서 다른 페이지로 이동하려면 사용 사례에 따라 page_token 또는 offset을 사용합니다.

다음 페이지로 이동하려면 page_token을 사용하면 됩니다. 예를 들어 다음 SearchRequest를 전송한다고 가정합니다.

JSON

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

SearchResponse에서 next_page_token과 함께 상위 5개의 관련성이 있는 제품을 가져올 수 있습니다.

JSON

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

다음 5개 관련성(6~10번째)이 포함된 결과 제품을 얻으려면 동일한 placement, visitor_id, query를 사용하여 page_token을 이전 SearchResponsenext_page_token으로 설정합니다.

자바

public static SearchResponse searchProducts_withNextPageToken(String query, int pageSize)
    throws IOException, InterruptedException {
  SearchServiceClient searchClient = getSearchServiceClient();

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

  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 response = searchClient.search(secondRequest).getPage().getResponse();

  searchClient.shutdownNow();
  searchClient.awaitTermination(2, TimeUnit.SECONDS);

  return response;
}

이 예시에서 SearchRequest는 다음과 같습니다.

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으로 특정 위치로 바로 이동할 수 있습니다.

자바

public static SearchResponse searchProducts_withOffset(String query, int pageSize,
    int offset) throws IOException, InterruptedException {
  SearchServiceClient searchClient = getSearchServiceClient();

  SearchRequest searchRequest = SearchRequest.newBuilder()
      .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
      .setBranch(DEFAULT_BRANCH_NAME)
      .setVisitorId(VISITOR_ID)
      .setQuery(query)
      .setPageSize(pageSize)
      .setOffset(offset)
      .build();

  SearchResponse response = searchClient.search(searchRequest).getPage().getResponse();

  searchClient.shutdownNow();
  searchClient.awaitTermination(2, TimeUnit.SECONDS);

  return response;
}

Python

def search_products_with_offset(query: str, _offset: int, page_size=10):
    search_request = SearchRequest()
    search_request.placement = default_search_placement
    search_request.branch = default_catalog
    search_request.query = query
    search_request.filter = build_isolation_filter(test_id)
    search_request.page_size = page_size
    search_request.offset = _offset
    search_request.visitor_id = visitor_id

    print(search_request)

    return get_search_service_client().search(search_request)

예를 들어 페이지 크기가 5일 때 결과의 10번째 페이지를 원하는 경우 offset을 45로 설정할 수 있으며, 이 값은 (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
}