2013-04-08 37 views
2

我存儲的散列映射在了Riak桶這樣的:如何在使用Java客戶端將對象存儲在Riak中時添加二級索引的示例?

 
bucket.store(key, docHashMap).execute(); 

我想對象存儲與二級索引。

我該如何做到這一點?我知道IRiakObject有一個addIndex方法,但是如何在存儲之前訪問IRiakObject

我會認爲我正在嘗試做的是預期的用例,但我無法找到任何文檔或示例。如果你能指出我將不勝感激。

謝謝!

更新:

@布賴恩·羅奇回答這個了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_bin」,因爲它是一個字符串。

+0

在此之前在郵件列表中找到了這一點,但想到我會複製SO的參考答案。 – 2013-04-08 22:50:54

+0

我想如果使用擴展HashMap的類的例子成爲文檔的一部分,很多人都會受益。通過這樣做,它表明您可以像使用Python客戶端一樣在Java客戶端中擁有相同級別的通用性(即,您可以存儲類似字典的對象 - HashMaps - 可以具有任意字段名稱,並且仍然指定二級索引的字段和類似的東西) – chaimp 2013-04-09 00:47:57

回答

2

如果你只是路過核心Java的HashMap的實例...你不能。

默認JSONConverter工程的方式元數據(如索引) 是通過註釋。

傳入的對象需要有一個註釋爲 @RiakIndex("index_name")的字段。該字段可以是Long/Set<Long>String/Set<String>(分別爲_int_bin索引)。

這些不會轉換爲JSON,因此它們不會影響您的序列化的 數據。您可以爲多個索引提供多個字段。

您不必在 註釋中的索引名稱上追加「_int」或「_bin」 - 它會根據類型自動完成。

要做的最簡單的事情就是擴展HashMap並簡單地添加 帶註釋的字段。

相關問題