我将哈希地图存储在这样的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”,因为它是一个字符串。
答案 0 :(得分:2)
如果你只是传入核心Java HashMap的一个实例......你不能。
默认JSONConverter
适用于元数据的方式(例如索引)
是通过注释。
传入的对象需要有一个带注释的字段
@RiakIndex("index_name")
。该字段可以是Long
/ Set<Long>
或
String
/ Set<String>
(分别针对_int
和_bin
个索引。)
这些不会转换为JSON,因此它们不会影响您的序列化 数据。您可以为多个索引提供多个字段。
您不必将“_int”或“_bin”附加到索引名称中 注释 - 它是根据类型自动完成的。
最简单的事情就是扩展HashMap并简单地添加 注释字段。