首页 > 解决方案 > 根据日期范围和库存(可为空值)过滤亚马逊个性化可用性

问题描述

我有大约 500,000 件商品,其可用性取决于手头的库存和可用日期( available_on 和 disconnect_on )。我想从推荐中过滤不可用的项目,我希望是这样的:

Include 
Items.available_on <= $now AND 
(Items.discountinue_on IS NULL OR Items.discountinue_on > $now ) AND 
Items.stock_on_hand > 0

但是,我不知道如何在 aws 个性化过滤器中编写 about 表达式。

标签: amazon-personalize

解决方案


动态过滤器(即,使用参数而不是固定值)只能与=andIN运算符一起使用。从过滤器文档

对于使用 = 和 IN 运算符的表达式,请使用美元符号 ($) 和参数名称来添加占位符参数作为值。

因此,当前不支持您拥有的位置<= $now和示例中的位置。> $now但是,Items.stock_on_hand > 0很好,因为0它是一个固定值。另外,IS NULL不支持。

有几种可行的替代方法。首先,您可以在项目数据集中使用单个字段来指示项目是否可用(例如,is_available)。因此,一个true/false值表示 1/ 可用、2/ 未停产和 3/ 现有库存的当前状态。这意味着您的应用程序需要在项目的可用性状态更改时更新此标志。换句话说,当商品停产或缺货时,将其is_available字段值更改为false。这可以使用PutItems API完成。您的过滤器变得更加简单。

INCLUDE ItemID WHERE Items.is_available = "true"

另一种方法是在您的项目数据集和过滤器表达式中保留available_ondiscontinue_onstock_on_hand,但替换$now为固定/硬编码值。

INCLUDE ItemID WHERE Items.available_on <= 20211105 AND Items.discontinue_on > 20211105 AND Items.stock_on_hand > 0

格式20211105中的当前日期在哪里。YYYYMMDD您可以添加小时、分钟、秒以获得更多粒度。当然,这意味着过滤器表达式中的日期时间需要定期更新。这需要定期创建具有更新日期时间的新过滤器,将您的应用切换为使用新过滤器,然后删除旧过滤器。基本上随着时间的推移旋转过滤器。这个无服务器应用程序可以使这个过程变得更加容易。

https://github.com/james-jory/amazon-personalize-filter-rotator


推荐阅读