我有一个与此问题类似的问题: Marklogic (Nodejs API) - Search documents that match 2 (or more) conditions in object array attribute
我有以下文件:
{
"address": [
{ "type": "mailing",
"street": "1001 Main Street",
"city": "Springfield",
"state": "MO"
},
{ "type": "location",
"street": "989 First Street",
"city": "Johnstone",
"state": "WY"
}
]
}
当我在查询控制台中运行以下代码时,它不会正确返回文档:
'use strict';
const queryText =
cts.jsonPropertyScopeQuery("address", cts.andQuery([
cts.jsonPropertyWordQuery("city", "Johnstone"),
cts.jsonPropertyWordQuery("state", "MO")
]));
cts.search(queryText);
当我在Node.js中运行此代码时,它确实返回了文档,因为它在评估时似乎合并了所有数组节点。
const queryText =
qb.scope(qb.property("address"), qb.and(
qb.word("city","Johnstone"),
qb.word("state","MO")
));
const query = qb.where(queryText);
是否可以使用Node API获得cts功能?我宁愿使用Node API而不是在服务器端javascript查询上使用invoke。
答案 0 :(得分:2)
默认情况下,SJS搜索运行 filtered ,它将删除所有假阳性结果。您可以通过在SJS搜索中添加显式选项来切换该行为:
cts.search(queryText, "unfiltered");
默认情况下,运行unfiltered的Node.js查询,这意味着您可能会遇到假阳性结果。
为了使您的Node.js搜索运行得到过滤,请在查询中添加filtered
搜索选项:
const query = qb.where(queryText)
.withOptions({search:['filtered']});