返回意外结果的RavenDb字符串查询

返回意外结果的RavenDb字符串查询,ravendb,querying,Ravendb,Querying,我有以下代码 IDocumentSession documentSession = store.OpenSession(); var schools = documentSession.Query<School>().Where(x => x.SchoolName == "My Primary School").ToList(); foreach (var school in schools) {

我有以下代码

        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
        }
IDocumentSession documentSession=store.OpenSession();
var schools=documentSession.Query().Where(x=>x.SchoolName==“我的小学”).ToList();
foreach(学校中的var学校)
{
控制台。WriteLine(学校);
}
schools=documentSession.Query().Where(x=>x.Id==“109940”).ToList();
foreach(学校中的var学校)
{
Console.WriteLine(school.SchoolName);//返回我的小学
}
当第一个查询运行时,不会返回任何记录,尽管数据库中有匹配的记录。但是,第二个查询返回一个我期望的记录。我以嵌入式方式运行数据库,我自己还没有设置任何索引


更新:因此,如果我自定义查询以等待非陈旧结果,它工作正常,是否需要创建永久索引?

这就是RavenDB的行为方式。如果没有索引来满足您的查询,RavenDB将在查询时动态创建索引,并返回过时的结果

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


在生产中,一旦RavenDB检测到索引有正常使用,临时索引将升级为自动索引。除了依赖自动索引,您还可以在某个点创建静态索引。

这就是RavenDB的行为方式。如果没有索引来满足您的查询,RavenDB将在查询时动态创建索引,并返回过时的结果

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


在生产中,一旦RavenDB检测到索引有正常使用,临时索引将升级为自动索引。不用依赖自动索引,您也可以在某个时候创建静态索引。

谢谢,我创建了一个索引,修复了结果,我假设Raven会在首次使用时创建索引,然后返回结果,显然不是这样。令人惊讶的是,如果我使用starts with,一些记录被返回,但其他记录没有返回感谢,我创建了一个索引并修复了结果,我假设Raven会在第一次使用时创建索引,然后返回结果,显然情况并非如此。令人惊讶的是,如果我使用starts with,一些记录被返回,但其他记录没有返回