MarkLogic Node.js&引用;或;查询不起作用
我有两个范围索引,我试图在或“查询下运行,该查询执行通配符搜索。但它并没有返回结果 不起作用。下面的查询返回空数组:MarkLogic Node.js&引用;或;查询不起作用,marklogic,Marklogic,我有两个范围索引,我试图在或“查询下运行,该查询执行通配符搜索。但它并没有返回结果 不起作用。下面的查询返回空数组: db.documents.query(qb.where( qb.or( qb.word(qb.range('informationProviderName'), 'a*'), qb.word(qb.range('functionalName'), 'a*') )).withO
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);
});
但是当我单独执行查询时,它会返回结果
有效:
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);
});
有效:
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*')
));
有很多事情要看。首先,QueryBuilder.word函数采用字符串或IndexedName(如从QueryBuilder.element或QueryBuilder.property返回的内容)。您正在传递QueryBuilder.range,它返回的是查询类型,而不是IndexedName类型
另外需要注意的是,您需要检查数据库上的以下索引,以确保它们已启用:“三字符搜索”、“快速元素字符搜索”、“一字符搜索”和“两字符搜索”。您会注意到,每个“较慢的文档加载和较大的数据库文件”都有一个相关的警告。根据您的需要,您可以决定“三字符搜索”是您所需要的,您只需等待至少有三个字符发送到查询。我甚至无法执行简单的“或”查询它不会返回结果。