【问题标题】:Marklogic: Data do not comply with queryMarklogic:数据不符合查询
【发布时间】:2017-02-28 17:19:42
【问题描述】:

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

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

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

谢谢

【问题讨论】:

  • 确切版本是 Marklogic 8.0.5
  • 经过一番调查,在不正确的返回文件中,我发现一个属性(品牌)与其他范围内的值(MyBrand)匹配。所以查询不尊重范围(来源)。

标签: marklogic marklogic-8


【解决方案1】:

这种行为可能是一个错误。最好提交支持请求以深入挖掘。

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多