Ravendb mapreduce agrupamento por vários campos

Temos um site que contém streaming de vídeo e queremos exibir três relatórios dos vídeos mais assistidos na última semana, mês e ano (uma janela rolante

Armazenamos um documento no ravendb sempre que um vídeo é assistido:

public class ViewedContent
{
    public string Id { get; set; }
    public int ProductId { get; set; }
    public DateTime DateViewed { get; set; }
}

Estamos com problemas para descobrir como definir os índices / índices que melhor suportariam a geração desses três relatório

Tentamos o seguinte mapa / redução.

public class ViewedContentResult
{
    public int ProductId { get; set; }
    public DateTime DateViewed { get; set; }
    public int Count { get; set; }
}

public class ViewedContentIndex :
        AbstractIndexCreationTask<ViewedContent, ViewedContentResult>
{
    public ViewedContentIndex()
    {
        Map = docs => from doc in docs
                      select new
                                 {
                                     doc.ProductId,
                                     DateViewed = doc.DateViewed.Date,
                                     Count = 1
                                 };

        Reduce = results => from result in results
                            group result by result.DateViewed
                            into agg
                            select new
                                       {
                                           ProductId = agg.Key,
                                           Count = agg.Sum(x => x.Count)
                                       };
    }
}

Mas, esta consulta gera um erro:

var lastSevenDays = session.Query<ViewedContent, ViewedContentIndex>()
                .Where( x => x.DateViewed > DateTime.UtcNow.Date.AddDays(-7) );

Erro: "DateViewed não está indexado"

Finalmente, queremos consultar algo como:

var lastSevenDays = session.Query<ViewedContent, ViewedContentIndex>()
                .Where( x => x.DateViewed > DateTime.UtcNow.Date.AddDays(-7) )
                .GroupBy( x => x.ProductId )
                .OrderBy( x => x.Count )

Isso realmente não compila, porque o OrderBy está errado; Count não é uma propriedade válida aqui.

Qualquer ajuda aqui seria apreciada

questionAnswers(1)

yourAnswerToTheQuestion