RavenDB - 查询问题 - 陈旧的结果/索引

ZVe*_*nue 6 nosql ravendb

在查询RavenDB时,我注意到它没有立即得到预期的结果.可能与索引有关,我不知道.

例如 :

   int ACount = session.Query<Patron>()
                   .Count();

   int BCount = session.Query<Theaters>()
                   .Count();

   int CCount = session.Query<Movies>()
                   .Where(x => x.Status == "Released")                                              
                   .Count();

   int DCount = session.Query<Promotions>()
                    .Count();
Run Code Online (Sandbox Code Playgroud)

当我执行这项然后ACountBCount立即获得在第一次运行它们的值).然而CCount,DCount直到三四次运行之后才得到它们的值.它们在前几次运行中显示0(零)值.

为什么这会发生在底部两个而不是前两个查询?如果因为陈旧的结果(或索引),那么当我第一次运行时,如何修改我的查询以获得每次的准确结果.谢谢你的帮助.

Car*_*des 14

如果您尚未为电影查询定义索引,Raven将创建动态索引.如果重复使用查询,索引将自动保留.否则Raven将丢弃它,这可以解释为什么你在前几次运行中获得0结果.

您还可以指示Raven等待索引过程,以确保您始终可以使用WaitForNonStaleResults指令获得最准确的结果(即使这可能不是一个好主意,因为它会减慢您的查询速度):

session.Query<Movies>()
.Customize(x => x.WaitForNonStaleResults())
.Where(x => x.Status == "Released")                                              
.Count();
Run Code Online (Sandbox Code Playgroud)

  • 我用了... .自定义(x => x.WaitForNonStaleResults(TimeSpan.FromSeconds(100)))以修复超时异常. (4认同)
  • 您可以通过更改Raven/TempIndexPromotionMinimumQueryCount配置来选择频率,该配置定义"在将其提升为永久性索引之前必须访问临时自动生成索引的次数".默认值为100.请查看[Raven的配置选项页面](http://ravendb.net/documentation/configuration) (3认同)