为什么使用 cts 搜索数组与使用节点 api 搜索数组不同?
Why is searching arrays using cts different than searching arrays using node api?
我有一个类似这个问题的问题:
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"
}
]
}
当我在查询控制台中 运行 以下代码时,它不会正确地 return 文档:
'use strict';
const queryText =
cts.jsonPropertyScopeQuery("address", cts.andQuery([
cts.jsonPropertyWordQuery("city", "Johnstone"),
cts.jsonPropertyWordQuery("state", "MO")
]));
cts.search(queryText);
当我在 Node.js 中 运行 这段代码时,它会 return 文档,因为它在评估时似乎结合了所有数组节点。
const queryText =
qb.scope(qb.property("address"), qb.and(
qb.word("city","Johnstone"),
qb.word("state","MO")
));
const query = qb.where(queryText);
有没有一种方法可以使用节点 API 获得 cts 功能?我宁愿使用节点 API 而不是在服务器端 javascript 查询上使用调用。
默认情况下,SJS 搜索 运行 filtered,这将删除任何误报结果。您可以通过向 SJS 搜索添加显式选项来切换该行为:
cts.search(queryText, "unfiltered");
默认情况下,Node.js 查询是 运行 unfiltered,这意味着您可能会遇到误报结果。
为了使您的 Node.js 搜索 运行 宁 过滤,请将 filtered
搜索选项添加到您的查询中:
const query = qb.where(queryText)
.withOptions({search:['filtered']});
我有一个类似这个问题的问题: 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"
}
]
}
当我在查询控制台中 运行 以下代码时,它不会正确地 return 文档:
'use strict';
const queryText =
cts.jsonPropertyScopeQuery("address", cts.andQuery([
cts.jsonPropertyWordQuery("city", "Johnstone"),
cts.jsonPropertyWordQuery("state", "MO")
]));
cts.search(queryText);
当我在 Node.js 中 运行 这段代码时,它会 return 文档,因为它在评估时似乎结合了所有数组节点。
const queryText =
qb.scope(qb.property("address"), qb.and(
qb.word("city","Johnstone"),
qb.word("state","MO")
));
const query = qb.where(queryText);
有没有一种方法可以使用节点 API 获得 cts 功能?我宁愿使用节点 API 而不是在服务器端 javascript 查询上使用调用。
默认情况下,SJS 搜索 运行 filtered,这将删除任何误报结果。您可以通过向 SJS 搜索添加显式选项来切换该行为:
cts.search(queryText, "unfiltered");
默认情况下,Node.js 查询是 运行 unfiltered,这意味着您可能会遇到误报结果。
为了使您的 Node.js 搜索 运行 宁 过滤,请将 filtered
搜索选项添加到您的查询中:
const query = qb.where(queryText)
.withOptions({search:['filtered']});