使用Java Client在Riak中存储对象时如何添加二级索引的示例?

时间:2013-04-08 20:10:17

标签: riak

我将哈希地图存储在这样的riak存储桶中:

bucket.store(key, docHashMap).execute();

我想用二级索引存储对象。

我将如何做到这一点?我知道IRiakObject有一个addIndex方法,但如何在存储之前访问IRiakObject

我认为我想要做的是预期的用例,但我无法在此找到任何文档或示例。如果你能指出我会非常感激的话。

谢谢!

更新

@Brian Roach在Riak邮件列表及其下方回答了此问题。这是我编写的扩展HashMap的自定义类:

class DocMap extends HashMap<String, Object> {
    /**
     * Generated id
     */
    private static final long serialVersionUID = 5807773481499313384L;

    @RiakIndex(name="status") private String status;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

我仍然可以将该对象用作普通的hashmap并存储键和值,但它也会将“status”写入二级索引(实际上最终被称为“status_bin”,因为它是一个字符串。

1 个答案:

答案 0 :(得分:2)

如果你只是传入核心Java HashMap的一个实例......你不能。

默认JSONConverter适用于元数据的方式(例如索引) 是通过注释。

传入的对象需要有一个带注释的字段 @RiakIndex("index_name")。该字段可以是Long / Set<Long>String / Set<String>(分别针对_int_bin个索引。)

这些不会转换为JSON,因此它们不会影响您的序列化 数据。您可以为多个索引提供多个字段。

您不必将“_int”或“_bin”附加到索引名称中 注释 - 它是根据类型自动完成的。

最简单的事情就是扩展HashMap并简单地添加 注释字段。