2012-09-06 71 views
1

如何在存儲對象的'真實'字段中使用排序功能?我如何設置我想要排序的字段?Riak - MapReduce字段排序

看來,以下是指關鍵,在我的情況下,它是一個UUID,因此沒用排序:

  MapReduceResult result = riakClient. 
          mapReduce("some_bucket"). 
          addMapPhase(new NamedJSFunction("Riak.mapValuesJson"), false). 
          addReducePhase(new NamedErlangFunction("riak_kv_mapreduce", "reduce_sort"), true). 
          execute(); 

感謝。

回答

0

另一種選擇,如果你發現通過MapReduce排序太麻煩,就是 - 在客戶端排序。

如果你的結果集不是很大,以至於你不能把它放到內存中(儘管如果是這樣,你可能還有其他問題,就MapReduce而言) - 只需在java中對內存進行排序它回來了。

1

在您可能可以使用的Basho網站上有一個JavaScript reduce function for sorting by field。如果您想排序的文檔結構太複雜,您可能需要在JavaScript中定義自己的reduce函數。

+0

謝謝克里斯蒂安,我之前就看到過。我不明白的是如何從java客戶端使用它。這是行不通的:addReducePhase(new NamedJSFunction(「Contrib.sort」,{乘:'passengers',order:'desc'}),true);因爲NamedJSFunction方法需要2個字符串參數。我的文檔結構沒有被複制 - 它是一個pojo。 –

+0

爲了能夠按名稱使用該功能,並且不通過mapreduce查詢傳遞該功能,需要在所有riak節點上使用該功能。這可以通過在app.config文件中定義參數'js_source_dir'來完成,如[here]所述(https://help.basho.com/entries/321385-how-do-i-load-3rd-party-javascript -libraries用型式-MAP-減少函數)。您需要運行'bin/riak-admin js_reload'才能使這些功能可用。 –