MarkLogic Node.js。 "Or" 查询无效
MarkLogic Node.js. "Or" query Not working
我有两个范围索引,我正在尝试 运行 下面的 "OR" 查询进行通配符搜索。但它没有返回结果。
下面不work.The查询returns空数组:
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);
});
但是当我单独执行查询时,它 returns 结果。
作品:
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*')
));
有很多东西要看。首先,QueryBuilder.word 函数接受一个字符串或 IndexedName(类似于从 QueryBuilder.element 或 QueryBuilder.property 返回的内容)。您正在传递 QueryBuilder.range 其中 returns 查询类型,而不是 IndexedName 类型。
其他一些注意事项是您需要检查数据库中的以下索引以确保它们已启用:"three character searches"、"fast element character searches"、"one character searches" 和"two character searches"。您会注意到每个 "slower document loads and larger database files." 都有一个警告,根据您的需要,您可以决定 "three character searches" 就是您所需要的,您只需等到至少三个字符发送到查询。
我有两个范围索引,我正在尝试 运行 下面的 "OR" 查询进行通配符搜索。但它没有返回结果。
下面不work.The查询returns空数组:
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);
});
但是当我单独执行查询时,它 returns 结果。
作品:
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*')
));
有很多东西要看。首先,QueryBuilder.word 函数接受一个字符串或 IndexedName(类似于从 QueryBuilder.element 或 QueryBuilder.property 返回的内容)。您正在传递 QueryBuilder.range 其中 returns 查询类型,而不是 IndexedName 类型。
其他一些注意事项是您需要检查数据库中的以下索引以确保它们已启用:"three character searches"、"fast element character searches"、"one character searches" 和"two character searches"。您会注意到每个 "slower document loads and larger database files." 都有一个警告,根据您的需要,您可以决定 "three character searches" 就是您所需要的,您只需等到至少三个字符发送到查询。