검색어 확장

검색어 확장은 처음 검색결과가 없거나 너무 적을 때 더 많은 결과를 포함하도록 검색어 제약 조건을 점진적으로 완화하는 것입니다. 이렇게 하면 검색어당 결과 크기가 조정됩니다.

검색어와 관련된 문서가 없는 경우 검색어 확장은 검색결과가 0개로 반환되지 않도록 관련성이 낮은 문서를 반환합니다.

예를 들어 동적 패싯 또는 게재 제어와 달리 검색어 확장 은 콘솔에서 직접 구성할 수 없습니다. Google Cloud 대신 각 검색 요청에 대해 프로그래매틱 방식으로 검색어 확장을 구성해야 합니다. API에서 검색어 확장을 구성하는 방법을 알아보려면 계속 읽어보세요.

검색어 확장 튜토리얼

이 튜토리얼에서는 검색어 확장 기능을 사용 설정하는 방법을 보여줍니다. 쇼핑객이 모호하거나 여러 단어로 된 검색구문을 사용하면 빈 응답을 받을 수 있습니다. 쿼리 확장을 켜고 요청을 분석하면 파싱된 검색어에 따라 확장된 제품 목록이 반환됩니다.


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

둘러보기


검색어 확장 개요

검색어 확장은 검색 재현율을 개선하고 특히 롱테일 또는 복잡한 사용자 검색어의 경우 검색결과가 0개인 시나리오를 방지하도록 설계된 강력한 기능입니다.

검색어 확장은 제품 카탈로그에서 정확히 일치하는 항목을 찾을 수 없는 경우 결과를 반환하지 않는 대신 관련 제품 또는 대체 제품을 식별하고 표시합니다. 이렇게 하면 사용자 환경이 개선되고 전환율이 높아질 수 있습니다.

검색어 확장의 주요 사용 사례는 다음과 같습니다.

  • 롱테일 검색어: 당뇨병 환자를 위한 고단백 저지방 유기농 우유와 같이 매우 구체적인 검색의 경우 카탈로그에 완벽히 일치하는 항목이 없을 수 있습니다. 검색어 확장은 당뇨병 환자를 위한 우유, 고단백 우유의 속성 또는 속성 값으로 태그가 지정된 제품과 같이 인텐트의 일부와 일치하는 제품을 반환할 수 있습니다.
  • 대체 제품: 사용자가 카탈로그에 없는 브랜드 또는 제품(예: 스타벅스 커피 100ml)을 검색하는 경우 검색어 확장은 구매 가능한 대체 커피 브랜드를 제안하여 검색이 막히는 것을 방지할 수 있습니다.

다음 섹션에서는 정규 필터의 중요한 역할에 중점을 두고 AI Commerce Search의 검색어 확장 기능의 기능, 트리거 메커니즘, 구성의 미묘한 차이점을 설명합니다.

검색어 확장 트리거 메커니즘

검색어 확장 또는 지정된 검색어를 활성화할지 여부는 자동화되며 빠르게 구성 가능한 정규 필터 규칙을 기반으로 합니다.

  • 트리거 조건: 검색어 확장은 정규 필터 검색어로 초기 검색에서 제품 결과가 3개 미만인 경우에만 트리거됩니다.
  • 임계값: 이 기본 임계값 3은 변경할 수 있습니다. 대부분의 전자상거래 사용 사례에서 잘 작동하며 초기 결과 집합이 실제로 희소한 경우에만 검색어 확장이 활성화되도록 합니다.

API에서 검색어 확장 구성

검색어 확장은 다음과 같이 API를 사용하여 요청별로 프로그래매틱 방식으로 구성됩니다.

  • API 구성: SearchRequestqueryExpansionSpec 객체를 포함하여 검색어 확장을 제어합니다.

  • 설정: queryExpansionSpec 내에서 condition 필드를 AUTO로 설정하여 기능을 사용 설정하거나 DISABLED로 설정하여 기능을 사용 중지합니다. 이는 지정되지 않은 경우 기본값입니다.

  • 고정: 필요에 따라 요청에서 pinUnexpandedResultstrue로 설정하여 원래 검색어와 정확히 일치하는 항목이 검색결과 상단에 표시되고 그 뒤에 확장된 결과가 표시되도록 할 수 있습니다. 자세한 내용은 고정 페이지를 참고하세요.

정규 필터 구성

검색어 확장이 효과적으로 트리거되려면 검색 요청에서 canonical_filter를 올바르게 구성해야 합니다.

검색어 확장을 올바르게 구현하려면 검색 요청의 두 가지 기본 필터 매개변수(최상위 필터 및 정규 필터)를 이해하는 것이 중요합니다.

  • 최상위 필터 (filter): 이는 검색결과가 사용자에게 반환되기 전에 검색결과에 적용되는 기본 필터입니다. 두 가지 잠재적 레이어의 조합입니다.

    • 비즈니스/기본 필터: 사용자 입력 없이 모든 검색에 적용되는 사전 정의된 규칙(예: inStock=TRUE, category="groceries", storeId="XYZ")

    • 사용자가 선택한 패싯 필터: 사용자가 검색 인터페이스와 상호작용하는 동안 동적으로 적용되는 필터(예: brand="Adidas", size="L"의 패싯 필터 선택)

  • 정규 필터 (canonical_filter): 이는 검색어 확장 결정 모듈에서만 독점적으로 사용하는 특수 목적 필터입니다. 이 필터의 유일한 작업은 검색어 확장 트리거 조건 (결과 5개 미만)이 평가되는 카탈로그 뷰를 정의하는 것입니다.

핵심 정규 필터 함수

정규 필터는 자연적으로 낮은 검색결과와 사용자가 의도적으로 범위를 좁힌 결과 집합을 구분하도록 설계되었습니다. 사용자 시나리오에 따라 사용자 적용 필터를 고려하기 위해 비즈니스 로직을 제외하도록 넓히거나 필요할 때 검색어 확장을 트리거하도록 좁힐 수 있습니다.

시나리오 1

  • 사용자 여정: 사용자가 티셔츠를 검색하고 수천 개의 결과를 얻습니다. 예를 들어 재고가 있는 제품과 맞춤 스토어 수준 속성과 일치하는 제품만 필터링하는 기본 business_filter가 있습니다. 그런 다음 사용자가 brand="Adidas" 및 size="L"의 패싯 필터를 적용하여 결과 수를 2개로 줄입니다.
  • canonical_filter가 동일한 조건 filter을 포함하도록 설정된 경우(예: AVAILABILITY: IN_STOCK AND color: "Red": 검색어 확장 결정 시스템은 결과 2개만 확인하고 검색어 확장을 잘못 트리거하여 사용자에게 관련은 있지만 관련 없는 제품(예: Nike 티셔츠)을 제공하여 사용자의 명시적 필터링을 중단합니다.
  • 올바른 설정은 canonical_filter = business filter 입니다. 검색어 확장 결정은 사용자가 선택한 패싯을 제외하고 초기 검색어를 기반으로 이루어져야 합니다. 를 넓게 유지하면 시스템은 카탈로그에 일치하는 제품이 많다는 것을 올바르게 식별하여 확장을 강제하지 않고도 사용자의 엄격한 필터를 준수할 수 있습니다.canonical_filter

시나리오 2

  • 사용자 여정: 사용자가 검은색 그래픽 프린트가 있는 아디다스 티셔츠를 검색하면 결과가 하나 또는 두 개만 반환됩니다(있는 경우). 예를 들어 재고가 있는 제품과 맞춤 스토어 수준 속성과 일치하는 제품만 필터링하는 기본 business_filter가 있습니다.
  • canonical_filter가 설정되지 않았거나 올바르게 구성되지 않은 경우 정규 필터로 검색하면 검색어와 일치하지만 재고가 없거나 다른 스토어의 제품(즉, 맞춤 스토어 수준 속성의 다른 값)을 찾을 수 있습니다. 이 경우 검색어 확장이 트리거되지 않습니다.
  • 올바른 설정은 canonical_filter = business filter 입니다. 이 설정을 사용하면 검색어 확장 결정은 지정된 긴 검색어에 대해 3개 미만의 제품을 찾은 다음 검색어 확장을 트리거하고 관련 상품을 원래 검색어(즉, 스토어 수준 속성과 일치하는 재고 있음 제품)로 가져옵니다. 이렇게 하면 검색결과가 확장되어 다른 브랜드의 검은색 그래픽 프린트 티셔츠, 다른 색상의 그래픽 프린트 티셔츠 또는 검색된 브랜드의 다른 티셔츠 제품이 포함됩니다. 의 이 사용 사례에 비즈니스 제약 조건을 포함합니다.canonical_filter

검색어 확장 권장사항

정규 필터는 거의 항상 비즈니스 또는 기본 필터와 동일하게 설정해야 합니다. 이렇게 하면 검색어 확장 모듈이 사용자가 패싯을 적용하기 전에 처음에 보는 동일한 광범위한 카탈로그 뷰에 대해 검색어의 잠재력을 평가합니다.

엔드 투 엔드 검색 및 검색어 확장 프로세스 흐름

검색 요청이 이루어지면 여러 병렬 프로세스가 발생합니다.

  • 요청 수신: API는 검색어, 기본 filter, canonical_filter가 포함된 검색 요청을 수신합니다.

  • 검색어 확장 결정 검색: 검색어 확장 결정 모듈은 병렬로 정규 필터와 결합된 검색어를 사용하여 자체 내부 검색을 실행합니다.

  • 결과 수 확인: 모듈은 내부 검색에서 반환된 제품 수를 확인합니다.

    • 결과가 5개 이상인 경우: 검색어 확장이 트리거되지 않습니다. 표준 검색결과는 최종 필터링 단계로 진행됩니다.
    • 결과가 5개 미만인 경우: 검색어 확장이 트리거됩니다. 모델은 관련 제품을 찾기 위해 검색어를 체계적으로 완화합니다. 예를 들어 모델은 Pixel 5 휴대전화 , Pixel 4 휴대전화, Pixel 이어버드 또는 Samsung 휴대전화를 찾을 수 있습니다.
  1. 최종 필터링: 제품 집합 (원래 집합 또는 검색어 확장으로 확장된 집합)이 최종 단계로 전달됩니다. 이 경우 비즈니스 규칙과 사용자가 선택한 패싯이 포함된 최상위 필터가 엄격하게 적용됩니다.
  • 응답 전송: 최종 필터링된 제품 목록이 API 응답으로 반환됩니다.

선택적 검색어 확장 활성화의 고급 사용 사례

필터를 전략적으로 구성하여 카탈로그의 특정 부분에 대해 검색어 확장을 사용 설정하거나 사용 중지할 수 있습니다.

식료품, 전자 제품, 패션 의류가 포함된 대규모 카탈로그 시나리오를 고려해 보겠습니다. 이러한 시나리오에서는 다음 측면을 염두에 두어야 합니다.

목표

찾기 어렵거나 희소한 식료품 검색어에 대해 검색어 확장을 사용 설정하지만 전자 제품 또는 패션 상품에 대해서는 결과를 0개로 표시합니다. 여기서 비즈니스 요구사항은 식료품 부분에서만 검색어 확장을 선택적으로 사용 설정하는 것입니다.

구성

이 사용 사례 시나리오에서는 선택적 검색어 확장을 다음과 같이 구성할 수 있습니다.

  • canonical_filter: 넓게 설정합니다. 식료품, 전자 제품, 패션 등 모든 카테고리와 재고 가용성과 같은 기본 규칙을 포함해야 합니다. 정규 필터를 category="groceries" OR category="electronics" OR category="fashion") AND inStock=TRUE)로 정의합니다.
  • filter: 사용자 컨텍스트를 기반으로 좁게 설정합니다. 식료품 섹션의 사용자의 경우 필터는 category="groceries" AND inStock=TRUE입니다.

작동 방식

선택적 검색어 확장은 이 시나리오에서 다음과 같이 작동합니다.

  • 사용자가 'iPhone 20'을 검색합니다. 검색어 확장 모듈은 넓은 canonical_filter를 사용하고 기존 iPhone 모델(< 5개 결과)을 찾아 검색어 확장을 트리거하지 않기로 결정합니다. 그런 다음 표준 검색결과 (기존 iPhone)가 기본 필터로 전달되며, 기본 필터가 category="electronics"category="groceries"와 일치하지 않으므로 이를 차단합니다. 사용자에게 결과가 0개로 올바르게 표시됩니다.
  • 사용자가 *고단백 당뇨병 환자를 위한 우유* 를 검색합니다:* 검색어 확장 모듈은 넓은 canonical_filter를 사용하고 <5개의 결과를 찾아 관련 우유 제품을 찾아 검색어 확장을 트리거합니다. 이러한 제품은 기본 필터로 전달됩니다. category="groceries"와 일치하므로 이러한 제품은 사용자에게 성공적으로 반환됩니다.

canonical_filter (의사 결정 뷰) 및 기본 filter (최종 출력 뷰)의 범위를 조작하면 검색 환경을 정확하게 제어할 수 있습니다.

데이터 세트 예시

이 페이지에서는 다음 데이터 세트를 예시로 사용합니다. 확장하여 샘플 제품 설명 데이터 세트 내의 필드를 확인합니다.

제품 데이터 세트 예시

ID title 브랜드 카테고리 price_info.price
'nest_mini_2nd_gen' 'Nest Mini(2세대)' ['Google', 'Nest'] ['Nest > 스피커 및 디스플레이'] 49.00
'nest_audio' 'Nest Audio' ['Google', 'Nest'] ['Nest > 스피커 및 디스플레이'] 99.99
'nest_hub_max' 'Nest Hub Max' ['Google', 'Nest'] ['Nest > 스피커 및 디스플레이'] 229.00
'nest_hub' 'Nest Hub' ['Google', 'Nest'] ['Nest > 스피커 및 디스플레이'] 88.99
'google_home_max' 'Google Home Max' ['Google', 'Nest'] ['Nest > 스피커 및 디스플레이'] 299.00
'google_home_mini' 'Google Home Mini' ['Google', 'Nest'] ['Nest > 스피커 및 디스플레이'] 49.00
'google_pixel_5' 'Google Pixel 5' ['Google', 'Pixel'] ['Pixel > 휴대전화'] 699.00
'google_pixel_4a_with_5g' 'Google Pixel 4a 5G' ['Google', 'Pixel'] ['Pixel > 휴대전화'] 499.00
'google_pixel_4a' 'Google Pixel 4a 휴대전화' ['Google', 'Pixel'] ['Pixel > 휴대전화'] 349.00
'google_pixel_stand' 'Google Pixel Stand' ['Google', 'Pixel'] ['Pixel > 추천 액세서리'] 79.00
'google_pixel_buds' 'Google Pixel Buds' ['Google', 'Pixel'] ['Pixel > 추천 액세서리'] 179.00
'google_pixel_5_case' 'Google Pixel 5 케이스' ['Google', 'Pixel'] ['Pixel > 추천 액세서리'] 40.00
'google_pixel_4a_5g_case' 'Google Pixel 4a(5G) 케이스' ['Google', 'Pixel'] ['Pixel > 추천 액세서리'] 40.00
'google_pixel_4a_case' 'Google Pixel 4a 케이스' ['Google', 'Pixel'] ['Pixel > 추천 액세서리'] 40.00

검색어 확장을 통해 더 많은 결과를 위한 검색어 확장

검색어 확장은 특히 검색어(특히 롱테일 쿼리)의 결과가 적은 쿼리의 검색어 재현율을 높입니다. 확장된 검색어는 더 큰 검색결과 크기를 생성합니다.

이 검색 기능은 검색어 확장 조건을 결정하는 사양에 의해 구동됩니다. 기본적으로 사용 중지된 pinUnexpandedResults 옵션이 포함되어 있습니다. true로 설정하면 확장되지 않은 제품이 검색결과 상단에 표시됩니다. 상단에는 확장된 결과가 표시됩니다.

Java

import com.google.cloud.retail.v2.SearchRequest;
import com.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec;
import com.google.cloud.retail.v2.SearchRequest.QueryExpansionSpec.Condition;
import com.google.cloud.retail.v2.SearchResponse;
import com.google.cloud.retail.v2.SearchServiceClient;

public static void searchProductsWithQueryExpansion(String query, int pageSize,
    Condition condition) throws IOException, InterruptedException {
  QueryExpansionSpec queryExpansionSpec = QueryExpansionSpec.newBuilder()
      .setCondition(condition)
      .build();

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

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

예를 들어 검색어 확장 없이 Google Pixel 5 를 검색하면 결과가 google_pixel_5 ID로 제한됩니다. 하지만 검색어 확장을 사용하면 google_pixel_4a_with_5g, google_pixel_4a, 및 google_pixel_5_case ID도 예시 제품 설명 데이터 세트에서 가져올 수 있습니다.