У меня есть этот документ, сообщение:
{Содержимое: "blabla", Теги: ["test", "toto"], Создано: "2019-05-01 01:02:01"}
Я хочу иметь страницу, на которой отображаются самые использованные теги за последние 30 дней.
До сих пор я пытался создать такой индекс
public class Toss_TagPerDay : AbstractIndexCreationTask<TossEntity, TagByDayIndex>
{
public Toss_TagPerDay()
{
Map = tosses => from toss in tosses
from tag in toss.Tags
select new TagByDayIndex()
{
Tag = tag,
CreatedOn = toss.CreatedOn.Date,
Count = 1
};
Reduce = results => from result in results
group result by new { result.Tag, result.CreatedOn }
into g
select new TagByDayIndex()
{
Tag = g.Key.Tag,
CreatedOn = g.Key.CreatedOn,
Count = g.Sum(i => i.Count)
};
}
}
И я запрашиваю его таким образом
await _session
.Query<TagByDayIndex, Toss_TagPerDay>()
.Where(i => i.CreatedOn >= firstDay)
.GroupBy(i => i.Tag)
.OrderByDescending(g => g.Sum(i => i.Count))
.Take(50)
.Select(t => new BestTagsResult()
{
CountLastMonth = t.Count(),
Tag = t.Key
})
.ToListAsync()
Но это дает мне ошибку
Сообщение: System.NotSupportedException: Не удалось понять выражение: из индекса 'Toss / TagPerDay' .Where (i => (Convert (i.CreatedOn, DateTimeOffset)> = значение (Toss.Server.Models.Tosses.BestTagsQueryHandler + <> c__DisplayClass3_0) .firstDay)). GroupBy (i => i.Tag) .OrderByDescending (g => g.Sum (i => i.Count)). Take (50) .Select (t => new BestTagsResult() {CountLastMonth = t.Count (), Tag = t.Key}) ---- System.NotSupportedException: метод GroupBy поддерживается только в динамических запросах сокращения карты
Любая идея, как можноЯ делаю эту работу?Я мог бы запросить все данные индекса за последние 30 дней и выполнить групповую обработку / заказ / получение в памяти, но это могло бы заставить мое приложение загружать много данных.