Riak:通过Java/Scala在键上创建索引
我在riak上有一个存储桶,我用这种方式存储简单的Riak:通过Java/Scala在键上创建索引,java,scala,indexing,riak,Java,Scala,Indexing,Riak,我在riak上有一个存储桶,我用这种方式存储简单的时间戳->字符串值: val riakClient = RiakFactory.newClient(myHttpClusterConfig) val myBucket = riakClient.fetchBucket(name).execute myBucket.store(timestamp.toString, value).withoutFetch().w(1).execute public class MyWrapper { @R
时间戳->字符串值:
val riakClient = RiakFactory.newClient(myHttpClusterConfig)
val myBucket = riakClient.fetchBucket(name).execute
myBucket.store(timestamp.toString, value).withoutFetch().w(1).execute
public class MyWrapper {
@RiakIndex(name="timestamp_index")
@RiakKey
public String timestamp;
public String value;
public MyWrapper(String timestamp, String value) {
this.timestamp = timestamp;
this.value = value;
}
}
我现在需要做的是在键上添加索引。我尝试用以下方式定义Java POJO:
val riakClient = RiakFactory.newClient(myHttpClusterConfig)
val myBucket = riakClient.fetchBucket(name).execute
myBucket.store(timestamp.toString, value).withoutFetch().w(1).execute
public class MyWrapper {
@RiakIndex(name="timestamp_index")
@RiakKey
public String timestamp;
public String value;
public MyWrapper(String timestamp, String value) {
this.timestamp = timestamp;
this.value = value;
}
}
然后跑
myBucket.store(new MyWrapper(timestamp.toString, value)).withoutFetch().w(1).execute
这种方法的问题在于,在riak中,实际值存储为json对象:
{"value":"myvalue"}
而我只需要存储myvalue
字符串。有没有办法做到这一点?执行store
时,我看不到任何index(name)
方法,也看不到任何像@RiakKey
这样的注释,只看到值。如果我理解您试图做的事情,您希望键/值对“1403909549”
/code>“Some value”
按时间戳_index=“1403909549”索引
以便您可以查询特定的时间或时间范围
如果是这种情况,则不需要显式添加索引,可以使用与任何其他索引相同的方式查询隐式索引$KEY
由于Riak在LevelDB中存储的所有键都是隐式索引的,因此我认为没有方法再次显式地对它们进行索引。您可以使用RiakObject Builder创建RiakObject,然后在其上添加索引:
val obj = RiakObjectBuilder.newBuilder(bucketName, myKey)
.withValue(myValue)
.addIndex("timestamp_index", timestamp)
.build
myBucket.store(obj).execute
嘿,乔,谢谢你的回答,我不知道隐式的$KEY
索引,+1。如果我必须在myBucket
中只存储这些Timestamp->String
值,那么您的解决方案就可以工作了,但不幸的是,我有其他具有不同语义的键,在查询Timestamp\u索引时不想考虑这些键