すべてのプロダクト
Search
ドキュメントセンター

:フィルターの設定

最終更新日:Jun 22, 2026

PAI-Rec エンジンは、User2ItemExposureFilter、ItemStateFilter、AdjustCountFilter フィルターのテンプレートを含む、複数の組み込みフィルターテンプレートを提供します。

フィルター設定

次のサンプルコードで `FilterConfs` パラメーターを設定することで、フィルターを設定できます。`FilterConfs` はオブジェクトの配列であり、複数のフィルターポリシーを定義するために使用できます。

共通フィルター設定の概要

次のセクションでは、さまざまなフィルターで参照される共通の設定について説明します。これらの設定は、このトピックの各フィルターの詳細な説明では繰り返されません。

設定例:

{
    "FilterConfs": [
        {
            "Name": "",
            "FilterType": "",
            "Dimension": "",
            "DaoConf": {},
            "AdjustCountConfs": [],
            "ItemStateDaoConf": {},
            "FilterParams": [],
            "DiversityDaoConf": {},
            "FilterVal": {}
        }
    ]
}

パラメーター

必須

説明

Name

string

はい

フィルターのカスタム名。`FilterNames` パラメーターを設定するときに、この名前を使用できます。

FilterType

string

はい

エンジンの組み込みフィルターのタイプ。有効な値:

  • User2ItemExposureFilter

  • User2ItemCustomFilter

  • AdjustCountFilter

  • PriorityAdjustCountFilter

  • ItemStateFilter

  • ItemCustomFilter

  • CompletelyFairFilter

  • GroupWeightCountFilter

  • DimensionFieldUniqueFilter

Dimension

string

いいえ

アイテムのディメンション。

DaoConf

DaoConfig

いいえ

ソーステーブルに関する情報。

AdjustCountConfs

いいえ

PriorityAdjustCountFilter フィルターの設定。

ItemStateDaoConf

いいえ

ItemStateFilter フィルターの設定。

FilterParams

いいえ

コンテキスト条件の設定。

User2ItemExposureFilter

多くのビジネスシナリオでは、露出フィルタリングは、通常、疑似露出とリアル露出を組み合わせることで、重複した推薦を防ぐために使用されます。

疑似露出:リアルタイムログのレイテンシーにより、どのアイテムが露出されたかを即座に特定することは不可能です。そのため、レコメンデーションエンジンから返されたアイテムのリストが疑似露出リストとして機能します。

Flink などのリアルタイム計算エンジンは、リアルタイムログをデータベースに書き込み、そこで PAI-Rec エンジンによって消費されます。

次の共通パラメーターは、さまざまなデータソースの露出フィルタリングに適用されます。

パラメーター

必須

説明

Name

string

はい

フィルターのカスタム名。

FilterType

string

はい

フィルターのタイプ。値を User2ItemExposureFilter に設定します。

MaxItems

int

はい

最近のアイテムのバッチの最大数。このパラメーターは、SQL ステートメントの `limit ${MaxItems}` に相当します。`MaxItems` はアイテムの最大数ではなく、バッチの最大数を指定します。1 回のレコメンデーションリクエストに対して 1 バッチのアイテムが返されます。

TimeInterval

int

はい

タイムスタンプに基づいてアイテムを取得する期間。単位:秒。

WriteLog

bool

はい

露出ログを書き込むかどうかを指定します。

ClearLogIfNotEnoughScene

string

いいえ

露出テーブルのデータが削除されるシナリオを指定します。

OnlyLogUserExposeFlag

bool

いいえ

データは実際にはフィルタリングされません。アイテムがすでに露出されている場合、アイテムには _is_exposure_ 属性のみが追加されます。一部のシナリオでは、アイテムプールが小さすぎて、露出フィルタリングによって完全にフィルタリングされてしまう可能性があります。再ランキングの段階で、_is_exposure_ 属性に基づいてブースティングとデモーションを実行することで、空の結果が返されるのを回避できます。

GenerateItemDataFuncName

string

いいえ

露出テーブルにアイテムデータを書き込むために使用される関数。このパラメーターが空のままの場合、PAI-Rec エンジンのビルトイン関数が使用されます。この場合、アイテム ID のみが返されます。

GenerateItemDataExpr

string

いいえ

式を使用して、露出テーブルに書き込むアイテムデータを構築します。式の構文については、expr-lang/expr をご参照ください。使用可能な変数は、uiditem_iditem (アイテム属性)、sprintf、および context です。空のままにした場合、GenerateItemDataFuncName によって登録された関数が使用されます。この関数は、デフォルトで item_id のみを返します。サポートされているデータソースは、Hologres、TableStore、FeatureStore、および RecallEngine です。

GenerateUserDataExpr

string

いいえ

式を使用して、エクスポージャーテーブルのユーザー識別子を構築します。式の構文については、expr-lang/expr をご参照ください。使用可能な変数は uidcontext、および sprintf です。空のままにした場合、デフォルトで uid が使用されます。対応データソース: Hologres、 FeatureStore、および RecallEngine。

WriteLogExcludeScenes

[]string

いいえ

露出ログが書き込まれないシナリオを指定します。

Hologres

{
    "FilterConfs": [
        {
            "Name": "holo_exposure_filter",
            "FilterType": "User2ItemExposureFilter",
            "MaxItems": 100,
            "TimeInterval": 172800,
            "WriteLog": true,
            "DaoConf": {
                "AdapterType": "hologres",
                "HologresName": "holo_info",
                "HologresTableName": "exposure_history"
            }
        }
    ]
}

DaoConf のパラメーター

パラメーター

必須

説明

AdapterType

string

はい

データソースのタイプ。値を hologres に設定します。

HologresName

string

はい

HologresConfs パラメーターで指定されたデータソースのカスタム名。例:holo_info。

HologresTableName

string

はい

露出テーブルの名前。

ビジネス要件に基づいて、露出テーブルに `time_to_live_in_seconds` を設定できます。

BEGIN;
CREATE TABLE "exposure_history" (
 "uid" text NOT NULL,
 "item" text NOT NULL,
 "create_time" int4 NOT NULL
);
CALL SET_TABLE_PROPERTY('"exposure_history"', 'orientation', 'column');
CALL set_table_property('"exposure_history"', 'distribution_key', 'uid');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'clustering_key', '"uid","create_time"');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'segment_key', '"create_time"');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'bitmap_columns', '"uid","item"');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'dictionary_encoding_columns', '"uid","item"');
CALL SET_TABLE_PROPERTY('"exposure_history"', 'time_to_live_in_seconds', '172800');
comment on table "exposure_history" is '露出履歴テーブル';
COMMIT;

PAI-FeatureStore

PAI-FeatureStore の組み込みオンラインデータソースである FeatureDB は、ブルームフィルターアルゴリズムを使用して PAI-Rec での露出フィルタリングをサポートします。

PAI-FeatureStore を露出テーブルに使用するには、次の設定でリアルタイム FeatureView を作成します。

[ビュー名] には user_expose を入力します。[書き込みモード] には [カスタムテーブル構造] を選択します。[シャード数]5 に、[レプリカ数]1 に設定します。

次の主要パラメーターを設定します。

  1. [タイプ] で、[リアルタイム] を選択します。

  2. [特徴量エンティティ] で、`user` を選択します。

  3. [特徴量フィールド] に、`user_id`、`item_id`、`timestamp` を次のデータ型で追加します。`user_id` と `item_id` は `string`、`timestamp` は `int64` です。`user_id` を[プライマリキー]として設定し、`timestamp` を[イベント時間]として選択する必要があります。

  4. [特徴量ライフサイクル] で、ユーザー露出データの希望の保持期間を設定します。デフォルトは 2 日間です。

  5. 必須の[詳細設定]セクションに、{"table_type":"bloom", "expose_count":5000} と入力します。`table_type` パラメーターはブルームフィルターを有効にし、`expose_count` はユーザーごとに保持する露出アイテムの最大数を設定します。

    PAI-Rec エンジンでの露出フィルタリングのサンプル設定は次のとおりです。

{
    "FilterConfs": [
        {
            "Name": "fs_exposure_filter",
            "FilterType": "User2ItemExposureFilter",
            "TimeInterval": 300,
            "WriteLog": true,
            "DaoConf": {
                "AdapterType": "featurestore",
                "FeatureStoreName": "fs_pairec",
                "FeatureStoreViewName": "user_expose"
            }
        }
    ]
}

`TimeInterval` は秒単位で測定されます。これは、エンジンによって書き込まれる疑似露出アイテムの最大保持期間を定義します。このパラメーターは、`WriteLog` が `true` の場合にのみ適用されます。上記の設定は疑似露出用です。PAI-Rec エンジンがデータを書き込まないリアル露出の場合は、`WriteLog` を `false` に設定します。このシナリオでは、`TimeInterval` パラメーターは不要です。

リアル露出のサンプル設定は次のとおりです。

"FilterConfs": [
        {
            "Name": "fs_exposure_filter2",
            "FilterType": "User2ItemExposureFilter",
            "WriteLog": false,
            "DaoConf": {
                "AdapterType": "featurestore",
                "FeatureStoreName": "fs_pairec",
                "FeatureStoreViewName": "user_expose"
            }
        }
    ]

疑似露出とリアル露出のライフサイクルは通常異なるため、それぞれに別の FeatureView テーブルを使用する必要があります。

リアル露出データの書き込み手順については、「特徴量の書き込み」をご参照ください。

次の表に、`DaoConf` のパラメーターを示します。

パラメーター

必須

説明

AdapterType

string

はい

データソースのタイプ。値は `featurestore` である必要があります。

FeatureStoreName

string

はい

`FeatureStoreConfs` で指定された、PAI-FeatureStore インスタンスのユーザー定義名。

FeatureStoreViewName

string

はい

露出テーブルの FeatureView の名前。

Redis

{
    "FilterConfs": [
        {
            "Name": "redis_exposure_filter",
            "FilterType": "User2ItemExposureFilter",
            "MaxItems": 100,
            "TimeInterval": 172800,
            "WriteLog": true,
            "DaoConf": {
                "AdapterType": "redis",
                "RedisName": "redis_info",
                "RedisPrefix": "exposure_"
            }
        }
    ]
}

DaoConf のパラメーター

パラメーター

必須

説明

AdapterType

string

はい

データソースのタイプ。値を redis に設定します。

RedisName

string

はい

RedisConfs パラメーターで指定されたデータソースのカスタム名。例:redis_info。

RedisPrefix

string

いいえ

露出データのキーのプレフィックス。キーは、RedisPrefix の値とユーザーの一意の ID (UID) で構成されます。

Tablestore

{
    "FilterConfs": [
        {
            "Name": "ots_exposure_filter",
            "FilterType": "User2ItemExposureFilter",
            "MaxItems": 100,
            "TimeInterval": 172800,
            "WriteLog": true,
            "DaoConf": {
                "AdapterType": "tablestore",
                "TableStoreName": "tablestore_info",
                "TableStoreTableName": "exposure_history"
            }
        }
    ]
}

DaoConf のパラメーター

パラメーター

必須

説明

AdapterType

string

はい

データソースのタイプ。有効な値:hologres、mysql、および tablestore。

TableStoreName

string

はい

TableStoreConfs パラメーターで指定されたデータソースのカスタム名。例:tablestore_info。

TableStoreTableName

string

はい

露出テーブルの名前。

time_to_live_in_seconds:データのライフサイクル。パラメーターにはカスタム値を指定する必要があります。

パラメーター

カテゴリ

説明

user_id

プライマリキー

string

ユーザーの UID。

10944750

auto_id

プライマリキー

integer

自動インクリメント列。

item_ids

プロパティ

string

アイテム ID。複数のアイテム ID はコンマ (,) で区切られます。複数のアイテムが同時に露出された場合、システムはアイテム ID を含む単一のレコードを挿入します。

17019277,17019278

インプレッションのデランキング

ユーザーのリコールプールが小さい場合、インプレッションフィルタリングによって利用可能なすべてのアイテムがフィルタリングされてしまう可能性があります。これを回避するには、アイテムを完全にフィルタリングするのではなく、すでに閲覧されたアイテムにタグを付けます。再ランキング中に、ブースティングとデモーションを使用して、これらのタグ付けされたアイテムをリストの最後に移動させることができます。次の例は、Hologres データソースのこの設定を示しています。このプロセスは、他のデータソースでも同様です。

{
    "FilterConfs": [
        {
            "Name": "holo_exposure_filter",
            "FilterType": "User2ItemExposureFilter",
            "MaxItems": 20,
            "TimeInterval": 172800,
            "WriteLog": true,
            "OnlyLogUserExposeFlag": true,
            "DaoConf": {
                "AdapterType": "hologres",
                "HologresName": "holo_info",
                "HologresTableName": "exposure_history"
            }
        }
    ],
    "SortConfs": [
        {
            "Name": "boost_score_sort",
            "SortType": "BoostScoreSort",
            "BoostScoreConditions": [
                {
                    "Conditions": [
                        {
                            "Name": "_is_exposure_",
                            "Domain": "item",
                            "Type": "int",
                            "Value": 1,
                            "Operator": "equal"
                        }
                    ],
                    "Expression": "score / 10"
                }
            ]
        }
    ]
}
この JSON の例では、フィルターとソートの構成を定義します。FilterConfs セクションでは、Hologres の exposure_history テーブルのデータに基づいて、holo_exposure_filter を使用してユーザーがすでに接触したアイテムを除外します。SortConfs セクションでは、スコアブースティングのために boost_score_sort を使用します。アイテムが接触済みである場合 (_is_exposure_ が 1 の場合)、そのスコアは 10 で除算され、ランキングが低下します。<code code-type="xCode" data-tag="codeblock" id="7e32a7ea74ad9" index="0" outputclass="language-json">{
    "FilterConfs": [
        {
            "Name": "holo_exposure_filter",
            "FilterType": "User2ItemExposureFilter",
            "MaxItems": 20,
            "TimeInterval": 172800,
            "WriteLog": true,
            "OnlyLogUserExposeFlag": true,
            "DaoConf": {
                "AdapterType": "hologres",
                "HologresName": "holo_info",
                "HologresTableName": "exposure_history"
            }
        }
    ],
    "SortConfs": [
        {
            "Name": "boost_score_sort",
            "SortType": "BoostScoreSort",
            "BoostScoreConditions": [
                {
                    "Conditions": [
                        {
                            "Name": "_is_exposure_",
                            "Domain": "item",
                            "Type": "int",
                            "Value": 1,
                            "Operator": "equal"
                        }
                    ],
                    "Expression": "score / 10"
                }
            ]
        }
    ]
}

User2ItemCustomFilter

Hologres

データをフィルタリングするには、カスタムのユーザー対アイテムのフィルターテーブルを提供します。通常、このテーブルはオフラインで生成します。たとえば、過去 15 日間にユーザーが露出されたすべてのアイテムを集計する日次ジョブを実行できます。その後、アイテム ID は `item_ids` などのフィールドに、コンマ区切りの文字列として保存されます。

{
    "FilterConfs": [
        {
            "Name": "u2i_custom_filter",
            "FilterType": "User2ItemCustomFilter",
            "DaoConf": {
                "AdapterType": "hologres",
                "HologresName": "holo_info",
                "HologresTableName": "u2i_custom_filter"
            },
            "ItemStateCacheSize": 10000,
            "ItemStateCacheTime": 3600
        }
    ]
}

`DaoConf` のパラメーター

パラメーター

必須

説明

AdapterType

string

はい

データソースのタイプ。値は `hologres` です。

HologresName

string

はい

`HologresConfs` で設定された Hologres データソースのカスタム名。例:`holo_info`。

HologresTableName

string

はい

カスタム露出テーブルの名前。

ItemStateCacheSize

int

いいえ

キャッシュ内の最大エントリ数。0 より大きい値でキャッシュが有効になります。

ItemStateCacheTime

int

いいえ

キャッシュエントリの生存時間 (TTL) (秒単位)。デフォルト:3600。

テーブルスキーマは次のとおりです。

パラメーター

カテゴリ

説明

user_id

プライマリキー

string

ユーザーの一意の ID。

10944750

item_ids

属性

string

一意のアイテム ID のコンマ区切りリスト。

17019277,17019278

Tablestore (OTS)

データをフィルタリングするには、カスタムのユーザー対アイテムのフィルターテーブルを提供します。

{
    "FilterConfs": [
        {
            "Name": "u2i_custom_filter",
            "FilterType": "User2ItemCustomFilter",
            "DaoConf": {
                "AdapterType": "tablestore",
                "TableStoreName": "tablestore_info",
                "TableStoreTableName": "u2i_table"
            }
        }
    ]
}

DaoConf のパラメーター

パラメーター

必須

説明

AdapterType

string

はい

データソースのタイプ。値は `tablestore` です。

TableStoreName

string

はい

TableStoreConfs パラメーターで指定されたデータソースのカスタム名。例:tablestore_info。

TableStoreTableName

string

はい

カスタム露出テーブルの名前。

露出テーブルは、次のパラメーターを使用して定義されます。

パラメーター

カテゴリ

説明

user_id

プライマリキー

string

ユーザーの UID。

10944750

item_ids

プロパティ

string

アイテム ID。複数のアイテム ID はコンマ (,) で区切られます。

17019277,17019278

PAI-FeatureStore

警告

この機能は、オンラインデータソースとして FeatureDB を使用する FeatureView のみをサポートします。

前述の露出フィルタリングと同様に、リアルタイム FeatureView を提供します。Java SDK または Flink コネクタを使用して、このビューにデータを書き込みます。詳細については、「特徴量の書き込み」をご参照ください。PAI-Rec エンジンは、このビューからデータを読み取ってフィルタリングします。FeatureView を次のように設定します。

ビュー名を user2item_custom_filter に設定し、書き込みメソッドとして[カスタムテーブル構造]を選択し、推定データスケールに[1,000 万未満]を選択します。

主要パラメーター:

  1. [タイプ] で、[リアルタイム] を選択します。

  2. [特徴量エンティティ] で、`user` を選択します。

  3. [特徴量フィールド] には、`user_id`、`item_id`、`timestamp` を含める必要があります。`user_id` を[プライマリキー]として設定し、`timestamp` の[イベント時間]を選択します。プライマリキーイベント時間を指定する必要があります。データ型については、`user_id` と `item_id` は `string`、`timestamp` は `int64` です。タイムスタンプはミリ秒単位です。

  4. デフォルトの特徴量 TTL は 2 日間です。必要に応じてこの値を調整してください。特徴量 TTL は、`timestamp` の値に基づいて計算されるデータ行の生存時間を指定します。

  5. [詳細設定] フィールドは必須です。{"table_type":"bloom"} と入力します。`table_type` パラメーターは、作成されたテーブルのブルームフィルターサポートを有効にします。

    PAI-Rec エンジンのサンプル設定は次のとおりです。

  {
    "FilterConfs": [
        {
            "Name": "u2i_custom_filter",
            "FilterType": "User2ItemCustomFilter",
            "DaoConf": {
                "AdapterType": "featurestore",
                "FeatureStoreName": "fs_pairec",
                "FeatureStoreViewName": "u2icustom_filter"
            }
        }
    ]
}

`DaoConf` のパラメーター

パラメーター

必須

説明

AdapterType

string

はい

データソースのタイプ。値は `featurestore` です。

FeatureStoreName

string

はい

`FeatureStoreConfs` で設定された PAI-FeatureStore データソースのカスタム名。

FeatureStoreViewName

string

はい

カスタムフィルターテーブルに使用される FeatureView の名前。

AdjustCountFilter

AdjustCountFilter は、リコールリンクによって返されたアイテムをランダムにシャッフルし、指定された数のアイテムを保持するために使用されます。

設定例:

{
    "FilterConfs": [
        {
            "Name": "adjust_count_filter",
            "FilterType": "AdjustCountFilter",
            "ShuffleItem": true,
            "RetainNum": 500
        }
    ]
}

パラメーター

必須

説明

ShuffleItem

string

はい

リコールリンクによって返されたアイテムをシャッフルするかどうかを指定します。

RetainNum

string

はい

保持したいアイテムの数。

PriorityAdjustCountFilter

PriorityAdjustCountFilter は、スコアに基づいてリコールリンクの返された結果から選択されるアイテムの数を制御するために使用されます。各リコールリンクは、スコアに基づいて推薦されたアイテムをソートします。

設定例:

{
    "FilterConfs": [
        {
            "Name": "priority_adjust_count_filter",
            "FilterType": "PriorityAdjustCountFilter",
            "AdjustCountConfs": [
                {
                    "RecallName": "recall_1",
                    "Count": 125,
                    "Type": "accumulator"
                },
                {
                    "RecallName": "recall_2",
                    "Count": 250,
                    "Type": "accumulator"
                },
                {
                    "RecallName": "recall_3",
                    "Count": 400,
                    "Type": "accumulator"
                }
            ]
        }
    ]
}

パラメーター

必須

説明

Name

string

はい

フィルターのカスタム名。

FilterType

string

はい

フィルターのタイプ。値を PriorityAdjustCountFilter に設定します。

RecallName

string

はい

リコールリンクの名前。

AdjustCountConfs

json array

はい

PriorityAdjustCountFilter フィルターの設定。

  • Count

int

はい

リコールリンクの返された結果から選択されるアイテムの最大数。

  • Type

string

いいえ

数値調整のタイプ。有効な値:accumulator と fix。

accumulator:

  • 上記の設定では、recall_1 の返された結果から選択されたアイテムの数が 125 未満の場合、合計 250 に達するように recall_2 の返された結果からより多くのアイテムが選択されます。

fix:

  • 各リコールリンクの返された結果から選択されるアイテムの数は固定です。1 つのリコールリンクで選択されたアイテムの数が指定された値未満の場合、システムは不足分を補うために他のリコールリンクから追加のアイテムを選択しません。

ItemStateFilter

取得したアイテムを状態でフィルタリングするには、いつでも変更される可能性があるため、リアルタイムでその状態をフェッチする必要があります。これらの状態は通常、専用のテーブルに保存されます。

Hologres

{
    "FilterConfs": [
        {
            "Name": "ItemStateFilter",
            "FilterType": "ItemStateFilter",
            "ItemStateDaoConf": {
                "AdapterType": "hologres",
                "HologresName": "",
                "HologresTableName": "",
                "ItemFieldName": "",
                "WhereClause": "",
                "SelectFields": ""
            },
            "ItemStateCacheSize": 50000,
            "ItemStateCacheTime": 3600,
            "FilterParams": [

            ]
        }
    ]
}

アイテムの状態が頻繁に変更されない場合は、キャッシュオプションを設定できます。

パラメーター

必須

説明

ItemStateCacheSize

int

いいえ

キャッシュするアイテムの数。

ItemStateCacheTime

int

いいえ

キャッシュの生存時間 (TTL)。単位:秒。

ItemStateDaoConfig のパラメーター

パラメーター

必須

説明

AdapterType

string

はい

データソースのタイプ。有効な値:hologres、mysql、および tablestore。

HologresName

string

はい

HologresConfs パラメーターで指定されたデータソースのカスタム名。例:holo_info。

HologresTableName

string

はい

Hologres インスタンスにアイテムの状態を保存するテーブルの名前。

ItemFieldName

string

はい

アイテムの状態を保存するテーブルのプライマリキー。

WhereClause

string

いいえ

フィルタリングに使用される条件文。

SelectFields

string

はい

クエリしたいフィールド。

FilterParams のパラメーター

{
    "FilterParams": [
        {
            "Name": "publicStatus",
            "Type": "int",
            "Operator": "equal",
            "Value": 0
        },
        {
            "Name": "state",
            "Type": "int",
            "Operator": "equal",
            "Value": 1
        },
        {
            "Name": "checkStatus",
            "Type": "int",
            "Operator": "not_equal",
            "Value": 2
        },
        {
            "Name": "norec",
            "Type": "int",
            "Operator": "not_equal",
            "Value": 1
        }
    ]
}

パラメーター

必須

説明

Name

string

はい

特徴の名前。

Domain

string

いいえ

特徴のドメイン。有効な値:`user` と `item`。デフォルトは `item` です。

Operator

string

はい

演算子。有効な値:equal、not_equal、in、greater、greaterThan、less、および lessThan。

Type

string

はい

特徴のタイプ。

Value

object

はい

条件値。

重要

注:フィルタリングには `WhereClause` と `FilterParams` の両方を使用できます。`WhereClause` は、SQL の `WHERE` 句と同様に、データソースでデータをフィルタリングします。`FilterParams` は、取得したデータをローカルでフィルタリングします。

演算子の使用方法の詳細については、付録をご参照ください。

PAI-FeatureStore

{
    "FilterConfs": [
        {
            "Name": "ItemStateFilter",
            "FilterType": "ItemStateFilter",
            "ItemStateDaoConf": {
                "AdapterType": "featurestore",
                "FeatureStoreName": "",
                "FeatureStoreViewName": "",
                "ItemFieldName": "",
                "SelectFields": ""
            },
            "ItemStateCacheSize": 50000,
            "ItemStateCacheTime": 3600,
            "FilterParams": [

            ]
        }
    ]
}

アイテムの状態が頻繁に変更されない場合は、キャッシュオプションを設定できます。

パラメーター

必須

説明

ItemStateCacheSize

int

いいえ

キャッシュするアイテムの数。

ItemStateCacheTime

int

いいえ

キャッシュの生存時間 (TTL)。単位:秒。

`ItemStateDaoConfig` は次のように定義されます。

パラメーター

必須

説明

AdapterType

string

はい

データソースのタイプ。値は `featurestore` である必要があります。

FeatureStoreName

string

はい

`FeatureStoreConfs` で設定された PAI-FeatureStore インスタンスのカスタム名。

FeatureStoreViewName

string

はい

アイテムの状態を保存する特徴量ビューの名前。

ItemFieldName

string

はい

アイテム状態テーブルのプライマリキー。

SelectFields

string

はい

取得するフィールド。

`FilterParams` は次のように定義されます。

{
    "FilterParams": [
        {
            "Name": "publicStatus",
            "Type": "int",
            "Operator": "equal",
            "Value": 0
        },
        {
            "Name": "state",
            "Type": "int",
            "Operator": "equal",
            "Value": 1
        },
        {
            "Name": "checkStatus",
            "Type": "int",
            "Operator": "not_equal",
            "Value": 2
        },
        {
            "Name": "norec",
            "Type": "int",
            "Operator": "not_equal",
            "Value": 1
        }
    ]
}

パラメーター

必須

説明

Name

string

はい

フィルタリングする特徴の名前。

Domain

string

いいえ

特徴のドメイン。有効な値:`user` と `item`。デフォルトは `item` です。

Operator

string

はい

比較演算子。サポートされている値には、`equal`、`not_equal`、`in`、`greater`、`greaterThan`、`less`、および `lessThan` が含まれます。

Type

string

はい

特徴のタイプ。

Value

object

はい

条件値。

演算子の使用方法の詳細については、付録をご参照ください。

SnakeFilter

リコール段階では、複数のリコールチャネルから候補セットを取得します。SnakeFilter は、指定された重み比に基づいて、これらのチャネルからのデータをラウンドロビン順で結合します。

たとえば、重みがそれぞれ 1、2、3 の 3 つのリコールチャネル (A、B、C) がある場合、結合ロジックは次のように機能します。

  • 候補セット A から 1 つの要素を選択します。

  • 候補セット B から 2 つの要素を選択します。

  • 候補セット C から 3 つの要素を選択します。

  • 必要な数の要素が得られるまで、このプロセスを繰り返します。

重複要素を処理するための 2 つのポリシーがあります。

  • REFILL_ON_DUPLICATE:候補セットから取得した要素が以前に選択されたものと重複する場合、システムは同じ候補セット内で一意の代替を検索します。たとえば、候補セット C から取得した 3 つの要素が、すでにセット A と B から選択されている要素と重複する場合、システムはセット C で代替を検索します。

  • SKIP_ON_DUPLICATE:システムは重複する要素をスキップし、次の反復に進みます。たとえば、候補セット C から取得した 3 つの要素がセット A と B の要素と重複する場合、候補セット C はこのラウンドでは要素を返しません。その後、プロセスは候補セット A から始まる新しい反復を開始します。

{
    "FilterConfs": [
        {
            "Name": "SnakeFilter",
            "FilterType": "SnakeFilter",
            "RetainNum": 20,
            "SnakeType": "REFILL_ON_DUPLICATE",
            "AdjustCountConfs": [
                 {
                     "RecallName": "GroupHotRecall",
                     "Weight": 1
                 },
                 {
                     "RecallName": "U2IRecall",
                     "Weight": 2
                 },
                 {
                     "RecallName": "GlobalHotRecall",
                     "Weight": 3
                 }
             ]
        }
    ]
}

パラメーター

必須

説明

Name

string

はい

カスタムフィルター名。

FilterType

string

はい

フィルタータイプ。値は `SnakeFilter` である必要があります。

RetainNum

string

はい

最終的な候補セットに保持する要素の数。

SnakeType

string

いいえ

  • REFILL_ON_DUPLICATE:クォータを満たすために、現在のリコールチャネル内で検索を続行します。これがデフォルト値です。

  • SKIP_ON_DUPLICATE:クォータを補充せずに重複する要素をスキップし、次の反復に進みます。

AdjustCountConfs

json array

はい

各リコールチャネルの設定を定義します。

  • RecallName

string

はい

リコールチャネルの名前。

  • Weight

int

はい

各ラウンドでこのリコールチャネルから取得するエントリ数を決定するために使用される相対的な重み。

説明

このフィルターを適用すると、アイテムに `snake_filter` 属性が追加されます。この属性は、アイテムのリコールパス、0 から始まるインデックス位置、およびスコアを指定します。たとえば、snake_filter:GroupHotRecall:0:0.144200 は、アイテムが GroupHotRecall リコールパスの 0 の位置にあることを意味し、最初のアイテムになります。

CompletelyFairFilter

CompletelyFairFilter は、アイテムのスコアに基づいてリコールリンクによって返されたアイテムをソートし、各リンクの結果から公平な方法でアイテムを選択するために使用されます。

{
    "FilterConfs": [
        {
            "Name": "CompletelyFairFilter",
            "FilterType": "CompletelyFairFilter",
            "RetainNum": 500
        }
    ]
}

DimensionFieldUniqueFilter

DimensionFieldUniqueFilter は、UniqueFilter とは異なる方法で機能します。DimensionFieldUniqueFilter は、フィールド値が重複しているアイテムを削除します。

{
    "FilterConfs": [
        {
            "Name": "DimensionFieldUniqueFilter",
            "FilterType": "DimensionFieldUniqueFilter",
            "Dimension": ""
        }
    ]
}

パラメーター

必須

説明

Name

string

はい

カスタムフィルターの名前。

FilterType

string

はい

フィルタータイプ。`DimensionFieldUniqueFilter` である必要があります。

Dimension

string

はい

アイテムの重複排除に使用される属性フィールド。アイテムに対してこのフィールドが空の場合、そのアイテムは保持されます。

ConditionFilter

これは、ユーザー特徴や `context` で渡されるようなリクエスト条件に基づいて、特定のフィルターを動的に実行する複合フィルターです。1 つ以上の組み合わせを設定でき、それぞれが条件のセットを `FilterConfs` で定義された特定のフィルターにリンクします。

上記の例では、`adjust_count_filter` と `CompletelyFairFilter` という 2 つのスタンドアロンフィルターを定義しています。`ConditionFilter` は、条件に基づいてリクエストをルーティングする複合フィルターです。ユーザー属性 `query` が `"1"` に等しい場合、`adjust_count_filter` を使用します。どの条件にも一致しない場合、`DefaultFilterName` (`CompletelyFairFilter`) で指定されたフィルターにフォールバックします。

設定パラメーターは次のとおりです。

パラメーター

必須

説明

Name

string

はい

カスタムフィルターの名前。

FilterType

string

はい

フィルターのタイプ。値を `ConditionFilter` に設定します。

ConditionFilterConfs

json map

はい

条件の設定。

  • FilterConfs

json array

いいえ

条件一致ルールの配列。リクエストが条件に一致すると、サービスは対応するフィルターを適用します。

  • DefaultFilterName

string

いいえ

`FilterConfs` のどの条件にも一致しない場合、サービスはこのパラメーターで指定されたフィルターを適用します。

`FilterConfs` の設定:

パラメーター

必須

説明

Conditions

[]FilterParamConfig

いいえ

ルールの一致条件。

FilterName

string

いいえ

条件が満たされたときに適用するフィルターの名前。このフィルターは FilterConfs で定義されている必要があります。

`FilterParamConfig` を次のように設定します。

パラメーター

必須

説明

Name

string

はい

アイテムまたはユーザーの特徴名。

Domain

string

はい

特徴がアイテム用かユーザー用かを指定する列挙値 (`item` または `user`)。`Name` は、対応するアイテムまたはユーザーの `properties` に存在する必要があります。

Operator

string

はい

比較演算子。指定できる値:`equal`、`not_equal`、`in`、`not_in`、`greater`、`greaterThan`、`less`、`lessThan`、`contains`、および `not_contains`。

Type

string

はい

特徴のタイプ。

Value

object

はい

特徴の値。

条件設定の詳細については、付録をご参照ください。

UniqueFilter

UniqueFilter は、各アイテム ID が一意であることを保証するように設計されています。同じアイテム ID が 2 つのリコールリンクから返された場合、UniqueFilter は最初に返されたアイテム ID を優先します。

UniqueFilter を設定しなくても、`FilterNames` パラメーターを設定する際に UniqueFilter を使用できます。

フィルターの使用方法

リコール設定と同様に、フィルター設定では `FilterNames` パラメーターを使用します。このパラメーターは、各シナリオをフィルターポリシーのセットにマッピングする `Map[string]object` です。

  • ${scene_name}: シナリオの名前。複数のシナリオに同じ構成を適用するには、default を使用します。

  • UniqueFilter:FilterConfigs で定義されたフィルターのカスタム名。

付録

演算子の例

  1. equal (指定された値と等しい)

{
    "Name": "publicStatus",
    "Type": "int",
    "Operator": "equal",
    "Value": 0
}
  1. not_equal (指定された値と等しくない)

{
    "name": "checkStatus",
    "type": "int",
    "operator": "not_equal",
    "value": 2
}
  1. greater (指定された値より大きい)

{
    "Name": "checkStatus",
    "Type": "int",
    "Operator": "greater",
    "Value": 2
}
  1. greaterThan (指定された値以上)

{
    "Name": "checkStatus",
    "Type": "int",
    "Operator": "greaterThan",
    "Value": 2
}
  1. less (指定された値より小さい)

{
    "Name": "checkStatus",
    "Type": "int",
    "Operator": "less",
    "Value": 2
}
  1. lessThan (指定された値以下)

{
    "Name": "checkStatus",
    "Type": "int",
    "Operator": "lessThan",
    "Value": 2
}
  1. in (配列内のいずれかの値に一致)

String

{
    "Name": "state",
    "Type": "string",
    "Operator": "in",
    "Value": ["success","ok"]
}
  1. not_in (配列内のどのアイテムにも一致しない)

{
    "name": "state",
    "type": "int",
    "operator": "not_in",
    "value": [2,4,6]
}

`in` 演算子で `string type` を使用して設定することもできます。

  1. contains (配列内のいずれかのアイテムに一致)

{
    "Name": "state",
    "Type": "[]int",
    "Operator": "contains",
    "Value": [2,4,6]
}

string 型

{
    "Name": "state",
    "Type": "[]string",
    "Operator": "contains",
    "Value": ["success","ok"]
}
  1. not_contains (指定されたアイテムのいずれも含まない)

{
    "Name": "state",
    "Type": "[]int",
    "Operator": "not_contains",
    "Value": [2,4,6]
}
以下のコードでは、not_contains 演算子を使用して、state フィールドに配列 [2, 4, 6] の値が含まれていないアイテムをフィルターします。このフィルターは、クエリ結果から特定のアイテムを除外するのに役立ちます。たとえば、このフィルターを使用すると、ステータスが「アーカイブ済み」(ID 2)、「保留中」(ID 4)、または「非推奨」(ID 6) のタスクを除く、すべてのタスクを取得できます。<code code-type="xCode" data-tag="codeblock" id="866e45a8e4kqj" outputclass="language-json">{
    "Name": "state",
    "Type": "[]int",
    "Operator": "not_contains",
    "Value": [2,4,6]
}

文字列配列も使用できます。設定の詳細については、`contains` 演算子をご参照ください。

  1. bool (複数の条件一致演算子を組み合わせる)

or で条件を結合します。

{
    "Operator": "bool",
    "Type": "or",
    "Configs":
    [
        {
            "Name": "publicStatus",
            "Type": "int",
            "Operator": "equal",
            "Value": 0
        },
        {
            "Name": "checkStatus",
            "Type": "int",
            "Operator": "greater",
            "Value": 2
        }
    ]
}

and の使用も同様です。`Type` を `and` に設定します。

  1. expression (式が true と評価された場合に一致)

{
    "Operator": "expression",
    "Value": "item.size == 43"
}

`item.size` は `item` の属性です。`user` の属性にアクセスするには、`user.xxx` を使用します。

式は、算術、比較、論理、三項演算子をサポートしています。以下は、より複雑な例です。

{
    "Operator": "expression",
    "Value": "!item.sold_out and user.list != nil ? item.size in user.list : true"
}

式の構文の完全な定義については、https://expr-lang.org/docs/language-definition をご参照ください。

説明

エンジンインターフェイスの `features` フィールドで提供されるコンテキスト特徴は、`user` に関連付けられています。`Value` が固定値ではなく変数である必要がある場合は、`"user.xxx"` に設定して特定のユーザー属性を参照します。たとえば、ユーザーの `age` 属性を参照する場合、設定は `"Value":"user.age"` となります。