검색결과 가져오기

이 페이지에서는 텍스트 쿼리 검색, 탐색 검색, 페이지로 나누기, 최적화, 맞춤형 결과 등 검색을 사용한 기본 쿼리를 설명합니다.

최종 사용자의 맞춤설정된 결과를 캐시하지 않고 다른 최종 사용자에게 맞춤설정된 결과를 반환하지 않습니다.

관련성은 일치와 다릅니다. 일치란 색인에서 사용자의 검색어와 일치하는 후보 제품을 찾는 것입니다. 반면 관련성은 일치 정도입니다. 사용자의 의도와 필요를 가장 잘 충족하는 방식으로 제품을 순위 지정하는 것이 여기에 포함됩니다. 소매업을 위한 Vertex AI Search는 소매업체의 니즈를 충족하는 사용자의 전반적인 검색 환경을 개선하기 위해 일치 및 관련성을 개선하는 기법을 사용합니다.

소매업용 Vertex AI Search는 기본적으로 검색 관련성에 따라 순서가 지정됩니다. 하지만 소매업체가 사용자 이벤트의 전환 가능성을 높이기 위해 더 타겟팅된 검색 결과를 제공할 수 있도록 검색 결과에서 관련성이 약간 떨어지는 항목도 상단에 표시되도록 검색이 조정됩니다.

이러한 추가 검색 기능은 기본 관련성 알고리즘을 최적화하여 다음과 같이 각 소매업체의 사용량 프로필에 맞게 조정된 비기본 기능을 제공합니다.

  • 가격, 평점, 베스트셀러 등 결과를 정렬하는 옵션 기본이 아닌 검색은 올바른 제품 옵션이 포함된 특정 검색 결과를 반환하도록 맞춤설정됩니다. 예를 들어 가격순으로 정렬할 때 가장 저렴하거나 가장 비싼 옵션을 표시할 수 있습니다.

  • 기본이 아닌 사용자 이벤트에 더 엄격한 관련성 필터를 자동으로 적용합니다.

  • 조정 가능한 강도 부스트/하강 컨트롤을 사용 설정하여 검색 결과를 미세 조정합니다.

검색은 텍스트 쿼리 검색과 탐색 검색 기능을 모두 제공합니다.

텍스트 쿼리 검색 사용 사례에서 쇼핑객이 사이트에 텍스트 기반 쿼리를 입력할 수 있습니다. 검색은 관련성과 수익 극대화를 기준으로 정렬되어 설정된 컨트롤의 매개변수에 맞는 제품이 포함된 검색 응답을 반환합니다.

탐색 사용 사례에서 쇼핑객은 사이트 메뉴로 이동하여 특정 제품 카테고리를 탐색할 수 있습니다. 검색은 사용자 행동과 트렌드로부터 학습하여 수익을 가장 극대화하는 정렬 순서를 자동으로 선택합니다. 설정한 컨트롤로 탐색 결과를 더욱 세분화할 수 있습니다.

텍스트 검색 및 탐색 검색 요청 모두 servingConfigs.search 메서드를 사용합니다.

텍스트 쿼리 검색

사용자가 사이트에 검색할 텍스트 쿼리를 입력하면 검색에서 관련성, 인기도, 구매 가능성, 맞춤설정을 기준으로 가능한 검색 결과를 정렬합니다.

비어 있지 않은 query 필드가 있으면 검색에서 servingConfigs.search 요청을 텍스트 기반 검색 요청으로 간주합니다.

사용자 이벤트를 업로드할 때 검색을 통해 생성된 텍스트 쿼리 검색 이벤트를 search 사용자 이벤트로 전송합니다. 이벤트에 비어 있지 않은 userEvent.searchQuery 필드와 빈 userEvent.pageCategories 필드가 있으면 검색은 텍스트 기반 검색 이벤트로 간주합니다.

탐색 검색

탐색은 사이트 탐색을 사용하여 관련성이 동일한 검색 결과를 잘 팔리는 항목 순으로 정렬하여 표시합니다. 검색은 AI를 활용하여 탐색 결과가 인기도, 구매 가능성, 맞춤설정을 기준으로 정렬되는 방법을 최적화합니다.

빈 검색어 필드와 비어 있지 않은 page_categories 필드가 있는 요청 및 이벤트를 게재하면 탐색 요청 및 사용자 이벤트로 간주됩니다. page_categories 필드는 둘러보기 페이지 자체를 지정합니다. servingConfigs.search 메서드가 요청을 보낼 때 query 필드가 비어 있으면 검색에서 탐색 검색 요청으로 간주합니다. 이 경우 결과는 filterpageCategories 필드, 가능한 경우 추가 최적화 및 맞춤설정을 기반으로 합니다.

올바른 탐색 검색 결과를 얻으려면 다음 사항을 고려하세요.

  • 검색 요청의 pageCategoriesfilter 값이 업로드된 사용자 이벤트의 pageCategoriesfilter 값과 정확하게 일치해야 합니다. 업로드된 사용자 이벤트의 filter 값입니다. 요청의 매개변수가 이벤트의 매개변수와 일치하지 않으면 이벤트에서 학습된 클릭 기반 재랭킹 모델이 이 특정 검색어에 대해 잘 작동하지 않으며 결과 품질에 부정적인 영향을 미칩니다.

  • userEvent.searchQuery 필드와 비어 있지 않은 userEvent.pageCategories 필드가 있으면 소매업용 Vertex AI Search에서 search 사용자 이벤트를 탐색 기반 이벤트로 분류합니다. 따라서 소매업용 Vertex AI Search에서 생성된 탐색 이벤트를 업로드할 때 search 사용자 이벤트로 전송해야 합니다.

  • 둘러보기 필터는 유효해야 하며 각 둘러보기 검색어에 대해 사용자가 둘러보고 있는 제품 카테고리에 속하는 제품을 표시해야 합니다. 이 설정을 사용하려면 카테고리 ID가 filter 필드와 page_category 필드 모두에 정의되어야 합니다. 예를 들어 검색 결과를 홈/원예 용품으로 타겟팅하려는 경우를 생각해 보세요. 첫째, filter 값이 "in-stock" 하나만 있으면 최적의 탐색 결과를 제공하기에 충분히 검색이 세분되지 않습니다. 홈/원예로 제한된 검색 결과를 제공하려면 페이지 카테고리에서 "Home \& Garden"를 설정할 뿐만 아니라 필터에서 categories: ANY("Home & Garden")를 설정해야 합니다. 필터 부분에서 카테고리를 정의하지 않으면 둘러보기 결과가 너무 광범위해져 가정/원예 외의 상품이 많이 포함될 수 있습니다.

다음 예와 같이 둘 다에서 카테고리를 설정할 수 있습니다.

JSON

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

그렇지 않으면 탐색이 빈 문자열 쿼리로 작동하므로 특정 카테고리의 제품이 특정 페이지 카테고리의 결과에 자동으로 표시되지 않습니다. 즉, 최종 사용자가 텍스트 쿼리를 사용하여 아무것도 지정하지 않고 탐색하는 경우 사용자가 카테고리 페이지로 이동하더라도 검색 결과가 효과적으로 타겟팅된 결과를 반환하지 않을 수 있습니다.

검색 요청을 사용하여 텍스트 검색 및 검색 결과탐색 결과를 가져옵니다. 검색 요청을 수행하려면 servingConfigs.search 메서드를 사용합니다.

모든 검색 요청에는 사용될 서빙 구성의 전체 리소스 이름을 식별하는 placement가 필요합니다. 서빙 구성은 검색결과에 영향을 주는 설정 및 연결된 컨트롤을 결정합니다.

텍스트 쿼리 검색 요청에는 비어 있지 않은 query 필드가 필요합니다.

탐색 검색 요청에는 비어 있지 않은 pageCategories 필드가 필요합니다.

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

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

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

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

쿼리 튜토리얼

이 튜토리얼에서는 텍스트 기반 검색어를 소매업용 Vertex AI Search 서비스에 보내고 응답을 분석하는 방법을 보여줍니다.


Cloud Shell 편집기에서 이 태스크의 단계별 안내를 직접 수행하려면 둘러보기를 클릭합니다.

둘러보기


페이지로 나누기

페이지로 나누기를 사용하여 조회 시간과 전송되는 응답 크기를 줄입니다.

페이지로 나누기 튜토리얼

이 튜토리얼에서는 텍스트 기반 검색 요청에서 페이지로 나누기를 제어하는 방법을 보여줍니다. 쇼핑객이 매장에서 제품을 찾을 때 검색 결과를 통해 탐색을 향상시킬 수 있습니다. 예를 들어 페이지 크기 기능을 사용하여 검색 응답의 항목 수를 제한하거나 오프셋 기능을 사용하여 원하는 페이지로 이동할 수 있습니다.


Cloud Shell 편집기에서 이 태스크의 단계별 안내를 직접 수행하려면 둘러보기를 클릭합니다.

둘러보기


페이지로 나누기

한 페이지에서 다른 페이지로 이동하려면 사용 사례에 따라 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으로 설정합니다.

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

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

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

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

예를 들어 페이지 크기가 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
}

검색 성능 등급

검색에서는 결과를 지속적으로 개선하는 여러 검색 성능 등급을 제공합니다. 예를 들어 텍스트 쿼리 검색 사용 사례의 경우 관련성만으로 결과를 가져올 수 있습니다. 고급 성능 등급을 잠금 해제하면 검색에서 관련성, 인기도, 수익 최적화, 맞춤설정을 기준으로 결과를 반환할 수 있습니다.

검색은 각 등급의 최소 요구사항을 충족하는 카탈로그와 사용자 이벤트 데이터를 업로드할 때 자동으로 더 높은 성능 등급을 잠금 해제합니다.

Search for Retail 콘솔의 데이터 품질 페이지에서는 각 등급에 맞는 요구사항을 평가합니다. 이 페이지를 사용하여 데이터 품질과 검색 성능 등급을 보는 방법에 대한 자세한 내용은 검색 성능 등급 잠금 해제를 참조하세요.

텍스트 검색 및 탐색 결과 평가

웹사이트 코드를 업데이트하여 텍스트 검색 또는 탐색 검색을 요청하기 전에 결과를 미리 보고 서빙 구성이 예상대로 작동하는지 확인할 수 있습니다.

서빙 구성에 대한 자세한 내용은 서빙 구성 정보를 참조하세요.

평가 페이지에서 또는 콘솔에서 서빙 구성의 세부정보 페이지로 이동한 후 평가 탭을 클릭하여 서빙 구성을 미리 볼 수 있습니다. 다음 단계는 평가 페이지에서 미리 보는 방법을 보여줍니다.

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

  1. Search for Retail 콘솔에서 평가 페이지로 이동합니다.

    평가 페이지로 이동

  2. 검색 탭을 클릭합니다.

  3. 미리 보려는 서빙 구성을 선택합니다.

  4. 미리 보려는 카탈로그가 포함된 카탈로그 브랜치를 선택합니다.

  5. 선택사항: 방문자 ID를 입력하여 해당 사용자의 검색결과를 미리 봅니다.

  6. 선택사항: 사용자 ID를 입력하여 해당 사용자의 검색결과를 미리 봅니다.

  7. 선택사항: 지정된 시간에 표시될 검색결과를 미리 보려면 검색 시간을 입력합니다.

    예를 들어 특정 제품을 블랙 프라이데이에 홍보한 경우 그날 표시될 결과를 볼 수 있습니다.

  8. 선택사항: 검색결과 옆에 표시할 패싯을 선택하고 확인을 클릭하여 적용합니다.

    선택한 패싯은 초기 검색을 수행한 후 패싯 추가 아래에 표시되는 패싯 필터 목록을 생성하는 데 사용됩니다. 이러한 패싯 필터는 이 단계에서 선택하지 않은 패싯(예: 동적 패싯)을 포함할 수 있습니다.

  9. 텍스트 기반 검색어를 입력하여 해당 쿼리의 검색 결과를 미리 봅니다.

  10. 미리보기 검색을 클릭하거나 입력 필드에 Enter 키를 눌러 결과를 확인합니다.

    검색결과가 사용 가능한 미리보기 이미지와 함께 표시됩니다.

    검색이 리디렉션 컨트롤을 트리거하면 리디렉션 URI가 표시되는 알림이 나타납니다.

  11. 선택사항: 그리드 아이콘이나 목록 아이콘을 클릭하여 검색결과가 미리보기에 표시되는 방식을 전환합니다.

  12. 선택사항: 결과와 함께 표시할 패싯을 선택한 경우 패싯 목록에서 패싯 값을 하나 이상 선택하여 해당 값을 기준으로 결과를 필터링합니다. 선택 시 결과가 자동으로 업데이트됩니다.

    동일한 패싯의 여러 값을 선택하면 OR 연산자로 적용되고, 서로 다른 패싯의 여러 값을 선택하면 AND 연산자로 적용됩니다. 예를 들어 색상 패싯과 '파란색' 및 '금색' 값, 소재 값 '면' 및 '폴리에스터'를 선택한 경우 검색결과에는 '파란색' 또는 '금색'이 속성으로 있어야 하며 동시에 '면' 또는 '폴리에스터' 속성도 있어야 합니다.

찾아보기

  1. Search for Retail 콘솔에서 평가 페이지로 이동합니다.

    평가 페이지로 이동

  2. 탐색 탭을 클릭합니다.

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

  2. 미리 보려는 카탈로그가 포함된 카탈로그 브랜치를 선택합니다.

  3. 선택사항: 방문자 ID를 입력하여 해당 사용자의 결과를 미리 봅니다.

  4. 선택사항: 사용자 ID를 입력하여 해당 사용자의 결과를 미리 봅니다.

  5. 특정 필터가 추가된 결과를 미리 보려면 필터 문자열을 입력합니다. 필터 문서에 나온 필터 표현식 구문을 사용합니다.

  6. 선택사항: 지정된 시간에 표시될 결과를 미리 보려면 탐색 시간을 입력합니다.

    예를 들어 특정 제품을 연말연시 할인 이벤트에 홍보한 경우 그날 표시될 결과를 볼 수 있습니다.

  7. 탐색 결과를 테스트할 페이지 카테고리를 입력합니다.

  8. 선택사항: 결과 옆에 표시할 패싯을 선택하고 확인을 클릭하여 적용합니다.

    선택한 패싯은 초기 검색을 수행한 후 패싯 추가 아래에 표시되는 패싯 필터 목록을 생성하는 데 사용됩니다. 이러한 패싯 필터는 이 단계에서 선택하지 않은 패싯(예: 동적 패싯)을 포함할 수 있습니다.

  9. 미리보기 탐색을 클릭하거나 입력 필드에 Enter 키를 눌러 결과를 확인합니다.

    결과가 사용 가능한 미리보기 이미지와 함께 표시됩니다.

  10. 선택사항: 그리드 아이콘이나 목록 아이콘을 클릭하여 결과가 미리보기에 표시되는 방식을 전환합니다.

  11. 선택사항: 결과와 함께 표시할 패싯을 선택한 경우 패싯 목록에서 패싯 값을 하나 이상 선택하여 해당 값을 기준으로 결과를 필터링합니다. 선택 시 결과가 자동으로 업데이트됩니다.

    동일한 패싯의 여러 값을 선택하면 OR 연산자로 적용되고, 서로 다른 패싯의 여러 값을 선택하면 AND 연산자로 적용됩니다. 예를 들어 색상소재 패싯을 선택한 후 색상 값 '파란색'과 '금색' 색상 값을 선택하고 '면' 및 '폴리에스터' 소재 값을 선택하여 검색 결과를 필터링할 수 있습니다. 검색결과에는 '파란색' 또는 '금색'이 속성으로 있어야 하며 동시에 '면' 또는 '폴리에스터' 속성도 있어야 합니다.

미리 보는 서빙 구성의 세부정보 페이지를 보려면 서빙 구성 선택 필드에서 서빙 구성 보기를 클릭합니다.