我正在尝试使用搜索索引来加快搜索速度。这是我的代码:
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()方法还要慢。
答案 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”的大值进行查询。