首页 > 解决方案 > 如何让 cloudantDb.search 返回所有记录而不是限制 25 和书签

问题描述

我正在尝试使用搜索索引来加快搜索速度。这是我的代码:

return new Promise((resolve, reject) => {
  let conf = {'include_docs': true}
  conf.q = "user: 'new'";

  db.search('app', 'userIndex', conf, (err, body) => {
    if (!err) {
      console.log('success');
      resolve({status: 'Success', response: {userDocs: body.total_rows}});
    } else {
      console.log('error');
      resolve({ status: 'Failure', response: { Error: err } });
    }
  });
});

它工作正常,但只返回 25 个文档(有数百个)和书签。有没有办法让搜索返回所有文档,而不是为每个书签调用新的承诺。如果我浏览所有书签,它的运行速度甚至比 .find() 方法还要慢。

标签: javascriptnode.jsnosqlcloudant

解决方案


db.search函数对Cloudant 搜索索引进行查询。Cloudant Search 是一个基于 Apache Lucene 的索引系统,用于自由文本搜索,每次搜索最多可返回 200 个文档。如果结果集包含超过 200 个文档,则搜索结果集将包含一个“书签”,可以在后续请求中将其传递给 Cloudant 以获取下一个搜索结果块。

db.find函数对Cloudant Query索引进行查询。Cloudant Query 是一种通用查询语言,类似于 MongoDB 的查询语法。搜索结果集限制为 25 个(默认情况下),但最多可以覆盖 200 个文档。同样,书签系统允许对结果集进行分页。

例如

const q = { 
  selector: {
    name: { "$eq": "Brian"},
    age : { "$gt": 25 }
  },
  fields: [ "name", "age", "tags", "url" ]
  limit:200
};
mydb.find(q).then((data) => {
  console.log(data);
});

通过定义MapReduce视图可以在单个 API 调用中返回更大的数据集,这些视图可以是使用该db.view函数具有较大“限制”值的查询。


推荐阅读