目前我在閱讀RavenDB doc後正在玩分面搜索。RavendDB分面搜索結果格式化
返回的結果是確定的,但存在一個小問題。由於結果當屬
IDictionary<string, IEnumerable<FacetValue>>
有必要遍歷,並做一些花哨的字符串操作來格式化結果,並顯示在一個PartialView。更具體地說,本方面:
new Facet
{
Name = "Value_Range",
Mode = FacetMode.Ranges,
Ranges =
{
"[NULL TO Dx500.0]",
"[Dx500.0 TO Dx1000.0]",
"[Dx1000.0 TO Dx2500.0]",
"[Dx2500.0 TO Dx5000.0]",
"[Dx5000.0 TO NULL]",
}
}
View
代碼:
@fv.Range
這是本 「美麗」 字符串,在視圖上獲取輸出:[Dx400.0 TO Dx600.0]
RavenDB使用上面的DX前綴做一個number to string conversion。
Controller
代碼,其中小結果傳遞給特定的ViewModel
:
var facetResults = DocumentSession.Query<Realty>("RealtyFacets")
//.Where(x => x.Value >= 100 && x.Value <= 1000)
.ToFacets("facets/RealtyFacets").ToArray();
var model = new RealtyFacetsViewModel();
model.Cities = facetResults[0];
model.Purposes = facetResults[1];
model.Types = facetResults[2];
model.Values = facetResults[3];
return PartialView("RealtyFacets", model);
有正從一個面搜索結果,以便沒有字符串操作必須進行格式化返回的任何其他/更好的辦法數據?
Ayende的建議後,我做這在我的控制器:
foreach (var val in facetResults[3].Value)
{
switch(val.Range)
{
case "[Dx0.0 TO Dx200.0]":
val.Range = string.Format("{0:C2} {1} {2:C2}",
0, @Localization.to, 200);
break;
case "[Dx200.0 TO Dx400.0]":
val.Range = string.Format("{0:C2} {1} {2:C2}",
200, @Localization.to, 400);
break;
case "[Dx400.0 TO Dx600.0]":
val.Range = string.Format("{0:C2} {1} {2:C2}",
400, @Localization.to, 600);
break;
case "[Dx600.0 TO Dx800.0]":
val.Range = string.Format("{0:C2} {1} {2:C2}",
600, @Localization.to, 800);
break;
case "[Dx800.0 TO Dx1000000.0]":
val.Range = string.Format("{0:C2} {1} {2:C2}",
800, @Localization.to, 1000000);
break;
}
}
model.Values = facetResults[3];
@我想補充到奧倫的回答,我實現了小API一樣,因爲它更容易;-)加上使得開發人員編寫的確切Lucene的查詢每個方面都有更大的靈活性。否則,API將不得不知道您想要使用的所有可能的分組方案。但作爲結果,API並不知道你的分組是什麼,它只是執行你給它的lucene查詢。 – 2012-02-24 09:35:31
然而,通過使用轉換「Dx800.0」 - > 800.0的更通用代碼,您可以使代碼更簡單一些。在這裏看到如何RavenDB內部,https://github.com/ravendb/ravendb/blob/master/Raven.Abstractions/Indexing/NumberUtil.cs – 2012-02-24 10:07:59
事實上,甚至更好的只是調用NumberUtils.StringToNumber(..)和有RavenDB將它轉換爲你。代碼位於Raven.Abstractions中,您可以在Client API中訪問該代碼。 – 2012-02-24 10:13:45