C# 搜索结果分组-RavenDB
我有一个显示文本搜索结果的索引。结果始终仅显示一个月 我需要显示每个月有多少个结果。示例位于底部 我知道分面搜索应该可以完成这项工作,但手动创建/生成范围是不可能的,这将导致大量范围。 我尝试了从官方文档到ResultTransformer的一切,但这不是正确的工具。所以我希望我一定忽略了什么C# 搜索结果分组-RavenDB,c#,full-text-search,ravendb,faceted-search,C#,Full Text Search,Ravendb,Faceted Search,我有一个显示文本搜索结果的索引。结果始终仅显示一个月 我需要显示每个月有多少个结果。示例位于底部 我知道分面搜索应该可以完成这项工作,但手动创建/生成范围是不可能的,这将导致大量范围。 我尝试了从官方文档到ResultTransformer的一切,但这不是正确的工具。所以我希望我一定忽略了什么 Map = transactions => from transaction in transactions select new { Description = new o
Map = transactions => from transaction in transactions
select new
{
Description = new object[] { transaction.Description, transaction.Items.Select(i => i.Name), transaction.Documents.Select(i => i.Name) },
Account_UserName = transaction.Account.UserName,
Time = transaction.Time
};
我期望的结果是这样的:
[{
Year: 2013,
Month: 12,
Count: 3
},
{
Year: 2013,
Month: 11,
Count: 10
}]
您希望在每个索引记录上加盖一个月值,然后从那里开始:
Map = transactions => from transaction in transactions
select new
{
Description = new object[] { transaction.Description, transaction.Items.Select(i => i.Name), transaction.Documents.Select(i => i.Name) },
Account_UserName = transaction.Account.UserName,
Month = transaction.Time.Month + "/" + transaction.Time.Year, // To be able to group on Months
Time = transaction.Time
};
从那里,您可以在“月份”字段上使用刻面,也可以使用Reduce函数将月份与总数进行索引,以使此计算可搜索经过一些挖掘后,我发现这项工作可以完成。我添加了字段month,因为匿名对象不起作用
Map = transactions => from transaction in transactions
select new
{
Value = transaction.Value,
Description = new object[] { transaction.Description, transaction.Items.Select(i => i.Name) },
Account_UserName = transaction.Account.UserName,
Time = transaction.Time,
Month = new DateTime(transaction.Time.Year, transaction.Time.Month, 1) // new field
};
然后通过.AggregateBy(x=>x.Month).CountOn(x=>x.Month)扩展查询代码>
var result=\u session.Query()
.AggregateBy(x=>x.Month)
.CountOn(x=>x.Month);
经过一些转换后,这会产生所需的结果。很抱歉,我不明白添加月份字段对我有什么帮助。我尝试了使用字段映射/减少索引:Description-我查询的字段、用户名、年份、月份、计数。但将Description设置为null以使结果组正确停止索引的工作。我对问题进行了编辑以使其更加清晰。因为这样您就可以使用月份字段作为reduce键。您仍然可以使用groupbynew{time.Month,time.Year}
执行此操作,但我个人的偏好是将它们放在一个字段中,以便于可读性。再次阅读您的评论-如果您想查询描述,您实际上不能使用Map/Reduce,只能使用facets。
var result = _session.Query<Transaction, Transaction_Search>()
.AggregateBy(x => x.Month)
.CountOn(x => x.Month);