1

我有以下代码

        IDocumentSession documentSession = store.OpenSession();
        var schools = documentSession.Query<School>().Where(x => x.SchoolName == "My Primary School").ToList();
        foreach (var school in schools)
        {
            Console.WriteLine(school);
        }

        schools = documentSession.Query<School>().Where(x => x.Id == "109940").ToList();
        foreach (var school in schools)
        {
            Console.WriteLine(school.SchoolName);  // returns My Primary School
        }

当第一个查询运行时,虽然我在数据库中有一条匹配的记录,但没有返回任何记录。但是第二个查询返回我期望的记录。我将数据库作为嵌入式运行,我自己没有设置任何索引

更新:所以如果我自定义查询以等待非陈旧的结果它工作正常,我需要创建一个永久索引吗?

4

1 回答 1

1

这就是 RavenDB 的行为方式。如果没有索引可以满足您的查询,RavenDB 将根据查询动态创建索引,并返回陈旧的结果。

这就是为什么您第二次获得预期结果的原因。这是 RavenDB 的关键设计之一,让索引在后台完成工作并允许过时的结果,而不是阻塞查询,直到索引不再过时。

在生产中,临时索引将被提升为自动索引,一旦 RavenDB 检测到该索引有规律的使用。您还可以在某个时候创建​​静态索引,而不是中继自动索引。

于 2012-07-23T05:56:56.570 回答