使用 Skip 和 Take 进行 RavenDB 分页不起作用

发布于 2024-10-12 04:09:57 字数 470 浏览 3 评论 0原文

我正在尝试对 RavenDB Lucene 索引实现查询并对结果进行分页。

我有以下代码:(

        IDocumentQuery<Post> q = Session.Advanced.LuceneQuery<Post, Posts_Search>()
            .WhereContains("BodyHtml", query)
            .OrElse()
            .WhereContains("Title", query)
            .AddOrder("Published", true)
            .Skip(4).Take(4);

最后一对 Skip 和 Take 是为了简单示例而添加的)。

此查询始终返回与我的查询匹配的所有 22 个文档,而不仅仅是我期望的 4 个文档。

我做错了什么?

I am trying to implement a query on a RavenDB Lucene index and paging the results.

I have the following code:

        IDocumentQuery<Post> q = Session.Advanced.LuceneQuery<Post, Posts_Search>()
            .WhereContains("BodyHtml", query)
            .OrElse()
            .WhereContains("Title", query)
            .AddOrder("Published", true)
            .Skip(4).Take(4);

(The last pair of Skip and Take was added for the sake of a simple example).

This query always returns all of the 22 documents that matches my query, not only 4, as I would expect.

What am I doing wrong ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

酷遇一生 2024-10-19 04:09:57

这个问题发生在最新的稳定版本(206)上。

我现在已经下载了最新的不稳定版本(251),通过这个版本,我的代码可以按预期工作。我猜这是我使用的版本中的一个错误。如果我从 RavenDB 小组的问题中得到任何更有意义的见解,我一定会在这里发布。

This problem was occuring on the latest stable build (206).

I have now downloaded the latest unstable build (251), and with this build, my code works as expected. I guess it was a bug in the version I was using. If I get anything more meaningful insight from my question in the RavenDB group, I will make sure to post it here.

素年丶 2024-10-19 04:09:57

只是一个猜测,因为我不了解 RavenDB。但Raven 提供者可能不支持skip 或take。

您可以尝试在 .AddOrder 之后转换为 IEnumerable 来验证这一点。 (然后,您将使用 Linq to Objects 来跳过和获取,请注意,您仍然会首先从数据库获取所有记录)

  ...
  .AddOrder("Published",True)
  .AsEnumerable()
  .Skip(4).Take(4);

Just a guess here as I don't know RavenDB. But perhaps the Raven provider does not support skip or take.

You could try converting to an IEnumerable after your .AddOrder to verify that. (You would then be using Linq to Objects to Skip and Take, note you would still be getting all your records from the DB first)

  ...
  .AddOrder("Published",True)
  .AsEnumerable()
  .Skip(4).Take(4);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文