Marklogic: Данные не соответствуют запросу

Среда: клиент 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).

Спасибо


person JPA    schedule 19.10.2016    source источник
comment
Точная версия - Marklogic 8.0.5.   -  person JPA    schedule 21.10.2016
comment
После некоторого расследования в неверных возвращенных документах я нашел свойство (бренд), которое соответствует значению (MyBrand) в другой области. Таким образом, запрос не учитывает область действия (источники).   -  person JPA    schedule 26.10.2016


Ответы (1)


Такое поведение может быть ошибкой. Было бы хорошо подать запрос в службу поддержки, чтобы копнуть глубже.

Можно получить ложные срабатывания, когда вы отправляете нефильтрованный запрос, а родительское свойство с правильным именем содержит дочернее свойство с правильным именем, но с неправильным значением, в то время как другое свойство в другом месте документа имеет то же имя, что и дочернее свойство, и указанное значение.

Вы можете устранить эти ложные срабатывания, отправив отфильтрованный запрос (который работает медленнее) или включив индекс позиции значения элемента.

По умолчанию Node.js API выполняет запросы без фильтрации.

Чтобы увидеть, объясняет ли это ложные срабатывания, которые вы видите, вы можете включить фильтрацию:

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

Дополнительные сведения об этом методе построителя запросов см. в следующих статьях:

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

person ehennum    schedule 24.10.2016