2

次のように riak バケットにハッシュマップを保存しています。

バケット.store(キー, 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;
    }
}

オブジェクトを通常のハッシュマップとして使用し、キーと値を保存することもできますが、「ステータス」もセカンダリ インデックスに書き込みます (文字列であるため、実際には「status_bin」と呼ばれることになります)。

4

1 に答える 1

2

コア Java HashMap のインスタンスを渡すだけの場合は、できません。

デフォルトJSONConverterがメタデータ (インデックスなど) に対して機能する方法は、注釈を使用することです。

渡されるオブジェクトには、 で注釈が付けられたフィールドが必要 @RiakIndex("index_name")です。そのフィールドはLong/Set<Long>または String/ Set<String>(それぞれ_intおよび_binインデックス) にすることができます。

これらは JSON に変換されないため、シリアル化されたデータには影響しません。複数のインデックスに対して複数のフィールドを持つことができます。

注釈のインデックス名に「_int」または「_bin」を追加する必要はありません。タイプに基づいて自動的に行われます。

最も簡単なことは、HashMap を拡張して、注釈付きフィールドを追加することです。

于 2013-04-08T22:50:19.113 に答える