Как запустить структурированный запрос - PullRequest
0 голосов
/ 02 ноября 2019

Такое ощущение, что это должно быть легко, но простые вещи не работают, поэтому вот так:

Я пытаюсь написать расширение REST API (с использованием SJS), которое будет принимать структурированный запрос, сделайте небольшую манипуляцию с частью, а затем запустите ее. Манипулирование входящим запросом было достаточно простым, но у меня возникли проблемы с результатом. Основной вопрос - если у вас есть структурированный запрос как объект JS, как вы его выполняете? Я хочу получить JSON в результате.

JSearch выглядел как правильный подход, но, похоже, не готов принять то, что я должен ему дать.

Это работает:

const jsearch = require('/MarkLogic/jsearch.sjs');
jsearch.documents()
  .where(cts.parse("cat"))
  .result()

Это не:

let query = 
  {
    "wordQuery": {
      "text": [ "cat" ], 
      "options": [ "lang=en" ]
    }
  };
jsearch.documents()
  .where(query)
  .result()

Это приводит к

JSEARCH-INVALARGS: fn. ошибка (ноль, "JSEARCH-INVALARGS", msg);- Неверные аргументы: где () принимает один или массив объектов cts.query ()

query - это объект JS. Я попытался превратить его в узел, но получил тот же результат. Как использовать объект JS, который содержит структурированный запрос?

1 Ответ

0 голосов
/ 02 ноября 2019

Работает ли это, если сначала десериализовать JSON-запрос с помощью конструктора cts.query (), как в .where(cts.query(jsonQuery))

В общем случае, передача запроса в виде JSON-сериализации cts.query и манипулированиеструктура JSON в основном модуле выглядит как правильный подход.

Словарь cts.query является расширенным набором словаря структурированных запросов. Кроме того, десериализация cts.query выполняется быстрее, чем преобразование JSON-представления запроса API поиска.

В случае, если это полезно для кого-то, кто рассматривает этот обмен, один из способов сериализации cts.query в JSONс xdmp.toJSON (), как в xdmp.toJSON(cts.wordQuery(['cat'], ['lang=en']))

Надеюсь, что поможет,

...