2013-11-10 102 views
0

我有一個顯示文本搜索結果的索引。結果總是隻顯示一個月。對搜索結果進行分組 - RavenDB

我需要顯示每月有多少結果。例子在底部。

據我所知,Faceted搜索應該做的工作,但創建/生成範圍manualy是不可能的,它會導致大量的範圍。 我嘗試了一切從官方文檔,甚至ResultTransformers這不是正確的工具。所以我希望我一定忽略了一些東西。

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 
}] 

回答

0

經過一番挖掘,我發現Dynamic aggregation將完成這項工作。我已經添加了字段月份,因爲匿名對象不起作用。

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 = _session.Query<Transaction, Transaction_Search>() 
    .AggregateBy(x => x.Month) 
    .CountOn(x => x.Month); 

這產生擴展查詢,之後一些變換,所期望的結果。

0

你要杜絕用了一個月值的每個索引記錄,並從那裏:

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

從那裏您可以在「月份」字段中使用刻面或使用「縮小」功能將月份與總數進行索引,以使此計算可搜索

+0

我很抱歉,但我不明白如何添加月份字段會幫助我。我已嘗試使用字段的地圖/縮小索引: **描述** - 我查詢的內容, **用戶名**, **年**, **月**, **計數**。但將「描述」設置爲空以使結果組正確停止工作索引。 我編輯了這個問題,使其更加清晰。 –

+0

因爲那樣你可以使用Month字段作爲縮小鍵。你仍然可以用'group by new {time.Month,time.Year}'做到這一點,但是我的個人偏好是將它們放在一個字段中以提高可讀性。 – synhershko

+0

再次閱讀你的評論 - 如果你想查詢描述你不能真正地使用Map/Reduce,只有方面。 – synhershko