我在Riak中有一个数据集,其中不同的项目已编入索引(使用index_bin
)。我如何在单个请求中搜索其中两个索引具有特定值的对象?示例:gender,last_name,gender = male,last_name = Smith
我会使用Map / Reduce吗?如果是这样,任何示例代码?
答案 0 :(得分:1)
Riak中二级索引的限制是一次只能搜索一个索引。因此,您将无法直接组合索引。
由于索引数据存储在记录的元数据中,您可以创建一个mapreduce作业,该作业将一个2i查询作为输入,并具有基于元数据过滤另一个的映射阶段。然而,使用mapreduce可能会非常慢且效率低,因为需要从磁盘读取传递到映射阶段函数的所有数据。
如果您希望提供相当普遍且可预测的请求,则可以始终创建和使用复合索引。你可以,例如创建一个名为gender_name_bin
的索引,其值可能为male_Smith
。只要第一部分是固定的,这将允许您对索引的最后部分进行范围查询,这提供了一些灵活性。
在最近的版本中,还可以基于正则表达式过滤辅助索引值,这不需要加载实际对象。有关此内容的更多信息,请访问here。