2012-08-09 28 views
2

我想問一下RavenDb中是否有方法執行分面搜索,但也會得到濾出的分面。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) 

所以得到的紅色使用數量汽車,藍色二手車,白色二手車和用戶紅色汽車和新紅色汽車。因此,用戶可以立即獲得反饋,當他點擊複選框時會發生什麼。

隨着方面數量和變化的不斷增長變得難以管理。有沒有辦法設置它,它可以在一個請求/查詢中執行。

感謝

回答

2

這不是面是如何與RavenDB工作(或一般,對於這個問題)。 根據您的當前查看方面,而不是所有方面的交集。

+0

嗯,很抱歉聽到這些。但是我擔心這是Lucene的一個特性,而不是RavenDB的特性,所以甚至沒有把它作爲RavenDB特性請求的改變 – puco 2012-08-14 14:42:18