Marklogic:数据不符合查询

Marklogic: Data do not comply with query

环境: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"
}  

查询returns10501个文档。

但是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",
            },
        ],
}

问题出现在 2 个不同的平台上。

只有少数文档不正确,其中 badScope[0].brand 匹配值 (MyBrand)。

谢谢

此行为可能是一个错误。最好提出支持请求以进行更深入的研究。

当您提交未经过滤的查询并且名称正确的父项 属性 包含名称正确但值不正确的子项 属性 而另一个 属性 在文档的其他地方与子 属性 和指定值具有相同的名称。

您可以通过提交过滤查询(速度较慢)或打开元素值位置索引来消除这些误报。

默认情况下,Node.js API 执行未过滤的查询。

要查看这是否可以解释您所看到的误报,您可以打开过滤:

... the query ...
.withOptions({search:'filtered'})

有关此查询生成器方法的详细信息,请参阅:

http://docs.marklogic.com/jsdoc/queryBuilder.html#withOptions