如何使cloudantDb.search返回所有记录,而不是限制25和书签

时间:2018-10-02 08:33:26

标签: javascript node.js nosql cloudant

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

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个文档(有数百个)和书签。 有没有一种方法可以使搜索返回所有文档,而不是为每个书签调用新的Promise。如果我浏览所有书签,它的工作速度将比.find()方法还要慢。

1 个答案:

答案 0 :(得分:1)

db.search函数对Cloudant Search索引进行查询。 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函数使用“ limit”的大值进行查询。