Pagination 具有复杂查询的couchdb分页

Pagination 具有复杂查询的couchdb分页,pagination,couchdb,Pagination,Couchdb,例如,我们有文本过滤器,例如 docs=db.view(“\u design/filter/\u view/substr”,startkey=substring,endkey=substring+u”\ufff0”,include\u docs=True,limit=20,skip=0) 没有慢速跳过的分页正确方法是什么?首先,我希望您理解这不是全文搜索。如果不使用skip参数,您也无法在CouchDB中实现分页,因为您无法说出(比如)第20个元素的位置。因此,模拟分页的唯一方法是创建“next

例如,我们有文本过滤器,例如

docs=db.view(“\u design/filter/\u view/substr”,startkey=substring,endkey=substring+u”\ufff0”,include\u docs=True,limit=20,skip=0)


没有慢速跳过的分页正确方法是什么?

首先,我希望您理解这不是全文搜索。如果不使用skip参数,您也无法在CouchDB中实现分页,因为您无法说出(比如)第20个元素的位置。因此,模拟分页的唯一方法是创建“next N results”链接/按钮。

CouchDB被放松了。您现在可以使用
跳过
。它会很好地工作,你可以专注于其他重要的事情。主要问题是它最终无法扩展。对于小数据集(最多1000行左右),我不会担心

然而,从长远来看,这将不会很好地发挥作用。您可以使用
startkey
代替将
skip
设置为
0
20
40
60

  • 第一次查询时,
    startkey=substring
    limit=20
  • 查看结果中的最后一行。
    键告诉您它在视图中使用了哪个键
  • 因此,您的下一个查询将具有步骤2中的
    startkey=
  • 值,加上
    limit=20
    skip=1
    看看发生了什么?第二个查询从第一个查询结束的地方开始。为了避免两次显示同一行,只需跳过它。(您也可以获取它,但在客户端忽略它。)


    这在大多数情况下都有效。我还建议您查看。

    С中描述的
    startkey\u docid
    ,举个例子,可以用lucene实现分页吗?@AlikZao:有什么帮助吗?这不是全文搜索,但我建议大家从这方面开始。前缀(自动完成)搜索非常有价值,您将很好地了解CouchDB视图。CouchDB Lucene添加了更多需要维护的软件,以及更多需要学习的API?如果您在视图中发出多个相同的键?我的意思是:“当您为给定的docid发出多个相同的键时?”数据集是不规则的,因此1个单词(或单词的子字符串)可以与未定义数量的文档链接。这个数字可以远远超过页面的大小(即单词“book”可以链接100个文档,但页面大小为20),从键“book”开始,我不能显示其余80个文档,链接列表将变成无限循环。在这个文档中,链接列表的数量真的很多——当前基于sql的数据库转换的基础大约7000000个,对吧。要实现可伸缩性,您确实需要
    startkey\u docid
    功能。