假设一个电子商务网站具有愿望 list 功能。一些用户将很多产品列入心愿单(数量达到数万种)。产品总量以百万计。我们希望实现客户可以像在目录中一样过滤这些产品的功能。
当我们考虑使用 Elasticsearch 来实现这一点时,我们发现最好的方法是使用 terms lookup 。就像,我们为每个用户的愿望 list 创建一个文档,然后使用该文档过滤出我们需要的产品。之后,所有过滤/等等都会定期完成。这里的问题是 Elasticsearch 无法正确对这些产品进行排序 - 即文档如何指定它,因为我们想按愿望 list 时间排序。
就在这时,我决定研究 Vespa。但在阅读文档后,我仍然不知道实现此目的的最佳方法是什么。对于我受 RDBMS 感染的头脑来说,这看起来像是一个需要“加入”的问题。 :)
数据的基数如下:
- 数百万种产品
- 数十万用户
- 数以万计的心愿单商品
那么......有什么想法如何实现或指导阅读什么内容?
最佳答案
在 Vespa 中,您需要两种文档类型(如果您想在 Vespa 中存储愿望 list ,也就是说,这不是必需的)
- 使用 Vespa 的 get api 从 Vespa 或从其他存储解决方案检索给定用户的举报列表。
- 使用 DotProductItem 通过产品 ID 字段以及排名配置文件进行检索和排名。
/search/?yq=select * from products where dotProduct(product_id, {"a":3, "b":2});&ranking=wishlist&hits=10
在这种情况下,a 是愿望 list 中比 b 更新的产品。与之相匹配的排名配置文件:
rank-profile wishlist {
first-phase {
expression:rawScore(product_id)
}
}
您还可以使用 WAND 来加快搜索速度,并仅检索愿望列表中最新/排名靠前的点击。上面的示例检索所有并对所有进行排序。
查看
关于vespa - 电子商务和 Vespa : filtering customer's wishlist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68577560/