返回意外结果的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,一些记录被返回,但其他记录没有返回