amazon-personalize - 根据日期范围和库存(可为空值)过滤亚马逊个性化可用性
问题描述
我有大约 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 表达式。
解决方案
动态过滤器(即,使用参数而不是固定值)只能与=
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
推荐阅读
- list - Flutter 无法更新列表
- ios - 检索后如何访问 AsyncImage 中的图像以保存图像?( 斯威夫特 )
- flutter - itemBuilder 错误:必须返回非空值,因为返回类型 'Widget' 不允许为空
- modelica - 阵列可扩展连接器问题
- rust - 如何使用打印!编译发布时使用 Rocket?
- vue.js - Vue - 如何自定义到 vue.config.js 中定义的页面的路由?
- javascript - 如何在一个模块 React Js 中显示多个数据
- html - 如何使用 understrap 主题在我的子菜单中创建嵌套子菜单?
- php - 在 Laravel 中创建 Api,错误:未捕获(承诺中) SyntaxError: Unexpected token < in JSON at position 0
- python - 如何使用 apply 遍历 panda 数据框并访问下一个值?