第二次尝试后RavenDB查询更正结果

时间:2012-02-15 23:24:03

标签: ravendb

当我的C#,WPF UI启动时,其中一个选项卡在加载时调用此代码。显示的最新数据是2012年2月11日,即使有2012年2月15日的InstallationSummary文档。当我点击刷新按钮时,会调用这个完全相同的代码,只是这次显示了最新的结果。相同的代码如何产生两种不同的结果?

IQueryable<EntityBase> installationSummaries =
  QueryAndSetEtags(session => session.Query<InstallationSummary>()
  .Include(x => x.ApplicationServerId)
  .Include(x => x.ApplicationWithOverrideVariableGroup.ApplicationId)
  .Include(x => x.ApplicationWithOverrideVariableGroup.CustomVariableGroupId)
  .OrderByDescending(summary => summary.InstallationStart)
  .Take(numberToRetrieve));

注意:我与另一个查询存在完全相同的问题。好像我有一段时间没有查询,我得到的结果不正确。如果我在刚做完之后再次查询,我会得到正确的结果。我想知道是否必须创建一个索引。有超过10,000个InstallationSummary文档,性能很好。这是我遇到麻烦的准确性。

1 个答案:

答案 0 :(得分:4)

听起来像陈旧的索引问题。尝试添加此行,看看是否有帮助

.Customize(x => x.WaitForNonStaleResultsAsOnNow())

更新:最好使用WaitForNonStaleResultsAsOnNow()而不是WaitForNonStaleResults()

编辑:为什么?
原因是,您的查询将创建一个临时索引,该索引会在一段时间不活动后自动删除。此外,它们将无法在重启RavenDB后继续存在。现在你有几个选择:

  • 使用管理工作室将索引提升为永久性

  • 在您的应用程序中创建索引并在查询时使用该索引

  • 等待raven自我优化并自动提升索引(只有在查询运行得足够频繁时才会发生这种情况,这在你的情况下似乎不太可能)

  • 使用上面概述的.WaitForNonStaleResuls()选项(这是最差,因为它会对应用程序性能产生非常不利的影响,因为其他选项要好得多,所以没有必要)