我有两个范围索引,我正在尝试在“OR”查询下运行,这会进行外卡搜索。但它没有返回结果。
不起作用。以下查询返回空数组:
db.documents.query(qb.where(
qb.or(
qb.word(qb.range('informationProviderName'), 'a*'),
qb.word(qb.range('functionalName'), 'a*')
)).withOptions({ categories: ['metadata'] })
)
.result(function (documents) {
res.json(documents);
}, function (error) {
console.dir(error);
});
但是当我单独执行查询时,它会返回结果。
使用:
db.documents.query(qb.where(
qb.word(qb.range('informationProviderName'), 'a*')
).withOptions({ categories: ['metadata'] })
)
.result(function (documents) {
res.json(documents);
}, function (error) {
console.dir(error);
});
使用:
db.documents.query(qb.where(
qb.word(qb.range('functionalName'), 'a*')
).withOptions({ categories: ['metadata'] })
)
.result(function (documents) {
res.json(documents);
}, function (error) {
console.dir(error);
});
请帮帮忙?
正确答案:根据评论:
return qb.where(qb.or(
qb.word(qb.field('productName'), 'a*'),
qb.word(qb.field('manufacturerName'), 'a*')
));
答案 0 :(得分:2)
有很多事情需要关注。首先,QueryBuilder.word函数采用字符串或IndexedName(类似于从QueryBuilder.element或QueryBuilder.property返回的内容)。您正在传递QueryBuilder.range,它返回Query类型,而不是IndexedName类型。
其他一些需要注意的事项是,您要检查数据库中的以下索引以确保它们已启用:"三个字符搜索","快速元素字符搜索& #34;,"一个字符搜索","两个字符搜索"。您会注意到每个"较慢的文档加载和较大的数据库文件都会出现警告。"根据您的需要,您可以决定"三个字符搜索"就是你所需要的,而且你只需等到至少有三个字符发送到查询。