gpt4 book ai didi

c# - 乌鸦数据库 : What's wrong with this multi-map/reduce index?

转载 作者:太空狗 更新时间:2023-10-30 01:23:59 24 4
gpt4 key购买 nike

我有一个跟踪网站页面访问的应用程序。这是我的模型:

public class VisitSession {
public string SessionId { get; set; }
public DateTime StartTime { get; set; }
public string UniqueVisitorId { get; set; }
public IList<PageVisit> PageVisits { get; set; }
}

当访问者访问网站时,访问 session 开始。一次访问 session 有许多页面访问。当访问者第一次访问该网站时,跟踪器将写入一个 UniqueVisitorId (GUID) cookie。因此我们能够知道访客是否是回头客。

现在我想编写一个 View ,显示每天的 TotalVisitSessions、TotalPageVisits、TotalUniqueVisitors。所以我写了这个 multi-map reduce:

public class VisitSummaryByDateIndex : AbstractMultiMapIndexCreationTask<VisitSummaryByDate>
{
public VisitSummaryByDateIndex()
{
AddMap<VisitSession>(sessions => from s in sessions
select new VisitSummaryByDate
{
Date = s.StartTime.Date,
TotalVisitSessions = 1,
TotalPageVisits = 0,
TotalNewVisitors = s.IsNewVisit ? 1 : 0,
TotalUniqueVisitors = 0,
UniqueVisitorId = s.UniqueVisitorId
});

AddMap<PageVisit>(visits => from v in visits
select new VisitSummaryByDate
{
Date = v.VisitTime.Date,
TotalVisitSessions = 0,
TotalPageVisits = 1,
TotalNewVisitors = 0,
TotalUniqueVisitors = 0,
UniqueVisitorId = String.Empty
});

Reduce = results => from result in results
group result by result.Date into g
select new VisitSummaryByDate
{
Date = g.Key,
TotalVisitSessions = g.Sum(it => it.TotalVisitSessions),
TotalPageVisits = g.Sum(it => it.TotalPageVisits),
TotalNewVisitors = g.Sum(it => it.TotalNewVisitors),
TotalUniqueVisitors = g.Select(it => it.UniqueVisitorId).Where(it => it.Length > 0).Distinct().Count(),
UniqueVisitorId = String.Empty
};
}
}

问题出在“TotalUniqueVisitors”的计算上,索引结果的TotalUniqueVisitors有时是1,有时是2。但是我查了资料,绝对不会这么少。我的 Map/Reduce 语法有问题吗?

相关帖子: Raven DB: How to create "UniqueVisitorCount by date" index

可在此处找到包含示例数据的代码: https://gist.github.com/2702071

最佳答案

Reduce 实际上对结果进行了多次处理。您的索引假设这只发生一次,并且可以访问整个结果集。

您的索引需要如下所示:

public class VisitSummaryByDateIndex : AbstractMultiMapIndexCreationTask<VisitSummaryByDate>
{
public VisitSummaryByDateIndex()
{
AddMap<VisitSession>(sessions => from s in sessions
select new VisitSummaryByDate
{
Date = s.StartTime.Date,
TotalVisitSessions = 1,
TotalPageVisits = 0,
TotalNewVisitors = s.IsNewVisit ? 1 : 0,
TotalUniqueVisitors = 1,
UniqueVisitorId = new[]{s.UniqueVisitorId}
});

AddMap<PageVisit>(visits => from v in visits
select new VisitSummaryByDate
{
Date = v.VisitTime.Date,
TotalVisitSessions = 0,
TotalPageVisits = 1,
TotalNewVisitors = 0,
TotalUniqueVisitors = 0,
UniqueVisitorId = new string[0]
});

Reduce = results => from result in results
group result by result.Date into g
select new VisitSummaryByDate
{
Date = g.Key,
TotalVisitSessions = g.Sum(it => it.TotalVisitSessions),
TotalPageVisits = g.Sum(it => it.TotalPageVisits),
TotalNewVisitors = g.Sum(it => it.TotalNewVisitors),
TotalUniqueVisitors = g.Sum(it => it.TotalUniqueVisitors),,
UniqueVisitorId = g.Select(x=>x.UniqueVisitorId).Distinct()
};
}
}

关于c# - 乌鸦数据库 : What's wrong with this multi-map/reduce index?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10601129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com