动态过滤器(即,使用参数而不是固定值)只能与=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_on、discontinue_on和stock_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