javascript - 如何让 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() 方法还要慢。
解决方案
该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
函数具有较大“限制”值的查询。
推荐阅读
- android - firebase 检索具有空字段的节点
- python - 如果在从源代码构建后移动 python 3 目录,则没有名为“编码”的模块
- r - Pinhiero 和 Bates 的非线性混合效应模型的模型失败
- hyperledger-fabric - 检索密钥的历史记录
- ansible - 如何使用 ansible-playbook 和 homebrew 记录安装消息
- python - 具有多个动态条件的Mysql选择查询
- android - 有没有办法检测当前配置文件是否是 Android 上的访客?
- javascript - 为什么在从 Firebase 加载我的数据之前我需要运行此函数两次?
- javascript - vuex 无法识别突变
- java - 如何通过 url 在用户手机上设置背景图片