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();

Благодарю.


person o'mac    schedule 06.09.2012    source источник


Ответы (2)


Другой вариант, если вы находите сортировку с помощью MapReduce слишком громоздкой, -- сортировка на стороне клиента.

Если ваш набор результатов не настолько велик, чтобы вы не могли поместить его в память (хотя если это так, у вас могут быть другие проблемы с точки зрения MapReduce) — просто отсортируйте его в java, в памяти, когда он вернется.

person Dmitri Zagidulin    schedule 21.10.2012

На веб-сайте Basho, который вы может получится использовать. Если структура документа, который вы хотите отсортировать, слишком сложна для этого, вам может потребоваться определить собственную функцию сокращения в JavaScript.

person Christian Dahlqvist    schedule 13.09.2012
comment
Спасибо, Кристиан, я видел это раньше. чего я не понимаю, так это того, как я могу использовать его из java-клиента. это не работает: addReducePhase(new NamedJSFunction(Contrib.sort, { by: 'passengers', order: 'desc' }), true); потому что метод NamedJSFunction ожидает 2 параметра String. структура моего документа не сложна - это pojo. - person o'mac; 16.09.2012
comment
Чтобы иметь возможность использовать функцию по имени и не передавать ее через запрос mapreduce, функцию необходимо сделать доступной на всех узлах riak. Это можно сделать, определив параметр js_source_dir в файле app.config, как описано здесь. Вам нужно будет запустить «bin/riak-admin js_reload», чтобы функции стали доступны. - person Christian Dahlqvist; 16.09.2012