目前我在阅读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