Я пытаюсь выяснить, можно ли преобразовать конкретный алгоритм в тип индекса уменьшения карты, который использует RavenDB/CouchDB, т. е. «предварительно вычисленное» уменьшение карты (что означает, что индексы обновляются при вставке и обновлении, а не когда выполнение фактического запроса).
Допустим, у нас есть типичный интернет-магазин с 50 000 товаров, сгруппированных по категориям. Каждый продукт имеет набор «Значений атрибутов», т. е. что-то вроде «[Красный, Круглый, Металл]».
Поскольку на нашем веб-сайте так много товаров и, вероятно, много товаров в каждой из категорий, мы хотим дать пользователю еще один способ «фильтровать» продукты, которые он сейчас видит.
Например, если категория «Менее 20 долларов», в этой категории есть целая куча товаров. Но нашему пользователю нужно видеть только продукты, которые стоят менее 20 долларов и имеют красный цвет. К сожалению, в категории "Менее $20" нет подкатегории "Красный".
Наш алгоритм возьмет текущий список продуктов и сгенерирует список «интересных» атрибутов и значений атрибутов, то есть, учитывая список продуктов, он выведет что-то вроде:
Color
Red (40)
Blue (32)
Yellow (17)
Material
Metal (37)
Plastic (36)
Wood (23)
Shape
Square (56)
Round (17)
Cylinder (12)
Может ли такой алгоритм быть каким-то образом предварительно вычисленным а-ля RavenDB/CouchDB map-reduce index? Если нет, то почему именно (чтобы я мог определить такой алгоритм в будущем) и если да, то как?
Доступно тестовое решение C# 4.0 Visual Studio, которое демонстрирует потенциальные структуры данных и образцы данных, а также как попытка реализации map-reduce (которая не кажется предварительно вычисляемой).