【问题标题】:Example of how to add secondary index when storing object in Riak with Java Client?使用 Java Client 在 Riak 中存储对象时如何添加二级索引的示例?
【发布时间】:2013-04-09 08:54:31
【问题描述】:

我将哈希映射存储在 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”,因为它是一个字符串。

【问题讨论】:

  • 在这里之前的邮件列表中发现了这个,但我想我会复制答案以供参考。
  • 如果使用扩展 HashMap 的类的示例成为文档的一部分,我想很多人都会受益。通过这样做,它表明您可以在 Java 客户端中拥有与使用 python 客户端相同级别的多功能性(即,您可以存储类似 dict 的对象 - HashMaps - 可以具有任意字段名称,并且仍然为二级索引和类似的东西指定字段)

标签: riak


【解决方案1】:

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

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

传入的对象需要有一个注解的字段 @RiakIndex("index_name")。该字段可以是 Long/Set&lt;Long&gt;String/Set&lt;String&gt;(分别用于_int_bin 索引)。

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

您不必将“_int”或“_bin”附加到 注释 - 根据类型自动完成。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多