RavenDb分面搜索,包括滤除的方面范围

时间:2012-08-09 21:25:50

标签: ravendb faceted-search

我想问RavenDb中是否有办法执行分面搜索,但也得到过滤掉的方面。

示例:

让我们拥有一个Car个实体,其中包含Color : stringStatus : enum(New,Used)属性。

当我搜索Red辆汽车时,我也希望获得所有其他颜色的计数。同样,如果我搜索Used辆汽车,我也想看看新车的数量。

如果我没有检查所有内容:

UI
Color:  [ ] Red (5)   [ ] Blue (7) [ ] White (15)
Status: [ ] Used (20) [ ] New (7)

C#
session.Query<Car, Cars_Index>().ToFacets("facets/Cars");

我得到了正确的结果。

但是,一旦我对ColorStatus进行过滤,我得到的结果非常有限:

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)

因此,获得红色二手车,蓝色二手车,白色二手车和用户红色车和新红色车的数量。因此,当用户单击复选框时,用户会立即得到反馈。

随着方面的数量和可变性的增加变得难以管理。有没有办法如何设置它,它可以在一个请求/查询中执行。

由于

1 个答案:

答案 0 :(得分:2)

这不是表面如何与RavenDB一起工作(或者一般来说,就此而言)。 您可以根据当前查询查看构面,而不是所有构面的交叉点。