按商店REDIS搜索和分组产品

时间:2015-02-25 09:27:43

标签: ruby-on-rails redis key-value key-value-store

我在redis中找到了关于Group By的question,但实际上并没有解决我的问题。我有一个复杂的产品搜索,一旦我得到了我想要的产品,我想把它们分到商店,因为它们必须在地图上展示。

我的实际实施如下:

- 按模式搜索产品的功能,它将产品ID返回为“product:id”

product_ids = search_products_by_indexing(pattern)

- 名称为“sold”的哈希,其中包含product:id / shop:id作为键/值。

shops = $redis.hmget("selling", *product_ids)
# this returns list of shops as "shop:id" which sell the given prodcuts

- 然后我将商店与另一个商店交叉,以便只获得位于特定城市的商店。

result_shops = shops & $redis.smembers("shops:city_name")
# OR by redis
$zinterstore(tem_id, shops, $redis.smembers("shops:city_name"))
result_shops = $redis.zrange(temp_id, 0, -1)

- 我唯一需要的是将搜索到的产品按result_shops分组。或者例如,这可以是商店的哈希:id / [product:id]作为键/值(这是最终结果,商店必须在城市,产品与模式匹配)

我的解决方案是否适合此问题,或者可能有更好的实施方案来解决它?任何建议都将非常感谢!!

更新:一个产品只属于一个商店,一个商店可以有多个产品。

1 个答案:

答案 0 :(得分:1)

  

- 名称为“sold”的哈希,其中包含product:id / shop:id as key / value。

这种哈希的使用只允许你shop:idproduct:idshop:id,这意味着只有一家商店可以销售给定的产品...也许该值应该是{{1}的连续列表或者甚至更好 - 使用Set selling:product:id并将所有相关的shop:id存储在其中。

  

- 然后我将商店与另一个商店交叉,以便只获得位于特定城市的商店。

IMO这是多余的,因为相交的结果总是shops:city_name

  

- 我唯一需要的是将搜索到的产品按result_shops分组。

如果您已经使用我的Set而不是Hash建议,可以通过以下方式完成:

ZINTERSTORE tem_id 2 shops:city_name selling:product:id
ZRANGE tem_id 0 -1
相关问题