Почему поиск в массивах с использованием cts отличается от поиска в массивах с использованием узла api? - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть вопрос, похожий на этот вопрос: Marklogic (Nodejs API) - Поиск документов, которые соответствуют 2 (или более) условиям в атрибуте массива объектов

У меня есть следующий документ:

{
  "address": [
    { "type": "mailing",
      "street": "1001 Main Street",
      "city": "Springfield",
      "state": "MO"
    },
    { "type": "location",
      "street": "989 First Street",
      "city": "Johnstone",
      "state": "WY"
    }
  ]
}

Когда я запускаю следующий код в консоли запросов, он корректно не возвращает документ:

'use strict';

const queryText = 
  cts.jsonPropertyScopeQuery("address", cts.andQuery([
    cts.jsonPropertyWordQuery("city", "Johnstone"),
    cts.jsonPropertyWordQuery("state", "MO")
  ]));

cts.search(queryText);

Когда я запускаю этот код в Node.js, он возвращаетдокумента, потому что он, кажется, объединяет все узлы массива при оценке.

const queryText =
  qb.scope(qb.property("address"), qb.and(
    qb.word("city","Johnstone"),
    qb.word("state","MO")
  ));

const query = qb.where(queryText);

Есть ли способ получить функциональность cts с помощью Node API?Я бы предпочел использовать Node API вместо использования invoke в запросе JavaScript на стороне сервера.

1 Ответ

0 голосов
/ 29 сентября 2018

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

cts.search(queryText, "unfiltered");

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

Чтобы запустить поиск Node.js с фильтром , добавьте параметр поиска filtered к своему запросу:

const query = qb.where(queryText)
  .withOptions({search:['filtered']});
...