Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Riak:通过Java/Scala在键上创建索引_Java_Scala_Indexing_Riak - Fatal编程技术网

Riak:通过Java/Scala在键上创建索引

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

我在riak上有一个存储桶,我用这种方式存储简单的
时间戳->字符串
值:

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索引时不想考虑这些键