2012-04-18 67 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命名空间和一些乌鸦特定的东西。

在这种情况下可以工作的是在服务器上定义捆绑索引。然后你可以做更多有趣的事情。不完全确定它会起作用,但我认为你会有战斗机会。