Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 搜索结果分组-RavenDB_C#_Full Text Search_Ravendb_Faceted Search - Fatal编程技术网

C# 搜索结果分组-RavenDB

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

我有一个显示文本搜索结果的索引。结果始终仅显示一个月

我需要显示每个月有多少个结果。示例位于底部

我知道分面搜索应该可以完成这项工作,但手动创建/生成范围是不可能的,这将导致大量范围。 我尝试了从官方文档到ResultTransformer的一切,但这不是正确的工具。所以我希望我一定忽略了什么

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);