我想问一下RavenDb中是否有办法执行分面搜索,但也要获取被过滤掉的分面。
例:
让我们有一个具有属性Color : string
和Status : enum(New,Used)
的Car
实体。
当我搜索Red
汽车时,我还想得到所有其他颜色的计数。同样,如果我搜索Used
辆车,我也想看到新车的数量。
如果我未选中所有内容:
UI
Color: [ ] Red (5) [ ] Blue (7) [ ] White (15)
Status: [ ] Used (20) [ ] New (7)
C#
session.Query<Car, Cars_Index>().ToFacets("facets/Cars");
我得到了正确的结果。
但是一旦我过滤了Color
和Status
我得到的结果非常有限:
UI
Color: [x] Red (3)
Status: [x] Used (3)
C#
session.Query<Car, Cars_Index>()
.Where(a => a.Status == CarStatus.Used)
.Where(a => a.Color == "Red")
.ToFacets("facets/Cars");
Response (JSON):
{ "Color": [ { "Range": "Red", "Count": 3 } ], "Status" : [ { "Range": "Used", "Count": 3 } ] }
我目前所做的是为每个方面发出一个单独的查询:
var colorFacet = session.Query<Car, Cars_Index>()
.Where(a => a.Status == CarStatus.Used)
.ToFacets("facets/Cars");
var statusFacet = session.Query<Car, Cars_Index>()
.Where(a => a.Color == "Red")
.ToFacets("facets/Cars");
我想要实现的目标:
UI
Color: [x] Red (3) [ ] Blue (4) [ ] White (12)
Status: [x] Used (3) [ ] New (7)
因此,获取红色二手车,蓝色二手车,白色二手车和用户红色汽车和新红色汽车的数量。因此,用户可以立即获得反馈,当他单击复选框时会发生什么。
随着方面数量和变化的增加,这变得难以管理。有没有办法设置它,它可以在一个请求/查询中执行。
谢谢
这不是facets与RavenDB一起工作的方式(或者一般来说,就此而言)。您根据当前查询查看分面,而不是所有分面的交集。