我有以下代码
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
}
当第一个查询运行时,虽然我在数据库中有匹配的记录,但不会返回任何记录。但是第二个查询返回我期望的记录。我正在运行db作为嵌入式,我自己没有设置任何索引
更新:所以如果我自定义查询以等待非陈旧的结果它工作正常,我是否需要创建永久索引?
答案 0 :(得分:1)
这就是RavenDB的行为方式。如果没有索引来满足您的查询,RavenDB将在查询时动态创建索引,并返回过时的结果。
这就是为什么你第二次得到你想象的结果。这是RavenDB的关键设计之一,让索引在后台执行工作,并允许过时的结果而不是阻止查询,直到索引不是陈旧的。
在生产中,一旦RavenDB检测到索引经常使用,临时索引将被提升为自动索引。您也可以在某个时刻创建静态索引,而不是在自动索引上进行中继。