O mecanismo PAI-Rec oferece diversos modelos de filtro integrados, incluindo User2ItemExposureFilter, ItemStateFilter e AdjustCountFilter.
Configurações de filtro
Configure os filtros definindo o parâmetro FilterConfs conforme o código de exemplo a seguir. FilterConfs é um array de objetos que permite definir várias políticas de filtragem.
Visão geral das configurações comuns de filtro
Esta seção descreve as configurações comuns referenciadas por diferentes filtros. Essas definições não se repetem nas descrições detalhadas de cada filtro neste tópico.
Configuração de exemplo:
{
"FilterConfs": [
{
"Name": "",
"FilterType": "",
"Dimension": "",
"DaoConf": {},
"AdjustCountConfs": [],
"ItemStateDaoConf": {},
"FilterParams": [],
"DiversityDaoConf": {},
"FilterVal": {}
}
]
}
Parâmetro | Tipo | Obrigatório | Descrição |
Name | string | Sim | Nome personalizado do filtro. Utilize este nome ao configurar o parâmetro FilterNames. |
FilterType | string | Sim | Tipo de filtro integrado do mecanismo. Valores válidos:
|
Dimension | string | Não | Dimensão do item. |
DaoConf | DaoConfig | Não | Informações sobre a tabela de origem. |
AdjustCountConfs | Não | Configurações do filtro PriorityAdjustCountFilter. | |
ItemStateDaoConf | Não | Configurações do filtro ItemStateFilter. | |
FilterParams | Não | Configurações das condições contextuais. |
User2ItemExposureFilter
Em muitos cenários de negócios, a filtragem de exposição evita recomendações repetidas. Geralmente, combina-se pseudoexposição e exposição real.
Pseudoexposição: A latência dos logs em tempo real impede a identificação imediata dos itens expostos. Por isso, a lista de itens retornada pelo mecanismo de recomendação funciona como lista de pseudoexposição.
Um mecanismo de computação em tempo real, como o Flink, grava logs em um banco de dados para consumo posterior pelo mecanismo PAI-Rec.
Os parâmetros comuns a seguir aplicam-se à filtragem de exposição para várias fontes de dados.
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
Name |
string |
Sim |
Nome personalizado do filtro. |
|
FilterType |
string |
Sim |
Tipo do filtro. Defina o valor como User2ItemExposureFilter. |
|
MaxItems |
int |
Sim |
Número máximo de lotes recentes de itens. Equivale a |
|
TimeInterval |
int |
Sim |
Período para recuperação de itens com base em timestamps. Unidade: segundos. |
|
WriteLog |
bool |
Sim |
Define se o sistema deve gravar logs de exposição. |
|
ClearLogIfNotEnoughScene |
string |
Não |
Especifica o cenário no qual o sistema excluirá dados da tabela de exposição. |
|
OnlyLogUserExposeFlag |
bool |
Não |
O sistema não filtra efetivamente os dados. Se um item já foi exposto, apenas o atributo |
|
GenerateItemDataFuncName |
string |
Não |
Função para gravar dados do item na tabela de exposição. Se vazio, o sistema usa a função integrada do mecanismo PAI-Rec e retorna apenas os IDs dos itens. |
|
GenerateItemDataExpr |
string |
Não |
Expressão para construir os dados do item a serem gravados na tabela de exposição. Para a sintaxe, consulte expr-lang/expr. Variáveis disponíveis: |
|
GenerateUserDataExpr |
string |
Não |
Expressão para construir o identificador de usuário na tabela de exposição. Para a sintaxe, consulte expr-lang/expr. Variáveis disponíveis: |
|
WriteLogExcludeScenes |
[]string |
Não |
Especifica os cenários nos quais o sistema não grava logs de exposição. |
Hologres
{
"FilterConfs": [
{
"Name": "holo_exposure_filter",
"FilterType": "User2ItemExposureFilter",
"MaxItems": 100,
"TimeInterval": 172800,
"WriteLog": true,
"DaoConf": {
"AdapterType": "hologres",
"HologresName": "holo_info",
"HologresTableName": "exposure_history"
}
}
]
}
Parâmetros de DaoConf
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
AdapterType |
string |
Sim |
Tipo da fonte de dados. Defina o valor como hologres. |
|
HologresName |
string |
Sim |
Nome personalizado da fonte de dados especificado no parâmetro HologresConfs. Exemplo: holo_info. |
|
HologresTableName |
string |
Sim |
Nome da tabela de exposição. |
Defina time_to_live_in_seconds para a tabela de exposição conforme as necessidades do seu negócio.
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 'Exposure history table';
COMMIT;
PAI-FeatureStore
A fonte de dados online integrada do PAI-FeatureStore, FeatureDB, utiliza um algoritmo de filtro Bloom para oferecer suporte à filtragem de exposição no PAI-Rec.
Para usar o PAI-FeatureStore nas tabelas de exposição, crie uma FeatureView em tempo real com as seguintes configurações:
Em View Name, insira user_expose. Em Write Mode, selecione Custom Table Structure. Defina Number of Shards como 5 e Number of Replicas como 1.
Configure os seguintes parâmetros principais:
Em Type, selecione Real-time.
Em Feature Entity, selecione user.
Nos Feature Fields, adicione
user_id,item_idetimestampcom os seguintes tipos de dados:stringparauser_ideitem_id, eint64paratimestamp. Definauser_idcomo Primary Key e selecionetimestampcomo Event Time.Em Feature Lifecycle, defina o período de retenção desejado para os dados de exposição do usuário. O padrão é 2 dias.
-
Na seção obrigatória Advanced Configuration, insira {"table_type":"bloom", "expose_count":5000}. O parâmetro
table_typeativa o filtro Bloom eexpose_countdefine o número máximo de itens de exposição retidos por usuário.Exemplo de configuração para filtragem de exposição no mecanismo PAI-Rec:
{
"FilterConfs": [
{
"Name": "fs_exposure_filter",
"FilterType": "User2ItemExposureFilter",
"TimeInterval": 300,
"WriteLog": true,
"DaoConf": {
"AdapterType": "featurestore",
"FeatureStoreName": "fs_pairec",
"FeatureStoreViewName": "user_expose"
}
}
]
}
TimeInterval é medido em segundos e define o período máximo de retenção para itens de pseudoexposição gravados pelo mecanismo. Este parâmetro aplica-se apenas quando WriteLog é true. A configuração anterior refere-se à pseudoexposição. Para exposição real, em que o mecanismo PAI-Rec não grava dados, defina WriteLog como false. Nesse cenário, o parâmetro TimeInterval é desnecessário.
Exemplo de configuração para exposição real:
"FilterConfs": [
{
"Name": "fs_exposure_filter2",
"FilterType": "User2ItemExposureFilter",
"WriteLog": false,
"DaoConf": {
"AdapterType": "featurestore",
"FeatureStoreName": "fs_pairec",
"FeatureStoreViewName": "user_expose"
}
}
]
Como os ciclos de vida para pseudoexposição e exposição real costumam diferir, utilize uma tabela FeatureView separada para cada caso.
Consulte Gravar recursos para obter instruções sobre como gravar dados de exposição real.
A tabela a seguir descreve os parâmetros em DaoConf.
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
AdapterType |
string |
Sim |
Tipo da fonte de dados. O valor deve ser |
|
FeatureStoreName |
string |
Sim |
Nome definido pelo usuário para a instância do PAI-FeatureStore, especificado em |
|
FeatureStoreViewName |
string |
Sim |
Nome da FeatureView para a tabela de exposição. |
Redis
{
"FilterConfs": [
{
"Name": "redis_exposure_filter",
"FilterType": "User2ItemExposureFilter",
"MaxItems": 100,
"TimeInterval": 172800,
"WriteLog": true,
"DaoConf": {
"AdapterType": "redis",
"RedisName": "redis_info",
"RedisPrefix": "exposure_"
}
}
]
}
Parâmetros de DaoConf
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
AdapterType |
string |
Sim |
Tipo da fonte de dados. Defina o valor como redis. |
|
RedisName |
string |
Sim |
Nome personalizado da fonte de dados especificado no parâmetro RedisConfs. Exemplo: redis_info. |
|
RedisPrefix |
string |
Não |
Prefixo da chave para dados de exposição. A chave consiste no valor de RedisPrefix e no ID exclusivo (UID) do usuário. |
Tablestore
{
"FilterConfs": [
{
"Name": "ots_exposure_filter",
"FilterType": "User2ItemExposureFilter",
"MaxItems": 100,
"TimeInterval": 172800,
"WriteLog": true,
"DaoConf": {
"AdapterType": "tablestore",
"TableStoreName": "tablestore_info",
"TableStoreTableName": "exposure_history"
}
}
]
}
Parâmetros de DaoConf
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
AdapterType |
string |
Sim |
Tipo da fonte de dados. Valores válidos: hologres, mysql e tablestore. |
|
TableStoreName |
string |
Sim |
Nome personalizado da fonte de dados especificado no parâmetro TableStoreConfs. Exemplo: tablestore_info. |
|
TableStoreTableName |
string |
Sim |
Nome da tabela de exposição. |
time_to_live_in_seconds: ciclo de vida dos dados. Especifique um valor personalizado para o parâmetro.
|
Parâmetro |
Categoria |
Tipo |
Descrição |
Exemplo |
|
user_id |
Chave primária |
string |
UID do usuário. |
10944750 |
|
auto_id |
Chave primária |
integer |
Coluna de incremento automático. |
|
|
item_ids |
Propriedade |
string |
IDs dos itens. Vários IDs são separados por vírgulas (,). Quando vários itens são expostos simultaneamente, o sistema insere um único registro com os IDs. |
17019277,17019278 |
Rebaixamento por impressão
Quando o pool de recall de um usuário é pequeno, a filtragem de impressão pode eliminar todos os itens disponíveis. Para evitar isso, marque os itens já visualizados em vez de filtrá-los completamente. Durante a reclassificação, aplique boosting e rebaixamento para mover esses itens marcados para o final da lista. O exemplo a seguir demonstra essa configuração para uma fonte de dados Hologres. O processo é semelhante para outras fontes de dados.
{
"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"
}
]
}
]
}
This JSON example defines filter and sort configurations. The FilterConfs section uses the holo_exposure_filter to filter out items a user has already been exposed to, based on data from the exposure_history table in Hologres. The SortConfs section uses boost_score_sort for score boosting: if an item has been exposed (_is_exposure_ is 1), its score is divided by 10, reducing its ranking.
User2ItemCustomFilter
Hologres
Para filtrar dados, forneça uma tabela de filtro personalizada de usuário para item. Geralmente, essa tabela é gerada offline. Por exemplo, execute um job diário que agregue todos os itens aos quais um usuário foi exposto nos últimos 15 dias. Os IDs dos itens são então armazenados em um campo, como item_ids, como uma string separada por vírgulas.
{
"FilterConfs": [
{
"Name": "u2i_custom_filter",
"FilterType": "User2ItemCustomFilter",
"DaoConf": {
"AdapterType": "hologres",
"HologresName": "holo_info",
"HologresTableName": "u2i_custom_filter"
},
"ItemStateCacheSize": 10000,
"ItemStateCacheTime": 3600
}
]
}
Parâmetros de DaoConf
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
AdapterType |
string |
Sim |
Tipo da fonte de dados. O valor é |
|
HologresName |
string |
Sim |
Nome personalizado da fonte de dados Hologres, conforme configurado em |
|
HologresTableName |
string |
Sim |
Nome da tabela de exposição personalizada. |
|
ItemStateCacheSize |
int |
Não |
Número máximo de entradas no cache. Um valor maior que 0 ativa o cache. |
|
ItemStateCacheTime |
int |
Não |
Tempo de vida (TTL) das entradas de cache, em segundos. Padrão: 3600. |
O esquema da tabela é o seguinte:
|
Parâmetro |
Categoria |
Tipo |
Descrição |
Exemplo |
|
user_id |
chave primária |
string |
ID exclusivo do usuário. |
10944750 |
|
item_ids |
atributo |
string |
Lista de IDs exclusivos de itens separados por vírgulas. |
17019277,17019278 |
Tablestore (OTS)
Para filtrar dados, forneça uma tabela de filtro personalizada de usuário para item.
{
"FilterConfs": [
{
"Name": "u2i_custom_filter",
"FilterType": "User2ItemCustomFilter",
"DaoConf": {
"AdapterType": "tablestore",
"TableStoreName": "tablestore_info",
"TableStoreTableName": "u2i_table"
}
}
]
}
Parâmetros de DaoConf
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
AdapterType |
string |
Sim |
Tipo da fonte de dados. O valor é |
|
TableStoreName |
string |
Sim |
Nome personalizado da fonte de dados especificado no parâmetro TableStoreConfs. Exemplo: tablestore_info. |
|
TableStoreTableName |
string |
Sim |
Nome da tabela de exposição personalizada. |
A tabela de exposição é definida pelos seguintes parâmetros.
|
Parâmetro |
Categoria |
Tipo |
Descrição |
Exemplo |
|
user_id |
Chave primária |
string |
UID do usuário. |
10944750 |
|
item_ids |
Propriedade |
string |
IDs dos itens. Vários IDs são separados por vírgulas (,). |
17019277,17019278 |
PAI-FeatureStore
Este recurso suporta apenas FeatureViews que usam FeatureDB como fonte de dados online.
Assim como na filtragem de exposição descrita anteriormente, forneça uma FeatureView em tempo real. Grave dados nesta view usando um SDK Java ou conector Flink. Para detalhes, consulte Gravar recursos. O mecanismo PAI-Rec lê dados desta view para filtragem. Configure a FeatureView da seguinte forma:
Defina o nome da view como user2item_custom_filter, selecione Custom Table Structure como método de gravação e escolha Less than 10 million para a escala estimada de dados.
Parâmetros principais:
Em Type, selecione Real-time.
Em Feature entity, selecione
user.Os Feature fields devem incluir
user_id,item_idetimestamp. Definauser_idcomo primary key e selecione event time paratimestamp. É obrigatório designar uma primary key e um event time. Quanto aos tipos de dados,user_ideitem_idsãostring, etimestampéint64. O timestamp está em milissegundos.O feature TTL padrão é de 2 dias. Ajuste esse valor conforme necessário. O feature TTL especifica o tempo de vida de uma linha de dados, calculado com base no valor de
timestamp.-
O campo Advanced settings é obrigatório. Insira {"table_type":"bloom"}. O parâmetro
table_typehabilita o suporte a filtro bloom para a tabela criada.Exemplo de configuração para o mecanismo PAI-Rec:
{
"FilterConfs": [
{
"Name": "u2i_custom_filter",
"FilterType": "User2ItemCustomFilter",
"DaoConf": {
"AdapterType": "featurestore",
"FeatureStoreName": "fs_pairec",
"FeatureStoreViewName": "u2icustom_filter"
}
}
]
}
Parâmetros de DaoConf
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
AdapterType |
string |
Sim |
Tipo da fonte de dados. O valor é |
|
FeatureStoreName |
string |
Sim |
Nome personalizado da fonte de dados PAI-FeatureStore, conforme configurado em |
|
FeatureStoreViewName |
string |
Sim |
Nome da FeatureView usada para a tabela de filtro personalizada. |
AdjustCountFilter
O AdjustCountFilter embaralha aleatoriamente os itens retornados pelos links de recall e retém um número especificado de itens.
Configuração de exemplo:
{
"FilterConfs": [
{
"Name": "adjust_count_filter",
"FilterType": "AdjustCountFilter",
"ShuffleItem": true,
"RetainNum": 500
}
]
}
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
ShuffleItem |
string |
Sim |
Define se o sistema deve embaralhar os itens retornados pelo link de recall. |
|
RetainNum |
string |
Sim |
Número de itens a reter. |
PriorityAdjustCountFilter
O PriorityAdjustCountFilter controla o número de itens selecionados dos resultados retornados pelos links de recall com base nas pontuações. Cada link de recall classifica os itens recomendados de acordo com suas pontuações.
Configuração de exemplo:
{
"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"
}
]
}
]
}
Parâmetro | Tipo | Obrigatório | Descrição |
Name | string | Sim | Nome personalizado do filtro. |
FilterType | string | Sim | Tipo do filtro. Defina o valor como PriorityAdjustCountFilter. |
RecallName | string | Sim | Nome do link de recall. |
AdjustCountConfs | json array | Sim | Configurações do filtro PriorityAdjustCountFilter. |
| int | Sim | Número máximo de itens selecionados dos resultados retornados pelo link de recall. |
| string | Não | Tipo de ajuste de quantidade. Valores válidos: accumulator e fix. accumulator:
fix:
|
ItemStateFilter
Filtrar itens recuperados por estado exige buscar seus estados em tempo real, pois eles podem mudar a qualquer momento. Esses estados geralmente residem em uma tabela dedicada.
Hologres
{
"FilterConfs": [
{
"Name": "ItemStateFilter",
"FilterType": "ItemStateFilter",
"ItemStateDaoConf": {
"AdapterType": "hologres",
"HologresName": "",
"HologresTableName": "",
"ItemFieldName": "",
"WhereClause": "",
"SelectFields": ""
},
"ItemStateCacheSize": 50000,
"ItemStateCacheTime": 3600,
"FilterParams": [
]
}
]
}
Se o estado do item mudar com pouca frequência, configure as opções de cache.
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
ItemStateCacheSize |
int |
Não |
Número de itens a armazenar em cache. |
|
ItemStateCacheTime |
int |
Não |
Tempo de vida (TTL) do cache. Unidade: segundos. |
Parâmetros de ItemStateDaoConfig
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
AdapterType |
string |
Sim |
Tipo da fonte de dados. Valores válidos: hologres, mysql e tablestore. |
|
HologresName |
string |
Sim |
Nome personalizado da fonte de dados especificado no parâmetro HologresConfs. Exemplo: holo_info. |
|
HologresTableName |
string |
Sim |
Nome da tabela que armazena os estados dos itens na instância Hologres. |
|
ItemFieldName |
string |
Sim |
Chave primária da tabela que armazena os estados dos itens. |
|
WhereClause |
string |
Não |
Instrução condicional usada para filtragem. |
|
SelectFields |
string |
Sim |
Campos a consultar. |
Parâmetros de 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
}
]
}
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
Name |
string |
Sim |
Nome do recurso. |
|
Domain |
string |
Não |
Domínio do recurso. Valores válidos: |
|
Operator |
string |
Sim |
Operador. Valores válidos: equal, not_equal, in, greater, greaterThan, less e lessThan. |
|
Type |
string |
Sim |
Tipo do recurso. |
|
Value |
object |
Sim |
Valor da condição. |
Nota: Use tanto WhereClause quanto FilterParams para filtragem. WhereClause filtra dados na fonte, semelhante a uma cláusula WHERE SQL. Já FilterParams filtra localmente os dados recuperados.
Para mais informações sobre o uso de operadores, consulte o apêndice.
PAI-FeatureStore
{
"FilterConfs": [
{
"Name": "ItemStateFilter",
"FilterType": "ItemStateFilter",
"ItemStateDaoConf": {
"AdapterType": "featurestore",
"FeatureStoreName": "",
"FeatureStoreViewName": "",
"ItemFieldName": "",
"SelectFields": ""
},
"ItemStateCacheSize": 50000,
"ItemStateCacheTime": 3600,
"FilterParams": [
]
}
]
}
Se o estado do item mudar com pouca frequência, configure as opções de cache.
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
ItemStateCacheSize |
int |
Não |
Número de itens a armazenar em cache. |
|
ItemStateCacheTime |
int |
Não |
Tempo de vida (TTL) do cache. Unidade: segundos. |
**Definição de ItemStateDaoConfig:**
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
AdapterType |
string |
Sim |
Tipo da fonte de dados. O valor deve ser |
|
FeatureStoreName |
string |
Sim |
Nome personalizado da instância PAI-FeatureStore, configurado em |
|
FeatureStoreViewName |
string |
Sim |
Nome da feature view que armazena o estado do item. |
|
ItemFieldName |
string |
Sim |
Chave primária da tabela de estado do item. |
|
SelectFields |
string |
Sim |
Campos a recuperar. |
**Definição de 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
}
]
}
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
Name |
string |
Sim |
Nome do recurso a filtrar. |
|
Domain |
string |
Não |
Domínio do recurso. Valores válidos: |
|
Operator |
string |
Sim |
Operador de comparação. Valores suportados: |
|
Type |
string |
Sim |
Tipo do recurso. |
|
Value |
object |
Sim |
Valor da condição. |
Para mais informações sobre o uso de operadores, consulte o apêndice.
SnakeFilter
A etapa de recall recupera um conjunto de candidatos de múltiplos canais. O SnakeFilter combina dados desses canais em ordem round-robin, com base nas proporções de peso especificadas.
Por exemplo, se houver três canais de recall (A, B e C) com pesos 1, 2 e 3, respectivamente, a lógica de combinação funciona assim:
Selecione um elemento do conjunto candidato A.
Selecione dois elementos do conjunto candidato B.
Selecione três elementos do conjunto candidato C.
Repetir esse processo até obter o número necessário de elementos.
Existem duas políticas para lidar com elementos duplicados:
REFILL_ON_DUPLICATE: Se um elemento recuperado de um conjunto candidato duplicar outro selecionado anteriormente, o sistema busca no mesmo conjunto um substituto exclusivo. Por exemplo, se os três elementos recuperados do conjunto C duplicarem elementos já selecionados dos conjuntos A e B, o sistema procura substitutos no conjunto C.SKIP_ON_DUPLICATE: O sistema ignora elementos duplicados e passa para a próxima iteração. Por exemplo, se os três elementos recuperados do conjunto C duplicarem elementos dos conjuntos A e B, o conjunto C não retorna nenhum elemento nesta rodada. O processo inicia então uma nova iteração, começando pelo conjunto 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
}
]
}
]
}
Parâmetro | Tipo | Obrigatório | Descrição |
Name | string | Sim | Nome personalizado do filtro. |
FilterType | string | Sim | Tipo do filtro. O valor deve ser |
RetainNum | string | Sim | Número de elementos a reter no conjunto candidato final. |
SnakeType | string | Não |
|
AdjustCountConfs | json array | Sim | Define a configuração para cada canal de recall. |
| string | Sim | Nome do canal de recall. |
| int | Sim | Peso relativo usado para determinar o número de entradas a recuperar deste canal de recall em cada rodada. |
Aplicar este filtro adiciona o atributo snake_filter a um item. Esse atributo especifica o caminho de recall do item, sua posição indexada em zero e sua pontuação. Por exemplo, snake_filter:GroupHotRecall:0:0.144200 indica que o item vem do caminho de recall GroupHotRecall na posição 0, sendo portanto o primeiro item.
CompletelyFairFilter
O CompletelyFairFilter classifica os itens retornados pelos links de recall com base em suas pontuações e seleciona itens dos resultados de cada link de maneira equitativa.
{
"FilterConfs": [
{
"Name": "CompletelyFairFilter",
"FilterType": "CompletelyFairFilter",
"RetainNum": 500
}
]
}
DimensionFieldUniqueFilter
O DimensionFieldUniqueFilter funciona de maneira diferente do UniqueFilter, pois remove itens com valores de campo duplicados.
{
"FilterConfs": [
{
"Name": "DimensionFieldUniqueFilter",
"FilterType": "DimensionFieldUniqueFilter",
"Dimension": ""
}
]
}
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
Name |
string |
Sim |
Nome do filtro personalizado. |
|
FilterType |
string |
Sim |
Tipo do filtro. Deve ser |
|
Dimension |
string |
Sim |
Campo de atributo usado para deduplicar itens. Se este campo estiver vazio para um item, o sistema retém o item. |
ConditionFilter
Este filtro composto executa dinamicamente um filtro específico com base nas condições da solicitação, como recursos do usuário ou aqueles passados no context. Configure uma ou mais combinações, vinculando cada conjunto de condições a um filtro específico definido em FilterConfs.
O exemplo anterior define dois filtros independentes: adjust_count_filter e CompletelyFairFilter. O ConditionFilter roteia solicitações com base em condições. Quando o atributo de usuário query for igual a "1", ele usa adjust_count_filter. Se nenhuma condição corresponder, ele recorre ao filtro especificado por DefaultFilterName (CompletelyFairFilter).
Parâmetros de configuração:
Parâmetro | Tipo | Obrigatório | Descrição |
Name | string | Sim | Nome do filtro personalizado. |
FilterType | string | Sim | Tipo do filtro. Defina o valor como |
ConditionFilterConfs | json map | Sim | Configuração das condições. |
| json array | Não | Array de regras de correspondência de condições. Quando uma solicitação corresponde a uma condição, o serviço aplica o filtro correspondente. |
| string | Não | Se nenhuma condição em |
Configuração de FilterConfs:
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
Conditions |
[]FilterParamConfig |
Não |
Condições de correspondência para a regra. |
|
FilterName |
string |
Não |
Nome do filtro a aplicar quando as condições forem atendidas. Este filtro deve estar definido em FilterConfs. |
Configure FilterParamConfig da seguinte forma:
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
Name |
string |
Sim |
Nome do recurso para um item ou usuário. |
|
Domain |
string |
Sim |
Valor enumerado ( |
|
Operator |
string |
Sim |
Operador de comparação. Valores possíveis: |
|
Type |
string |
Sim |
Tipo do recurso. |
|
Value |
object |
Sim |
Valor do recurso. |
Para detalhes sobre as configurações de condição, consulte o apêndice.
UniqueFilter
O UniqueFilter garante que cada ID de item seja exclusivo. Se dois links de recall retornarem o mesmo ID de item, o UniqueFilter prioriza o ID retornado primeiro.
Use o UniqueFilter ao configurar o parâmetro FilterNames, sem necessidade de configurar o próprio UniqueFilter.
Uso de filtros
Assim como na configuração de recall, a configuração de filtro usa o parâmetro FilterNames. Este parâmetro é um Map[string]object que mapeia cada cenário a um conjunto de políticas de filtro.
${scene_name}: Nome do cenário. Para aplicar a mesma configuração a vários cenários, use
default.UniqueFilter: Nome personalizado para um filtro definido em FilterConfigs.
Apêndice
Exemplos de operadores
equal (igual ao valor especificado)
{
"Name": "publicStatus",
"Type": "int",
"Operator": "equal",
"Value": 0
}
not_equal (diferente do valor especificado)
{
"name": "checkStatus",
"type": "int",
"operator": "not_equal",
"value": 2
}
greater (maior que o valor especificado)
{
"Name": "checkStatus",
"Type": "int",
"Operator": "greater",
"Value": 2
}
greaterThan (maior ou igual ao valor especificado)
{
"Name": "checkStatus",
"Type": "int",
"Operator": "greaterThan",
"Value": 2
}
less (menor que o valor especificado)
{
"Name": "checkStatus",
"Type": "int",
"Operator": "less",
"Value": 2
}
lessThan (menor ou igual ao valor especificado)
{
"Name": "checkStatus",
"Type": "int",
"Operator": "lessThan",
"Value": 2
}
in (corresponde a qualquer valor em um array)
String
{
"Name": "state",
"Type": "string",
"Operator": "in",
"Value": ["success","ok"]
}
not_in (não corresponde a nenhum item no array)
{
"name": "state",
"type": "int",
"operator": "not_in",
"value": [2,4,6]
}
Também é possível usar o tipo string e configurá-lo com o operador in.
contains (corresponde a qualquer item em um array)
{
"Name": "state",
"Type": "[]int",
"Operator": "contains",
"Value": [2,4,6]
}
tipo string
{
"Name": "state",
"Type": "[]string",
"Operator": "contains",
"Value": ["success","ok"]
}
not_contains(não contém nenhum dos itens especificados)
{
"Name": "state",
"Type": "[]int",
"Operator": "not_contains",
"Value": [2,4,6]
}
The following code uses the not_contains operator to filter for items where the state field does not contain any value from the array [2, 4, 6]. This filter is useful for excluding specific items from a query result. For example, you could use this filter to retrieve all tasks except those with a status of 'archived' (ID 2), 'on-hold' (ID 4), or 'deprecated' (ID 6).
Você também pode usar um array de strings. Para detalhes de configuração, consulte o operador contains.
bool (combina múltiplos operadores de correspondência de condições)
Combine condições com or.
{
"Operator": "bool",
"Type": "or",
"Configs":
[
{
"Name": "publicStatus",
"Type": "int",
"Operator": "equal",
"Value": 0
},
{
"Name": "checkStatus",
"Type": "int",
"Operator": "greater",
"Value": 2
}
]
}
Usar and é semelhante: defina Type como and.
expression (corresponde quando a expressão é avaliada como verdadeira)
{
"Operator": "expression",
"Value": "item.size == 43"
}
item.size é um atributo de item; para acessar um atributo de user, use user.xxx.
As expressões suportam operadores aritméticos, de comparação, lógicos e ternários. Exemplo mais complexo:
{
"Operator": "expression",
"Value": "!item.sold_out and user.list != nil ? item.size in user.list : true"
}
Para a definição completa da sintaxe de expressão, consulte https://expr-lang.org/docs/language-definition.
Os recursos de contexto fornecidos no campo features da interface do mecanismo associam-se ao user. Se Value precisar ser uma variável em vez de um valor fixo, defina-o como "user.xxx" para referenciar um atributo específico do usuário. Por exemplo, para referenciar o atributo age do usuário, a configuração é "Value":"user.age".