2

我将哈希映射存储在 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;
    }
}

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

4

1 回答 1

2

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

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

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

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

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

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

于 2013-04-08T22:50:19.113 回答