篩選建議

本頁說明如何使用產品屬性篩選推薦結果。

您可以在預測要求中指定篩選運算式,藉此篩選預測結果。篩選器運算式是針對每個產品評估的邏輯運算式。回應中的產品清單會縮減為運算式評估為 true 的產品。

建議有兩種篩選方式:

本操作說明的各節僅適用於篩選器第 2 版,因為這個版本會使用產品屬性篩選推薦內容。

推薦內容篩選功能,第 2 版

版本 2 會使用產品屬性。篩選運算式是根據產品屬性建立。這些屬性可以是預先定義的系統屬性,例如 categoriescolors,也可以是您定義的自訂屬性,例如 attributes.styles。將產品屬性設為可篩選後,系統就能自動使用這些屬性做為最佳化建議篩選的標記,而不需要您手動新增篩選標記。

當你使用屬性篩選產品時,預測回應會傳回主要產品,其中至少包含一個主要或變化版本產品,且屬性值與篩選運算式相符。如要進一步瞭解主要產品和變化型產品,請參閱「產品層級」。

以下篩選器運算式範例也會篩選任何設為「新品」且未設為促銷活動的紅色或藍色產品:

colors: ANY("red", "blue") AND attributes.status: ANY("New-Arrival") AND NOT attributes.is_promotional: ANY("true")

如要使用推薦內容的 2 版篩選功能,請按照下列程序操作。本頁後續會說明各個程序。

  1. 為模型啟用推薦篩選功能,以便提供篩選過的推薦內容。
  2. 為產品屬性開啟建議篩選功能,以便篩選產品。
  3. 在預測要求中使用可篩選的產品屬性

推薦篩選器,第 1 版 (已淘汰)

第 1 版會使用手動建立的篩選器標記。篩選器運算式是以篩選器標記為依據,你必須手動將這些標記新增至目錄中要篩選的任何產品。

以下篩選器運算式範例使用篩選器標記,指定標示為「紅色」或「藍色」的產品,以及標示為「新品上架」的產品,但不標示為「促銷」:

tag=("Red" OR "Blue") tag="New-Arrival" tag=(NOT "promotional")

請參閱 API 參考資料文件中的 Product.tags[] 欄位。

標記運算式可包含布林值運算子 ORNOT,但必須與標記值分開,中間隔開一或多個空格。標記值也可以在開頭加上連字號 (-),這相當於 NOT 運算子。使用布林運算子的標記運算式必須以括號括住。

除了標記,您也可以依 filterOutOfStockItems 篩選。filterOutOfStockItems 標記會篩除 stockStateOUT_OF_STOCK 的任何產品。

您可以結合標記篩選器和缺貨篩選器,只傳回符合所有指定篩選運算式的項目。

以下是一些篩選字串範例:

"filter": "tag=\"spring-sale\""
"filter": "filterOutOfStockItems"
"filter": "tag=\"spring-sale\" tag=\"exclusive\" filterOutOfStockItems"

以下範例只會傳回有 spring-saleexclusive 標記 (或兩者皆有),且沒有 items-to-exclude 標記的商品。

"filter": "tag=(\"spring-sale\" OR \"exclusive\") tag=(-\"items-to-exclude\") filterOutOfStockItems"

屬性篩選器和標籤篩選器的相容性

如果模型同時具有手動建立的標記和可篩選的產品屬性,則可使用任一版本的篩選器處理預測要求。不過,同一個預測要求中,不能同時包含第 1 版和第 2 版篩選運算式。

推薦內容篩選限制

手動新增篩選條件,限制向使用者顯示的推薦內容。您可以使用 Vertex AI Search for Commerce 套用業務規則,微調消費者能看見的資訊,包括依據產品供應情形、自訂標記和其他條件進行篩選的選項。

每個可篩選的屬性都會在每個模型中消耗一些記憶體。下列限制有助於避免對放送成效造成不利影響:

  • 最多可將 10 個自訂屬性設為可篩選的屬性。
  • 目錄中最多可包含 100,000,000 個可篩選的屬性值。

    如要預估目錄中的屬性值總數,請將目錄中的產品數量乘以可篩選屬性數量。

    舉例來說,假設目錄中有 1,000 項產品,且 3 個屬性設為可篩選,則屬性值的總數可估為 3*1000=3000。

    如果您同時使用第 1 版和第 2 版的推薦篩選功能,篩選標記的數量會計入配額。請確認新增至屬性值總數的篩選器標記數量少於 100,000,000。

如果超出限制,就無法將其他屬性設為可篩選的屬性。如果需要超出這些上限,請申請調高配額。

標記總數會在模型訓練期間計算。如果總數超過限制,模型訓練就會失敗。如果模型訓練期間找到的篩選自訂屬性超過 10 個,系統只會使用 10 個。

推薦內容篩選器運算式語法

搜尋和推薦的篩選器運算式語法相似。不過,建議功能有一些限制。

推薦篩選器運算式語法可用下列 EBNF 來總結:

  # A single expression or multiple expressions that are joined by "AND" or "OR".
  filter = expression, { " AND " | "OR", expression };

  # An expression can be prefixed with "-" or "NOT" to express a negation.
  expression = [ "-" | "NOT " ],
                    # A parenthesized expression
                    | "(", expression, ")"
                    # A simple expression applying to a textual field.
                    # Function "ANY" returns true if the field contains any of the literals.
                    ( textual_field, ":", "ANY", "(", literal, { ",", literal }, ")"

  # A literal is any double-quoted case sensitive string. You must escape backslash (\) and
  # quote (") characters. We do not support textual values containing `/` characters, or partial string matches.

  # The literal must be an exact match for products in the catalog. The Predict
  # API returns empty results when no possible matches exist.

  literal = double-quoted string;

  textual_field = see the tables below;

篩選器語法限制

但請注意,本功能有以下限制:

  • 在括號中嵌入 ANDOR 運算子的深度有限制。篩選器中的邏輯運算式必須採用連接詞正規形式 (CNF)。最複雜的支援邏輯運算式可為 AND 連結的子句清單,且只包含 OR 運算子,例如:(... OR ... OR ...) AND (... OR ...) AND (... OR ...)
  • 您可以使用 NOT 關鍵字或 - 來否定運算式。這項功能僅適用於單一引數的 ANY() 運算式,且該引數不包含與廣告空間相關的屬性。
  • availability 為基礎的限制必須位於頂層。這些運算子無法用於 OR 子句或否定運算子 (NOT)。
  • 由於標準推薦篩選功能僅支援文字欄位,因此不支援標準推薦篩選功能的「小於」、「大於」和「範圍檢查」運算。小於和大於運算子只能用於推薦內容的提升或埋藏控制條件,這些條件支援部分數值欄位 (請參閱「推薦內容提升/埋藏所支援的欄位」)。
  • 頂層 AND 子句中的條件數量上限為 20 個。
  • OR 子句最多可包含 100 個引數,這些引數會納入 ANY() 運算式。如果 OR 子句含有多個 ANY() 運算式,則這些運算式的引數都會計入此限制。例如,colors: ANY("red", "green") OR colors: ANY("blue") 有三個引數。

下表列出有效的篩選器運算式範例,以及無效範例和無效原因。

運算式 有效 附註
colors: ANY("red", "green")
NOT colors: ANY("red")
NOT colors: ANY("red", green") 否定具有多個引數的 `ANY()`。
colors: ANY("red", "green") OR
categories: ANY(\"Phone > Android > Pixel\")
(colors: ANY("red") OR colors: ANY("green")) AND
categories: ANY(\"Phone > Android > Pixel\")
(colors: ANY("red") AND colors: ANY("green")) OR
categories: ANY(\"Phone > Android > Pixel\")
不符合聯合標準形式。
(colors: ANY("red")) AND (availability: ANY("IN_STOCK")
(colors: ANY("red")) OR (availability: ANY("IN_STOCK")) OR 運算式中的 availability 與其他條件結合。

商品目錄相關屬性篩選

系統會根據產品的即時狀態,篩選廣告空間相關屬性。針對 availability: ANY("IN_STOCK") 篩選,預測回應會傳回主要產品,其中主要產品或變化版本產品的值與 IN_STOCK 相符。如要進一步瞭解主要產品和變化型產品,請參閱「產品層級」。我們不支援 Primary onlyVariant only 篩選。

IN_STOCK 是推薦篩選器第 2 版支援的唯一 availability 屬性值。

商品目錄相關屬性可用於 AND 子句,但無法用於 OR 子句。

支援的欄位

下表列出支援的文字欄位。

推薦內容的提升或隱藏功能支援標準推薦篩選功能不支援的其他欄位。如需這類欄位的清單,請參閱「Boost/bury 支援的欄位」。

欄位 說明
「productId」 產品 ID (Product.name 的最後一個部分)。
「brands」 Product.brands。
「categories」 Product.categories。
「genders」 Audience.genders。
「ageGroups」 Audience.age_groups。
「colorFamilies」 ColorInfo.color_families。
「colors」 ColorInfo.colors。
「sizes」 Product.sizes。
「材料」 Product.materials。
「patterns」 Product.patterns。
「conditions」 Product.conditions。
「attributes.key」 Product 物件中的文字自訂屬性。如果屬性值為文字,鍵可以是 Product.attributes 對應表中的任何鍵。

提高/降低排名支援的欄位

提升/埋沒功能支援標準推薦篩選功能不支援的部分額外欄位,包括數值欄位。

除了「支援的欄位」一節所列的欄位外,推薦內容的 boost/bury 也支援下列欄位:

文字欄位

欄位 說明
「tags」 Product.tags[]。與產品相關聯的自訂標籤。

數值欄位

欄位 說明
「price」 PriceInfo.price。產品價格。
「discount」 產品折扣。這個欄位是使用 PriceInfo 中的原始價格和價格欄位值來計算。
「rating」 Product.rating。產品的評分總數。
「ratingCount」 rating.ratingCount。產品的評分總數。

設定模型的推薦篩選條件

你可以使用 Search for Commerce 控制台或 Models API 資源,啟用推薦內容篩選功能。

您可以透過控制台建立新模型,並啟用推薦內容篩選功能。您也可以為現有模型更新這個選項。

您可以使用 Models API 資源,建立啟用推薦篩選功能的新模型,或使用 models.Patch 為現有模型更新這項設定。

請注意,如果傳回預測值的服務設定已啟用類別比對,則篩選功能就無法使用「categories」屬性,因為回應只會傳回與情境產品共用類別的產品結果。

使用控制台設定模型的篩選條件

使用 Search for commerce 控制台,在建立模型時選取「自動產生標記」選項,即可為該模型啟用推薦過濾功能。

請仔細檢查與其他設定的相容性,例如 diversity-levelcategory-match-level 等,因為總體效果會合併,而篩選作業會在最後進行。

  • 舉例來說,將以規則為基礎的 diversity-levelcategory attribute filtering 結合,通常會導致輸出內容為空白。
    • diversity-level=high-diversity 會強制模型限制相同類別字串的結果數量上限。例如:category1 有 1 個結果、category2 有 1 個結果,以此類推。
    • 使用類別中繼資料 (Product.categories = ANY ("category2")) 的屬性篩選功能,可讓模型捨棄不相符的項目。
    • 最終輸出結果少於三個。
  • similar-items 模式已包含額外的類別相關性提升功能,並使用預設的 category-match-level = relaxed-category-match。切換為 category-match-level=no-category-match 即可停用行為,並使用自訂篩選規則。

如要瞭解如何使用控制台建立推薦模型,請參閱「建立推薦模型」一文。

您無法在控制台中為現有模型更新這項設定。如要更新模型的這項設定,請使用 models.Patch API 方法。

使用 API 為模型設定篩選條件

您可以在建立新模型時使用 models.Create 為模型啟用推薦篩選功能,或是在更新現有模型時使用 models.Patch

如要啟用篩選功能,請為模型設定 filteringOption 欄位。這個欄位的允許值如下:

  • RECOMMENDATIONS_FILTERING_DISABLED (預設):關閉模型的篩選功能。
  • RECOMMENDATIONS_FILTERING_ENABLED:已為主要產品啟用篩選功能。

以下 curl 範例會建立新模型,並啟用推薦內容篩選功能。

curl -X PATCH \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -H "X-Goog-User-Project: PROJECT_NUMBER" \
     --data "{
       'name': 'MODEL_NAME',
       'displayName': 'MODEL_DISPLAY_NAME',
       'type': 'home-page',
       'filteringOption': 'RECOMMENDATIONS_FILTERING_ENABLED',
     }" \
     "https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/models"

以下 curl 範例會更新現有模型的篩選選項設定。

curl -X PATCH \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -H "X-Goog-User-Project: PROJECT_NUMBER" \
     --data "{
       'filteringOption': 'RECOMMENDATIONS_FILTERING_ENABLED',
     }" \
     "https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/models/MODEL_ID?updateMask=filteringOption"

將屬性設為可篩選

如要篩選推薦的產品,請為要在篩選運算式中使用的產品屬性啟用篩選功能。你可以使用 Search for commerce 控制台或 Attributes API 資源更新這項設定。

請勿將過多屬性設為可篩選。篩選屬性數量設有上限。

使用控制台將屬性設為可篩選

你可以在 Commerce Search 控制台的「控制」頁面中,將屬性設為可篩選的項目。

  1. 前往「Search for Commerce」控制台的「Controls」頁面。

    前往「控制」頁面

  2. 前往「屬性控制項」分頁。

    這個分頁會顯示表格,列出可設定全站控制項的所有產品屬性。

  3. 按一下「修改控制項」

  4. 將產品屬性「可篩選」設為「是」

  5. 按一下「儲存控制項」

下一個模型訓練週期結束後,您就可以開始使用屬性進行篩選。

使用 API 將屬性設為可篩選

AttributesConfig 代表目錄的屬性清單。

CatalogAttribute 設定 AttributesConfig.filteringOption 欄位。這個欄位的有效值如下:

  • RECOMMENDATIONS_FILTERING_DISABLED (預設):關閉屬性篩選功能。
  • RECOMMENDATIONS_FILTERING_ENABLED:已為屬性啟用篩選功能。

以下 curl 範例會查詢現有的產品屬性。

curl -X GET \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -H "X-Goog-User-Project: PROJECT_NUMBER" \ "https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/attributesConfig"

以下 curl 範例會將產品屬性 categories 設為可篩選。

更新現有屬性時,請保留屬性在前一個步驟中顯示的 indexableOptiondynamicFacetableOptionsearchableOption 原始值。如果在查看 attributesConfig 時,所選屬性未如前述範例顯示,請使用預設設定,如以下範例所示。

curl -X PATCH \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -H "X-Goog-User-Project: PROJECT_NUMBER" \
     --data "{
        'name': 'projects/PROJECT_NUMBER/locations/global/catalogs/default_catalog/attributesConfig',
        'catalogAttributes': {
          'categories': {
            'key': 'categories',
            'indexableOption': 'INDEXABLE_ENABLED',
            'dynamicFacetableOption': 'DYNAMIC_FACETABLE_DISABLED',
            'searchableOption': 'SEARCHABLE_DISABLED',
            'recommendationsFilteringOption': 'RECOMMENDATIONS_FILTERING_ENABLED'
          }
        },
        'attributeConfigLevel': 'CATALOG_LEVEL_ATTRIBUTE_CONFIG'
     }" \
"https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/attributesConfig"

下一個模型訓練週期結束後,您就可以開始使用屬性進行篩選。這項作業通常需要至少八小時才能完成。

在預測要求中使用可篩選的屬性

模型重新訓練完成後,您可以在預測要求中使用可篩選的產品屬性。

將請求參數值 filterSyntaxV2 設為 true,即可啟用第 2 版推薦內容篩選功能。如果未設定參數,則會繼續使用第 1 版篩選功能。如果模型同時具有手動建立的標記和可篩選的產品屬性,則可使用任一版本的篩選器處理預測要求。不過,同一個預測要求中,無法同時包含第 1 版和第 2 版篩選運算式。

以下部分 curl 範例顯示 filterSyntaxV2 設為 true,以及使用產品屬性 colorscategories 的篩選器運算式。這個範例假設 colorscategories 已設為可篩選。

"params": {
  "filterSyntaxV2": true
},
"filter": "(categories: ANY(\"Phone > Android > Pixel\") OR colors: ANY(\"red\", \"green\")) AND (availability: ANY(\"IN_STOCK\"))"

以下 curl 範例顯示完整的預測要求。

curl -X POST \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -H "X-Goog-User-Project: PROJECT_NUMBER" \
     --data "{
        'userEvent': {
          'eventType': 'detail-page-view',
          'visitorId': 'VISITOR_ID',
          'productDetails': {
            'product': {
              'id': 'PRODUCT_ID'
            }
          }
        },
        'params': {
          'returnProduct': true,
          'filterSyntaxV2': true,
          'strictFiltering': true,
        },
        'filter': 'categories: ANY(\"xyz\")'
     }" \
     "https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/placements/SERVING_CONFIG:predict"

除了篩選器之外,放送設定的多樣化設定也可能會影響回應傳回的結果數量。