Marklogic:数据不符合查询

时间:2016-10-19 07:41:54

标签: marklogic marklogic-8

环境: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)匹配时,只有少数文档不正确。

由于

1 个答案:

答案 0 :(得分:0)

此行为可能是个错误。提交支持请求深入挖掘会很好。

当您提交未经过滤的查询时,可能会出现误报,并且具有正确名称的父属性包含具有正确名称但值不正确的子属性,而文档中其他位置的其他属性具有与子属性和指定值。

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

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

要查看是否可以解释您所看到的误报,您可以启用过滤:

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

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

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