我有以下marklogic rest-api url:
http://marklogicserver:8060/v1/search?format=json&options=optionname&q=question
此网址会根据选项名称向我发送结果并对其进行格式化。一切都很好。
现在我需要使用Nodejs API执行相同的工作:
我使用querybuilder做同样的事情,但我的结果永远不会根据optionname格式化。
qb.optionsName = 'optionname';
//qb.search = {q: question};
db.documents.query(
qb.where(qb.parsedFrom(‘question’))
).result( function(results) {
results.forEach(function(document) {
console.log(JSON.stringify(document,null,2));
return document;
});
}).catch(function (error){
console.log(error);
});
虽然我确定optioname是正确的,但系统会返回以下错误消息:
[Error: query documents: response with invalid 400 status]
message: 'query documents: response with invalid 400 status',
statusCode: 400,
body:
{ errorResponse:
{ statusCode: 400,
status: 'Bad Request',
messageCode: 'REST-INVALIDPARAM',
message: 'REST-INVALIDPARAM: (err:FOER0000) Invalid parameter: No configured options: optionname' } }
答案 0 :(得分:2)
您没有将查询构建器传递给函数,而是将查询传递给它。尝试创建查询,然后附加optionsName属性,如下所示:
var query = qb.where(qb.parsedFrom(‘question’))
query.optionsName = 'optionname';
db.documents
.query(query)
.result( function(results) {
results.forEach(function(document) {
console.log(JSON.stringify(document,null,2));
return document;
});
})
.catch(function (error){
console.log(error);
});
答案 1 :(得分:2)
QueryBuilder完全在客户端中定义查询。这种方法为应用程序提供了动态构造查询的完全灵活性,并避免了维护持久查询选项的内容。
要使用服务器上保留的查询选项,您可以将组合查询定义为JavaScript对象,并标识该对象中的持久查询选项:
http://docs.marklogic.com/jsdoc/documents.html#toc14
但是,建议使用QueryBuilder替代方法。
希望澄清,
答案 2 :(得分:0)
marklogic的某个人给了我很好的语法:
我的查询。如果它可以帮助某人,那就是格式错误。
var query = qb.where();
query.optionsName = 'optionsname';
query.categories = ['none'];
query.search = {
'options':{
'search-option':['unfiltered']
},
'qtext': 'q'
};
db.documents
.query(query)
.result( function(results) {
console.log(JSON.stringify(results,null,2));
})
.catch(function (error) {
console.log(error);
});
}
非常感谢:)