计算Redis中匹配属性的数量

我想看看从PostgreSQL到Redis的数据集迁移是否对特定搜索查询产生了积极影响.不幸的是,我真的不知道如何组织键和值.

我想要的是用户能够提供属性列表,并且应用程序按照尚未输入的属性的升序提供项目列表.

例如:

Item #1 { prop1, prop2, prop4, prop7 }     Query: "prop1 prop3 prop4 prop5"
Item #2 { prop7, prop8 }                   Result: Item #3
Item #3 { prop2, prop3, prop5 }                    Item #1
                                                   Item #2

到目前为止我想出了什么:

#!/usr/bin/python
properties = (1, 3, 4, 5)
items = ["Properties:%s:items" % id for property in properties ]
redis.zunionstore("query:related_items", items)
redis.zinterstore("query:result", { "Items:all": 1, "query:related_items": -1 })

这将构建一组与用户输入的Propertys连接的有序项目(所有项目的得分均为1).然后,计算与所有项目的排序集合(其中每个值的得分是Propertys的数量)的交集.如果在查询中提供了Item的所有Propertys,则权重被设置为创建0的分数.

由于项目数约为600.000个条目,此查询大约需要4-6秒.有没有更好的方法来实现这一目标?

最佳答案 我想你正在寻找一个Python解决方案,但Ruby的
Ohm库是我最喜欢的基于Redis的数据库类似物.考虑到Python和Ruby以及Ohm的
exceptional documentation之间的相似之处,你可能会发现一些灵感.

点赞