2012-04-18 25 views
1

是否可以使用一個索引作爲另一個索引的基礎?RavenDB:基於另一個索引的索引

public class BlogPostsOrderedByCreated : AbstractIndexCreationTask<BlogPost, BlogPost> { 
    /* Ordering Blogs after creation-date */ 
} 

// TODO: Implement another index that uses above index 
//public class BlogSelection : 

這是甚至可能或我必須創建一個全新的索引,重複其他索引的代碼?如果不可能,那爲什麼?

回答

3

不,你不能那樣做,因爲實現這個非常複雜,並且交換的價值很小。

實現這一點很複雜,因爲: - 當第一個索引中有任何更改時,您應該在第二個索引中通知。 - 你如何實現交易?

而且可能還有更多。索引之間的可靠性會提出一些非常複雜的問題來解決,所以你最好只有兩個索引。

如果這在您的情況下沒有意義,您可能一直在做錯誤的方式。例如,您不必創建任何BlogPostsOrderedByCreated和BlogSelection索引,只使用一個可同時執行兩個操作的linq查詢:

session.Query<Post>() 
     .Where(x => x.Name == "Blog selection") 
     .OrderBy(x => x.CreatedDate) 
     .ToList(); 
0

我的一般理解是,這對客戶端來說會很棘手 - 在一天結束時,這些索引定義會被轉換爲linq對象併發送到服務器。當所述linq被interperted時,它只能訪問System命名空間和一些烏鴉特定的東西。

在這種情況下可以工作的是在服務器上定義捆綁索引。然後你可以做更多有趣的事情。不完全確定它會起作用,但我認爲你會有戰鬥機會。