Riak: кормить MR результатами поиска + применить ограничение

Я знаю, что можно скормить задание Riak map/reduce с результатами поиска. У меня есть ведро с элементами, которые я хочу найти. Затем мне нужно обработать вершину, скажем, 100, с помощью map/reduce. Наивным решением является поиск ключевого слова, применение ограничения и запуск нового задания сопоставления/уменьшения с набором из 100 ключей.

Тем не менее, я хотел бы сделать всю работу в Riak - запустить карту/уменьшить непосредственно с помощью поиска. В настоящее время я использую инициализацию map/reduce, описанную здесь :

"inputs": {
    "bucket":"mybucket",
    "query":"foo OR bar"
}

Есть ли способ установить ограничение, чтобы поиск возвращал не все ключи, а только лучшие совпадения для поиска? Что-то вроде этого:

"inputs": {
    "bucket":"mybucket",
    "query":"foo OR bar",
    "limit": 10
}

person Pavel S.    schedule 06.05.2014    source источник


Ответы (1)


Хитрость здесь заключается в том, чтобы определить, какие 100 клавиш являются «верхними». Поскольку фаза сопоставления будет выполняться отдельно на 1/N виртуальных узлах и одновременно будет отображаться только 1 объект, функция сопоставления не может определить, какие ключи в целом будут главными. Вам понадобится сортировка по фазе уменьшения и возврат 100 лучших. Вы можете передать предел MR в качестве аргумента фазе сокращения, поэтому вам не нужно каждый раз воссоздавать функцию. В этом вопросе может быть полезная информация для вас

person Joe    schedule 13.05.2014