RavenDB:将索引基于另一个索引

时间:2012-04-18 12:33:57

标签: indexing nosql ravendb

是否可以使用一个索引作为另一个索引的基础?

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

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

这是可能的,还是我必须创建一个全新的索引来复制其他索引的代码?如果不可能,为什么呢?

2 个答案:

答案 0 :(得分:3)

不,你不能这样做,因为实现这一点非常复杂,交换的价值很小。

实现这一点很复杂,因为: - 当第一个索引中有任何更改时,您应该在第二个索引中通知。 - 你如何实现交易?

可能还有更多。索引之间的可靠性将引发一些非常复杂的问题需要解决,所以最好只有两个索引。

如果这在你的场景中没有意义,你可能一直在以错误的方式做事。例如,您不必创建任何BlogPostsOrderedByCreated和BlogSelection索引,只使用将同时执行这两项操作的linq查询:

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

答案 1 :(得分:0)

我的一般理解是,从客户端来看这将是棘手的 - 在一天结束时,这些索引定义被转换为linq到对象并发送到服务器。当所述linq是interperted时,它只能访问System命名空间和一些特定的raven。

在这样的场景中可以起作用的是在服务器上的bundle中定义索引。然后你可以做更多有趣的事情。不完全确定它会起作用,但我认为你有一个战斗机会。