У меня есть некоторые данные суммирования, которые было очень легко сгенерировать, используя некоторые относительно простые карты / уменьшенные представления.Но мы хотим отсортировать данные на основе сокращенного представления значения (а не ключей).Было предложено использовать couchdb-lucene для этого.Но как?Мне не понятно, как использовать полнотекстовый индекс для быстрого ранжирования данных такого типа.
То, что у нас уже есть
Упрощенное примерное представление выглядит примерно так:следующее:
by_sender: {
map: "function(doc) { emit(doc.sender, 1); }",
reduce: "function(keys, values, rereduce) { return sum(values); }"
}
, которое возвращает результаты, примерно такие, как следующие (при запуске с group=true
):
{"rows":[
{"key":"a@example.com","value":2},
{"key":"aaa@example.com","value":1},
{"key":"aaap@example.com","value":34},
{"key":"aabb@example.com","value":1},
... thousands or tens of thousands of rows ...
]}
Что мы хотим
Они отсортированы по ключу, но мне нужно отсортировать данные в соответствии со значениями, например:
{"rows":[
{"key":"xyzzy@example.com","value":847},
{"key":"adam@example.com","value":345},
{"key":"karl@example.com","value":99},
{"key":"aaap@example.com","value":34},
... thousands or tens of thousands of rows ...
]}
И мне нужно отсортировать их так быстро, как это возможно (например, если это займет <100 мсдля обновления индексов не требуется 1 минуты, прежде чем новые данные будут отражены в запросах). </p>
Больше контекста: что мы уже пробовали
Лучший ответв Сортировка просмотров CouchDB по значению предоставляет четыре жизнеспособных варианта, которые мы пробовали в порядке возрастания сложности:
- Сначала мы отсортировали результаты на стороне клиента, но это было way слишком медленно.
- Далее мы создали список функцийпо которому сортирует данные.Немного быстрее, но все еще слишком медленно.
- Цепные представления с уменьшением карты должны легко решить эту проблему.
- Кто-то указал на Цепные просмотры с уменьшением карты .Они не входят в BigCouch , но являются частью услуг Cloudant, которых, к сожалению, в настоящее время нет в нашем бюджете.
- Я начал реализацию уровня приложения с помощью API _bulk_docs.Это сложно, если вы хотите сохранить обновления как можно более быстрыми, избегая условий гонки и т. Д. Я могу продолжить этот подход, но это не расслабляет.: (
- В ответе предлагается использовать couchdb-lucene . Но я не достаточно знаком с полнотекстовым поиском, чтобы понять, как заставить его что-либо делатьболее сложный, чем индексировать документ и возвращать результат поиска. Я даже не знаю, с чего начать.