环境:NodeJS客户端,Marklogic 8服务器。
来自NodeJS的查询是:
var query = qb.where(
qb.directory('/root/dir/'),
qb.scope(
qb.property('sources'),
qb.value('brand','MyBrand')
)
);
翻译的查询是:
{
"whereClause": {
"query": {
"queries": [
{
"directory-query": {
"uri": [
"/root/dir/"
]
}
},
{
"container-query": {
"json-property": "sources",
"value-query": {
"json-property": "brand",
"text": [
"MyBrand"
]
}
}
}
]
}
},
"queryType": "structured",
"queryFormat": "json"
}
查询返回10501个文档。
但是 20个文档与查询条件不匹配(sources.brand = MyBrand)
不正确文件的样本摘录" /root/dir/0029aaa0-53dc-11e6-8f88-311cf9885168.json"返回:
{
sources:
[
{
"somefield1": {
"somesubfield": "0D793B77-826A-4E19-BCEF-5F1E5C07271A"
},
"somefield2": "6408467",
"brand": "NA",
"somefield3": "TEST"
},
{
"somefield": {
"somesubfield": "832B4AE2-C817-4960-BF8C-63374E7D1B66"
},
"somefield2": "6408467",
"brand": "NA",
"somefield3": "TEST"
}
],
otherFieldsSkipped: true,
badScope:
[
{
"brand": "MyBrand",
},
],
}
问题出现在两个不同的平台上。
badScope [0] .brand 与值(MyBrand)匹配时,只有少数文档不正确。
由于
答案 0 :(得分:0)
此行为可能是个错误。提交支持请求深入挖掘会很好。
当您提交未经过滤的查询时,可能会出现误报,并且具有正确名称的父属性包含具有正确名称但值不正确的子属性,而文档中其他位置的其他属性具有与子属性和指定值。
您可以通过提交过滤查询(速度较慢)或打开元素值位置索引来消除这些误报。
默认情况下,Node.js API执行未过滤的查询。
要查看是否可以解释您所看到的误报,您可以启用过滤:
... the query ...
.withOptions({search:'filtered'})
有关此查询构建器方法的详细信息,请参阅:
http://docs.marklogic.com/jsdoc/queryBuilder.html#withOptions