Построить запрос cts на основе грамматики поиска

У меня есть вариант использования, когда мне нужно написать собственное расширение REST, и в нем я должен построить cts:query на основе текстовой строки, предоставленной пользователем. Есть ли способ, которым я могу использовать либо

  • передать cts:query search:search ?
  • или как я могу использовать силу грамматики поиска, как search:search строит cts:query ?

Пользовательское ограничение поиска не будет работать в моем случае.

------------ Обновлено, добавлено больше контекста----------------

У меня есть два разных типа объектов в моей базе данных. Когда пользователь запрашивает, я получаю результаты обоих типов сущностей, и они объединяют результаты. Каждый тип сущности имеет различную схему взвешивания для своих атрибутов.
поэтому я закончил тем, что написал собственное расширение REST, где я создайте cts:query для каждого типа объекта, а затем выдайте несколько cts:search, а затем объедините результаты. Это работает, но не работает, когда пользователь отправляет с помощью грамматики поиска.
В качестве обходного пути (возможно, это не так). У меня есть шлюз API и когда пользователь выполняет вызов, в шлюзе API я выполняю несколько вызовов, используя REST API готового поиска, с параметрами поиска для каждого типа объекта, а затем в GATEWAY, я объединяю их..
Теперь я нужно поддерживать логику в marklogic и одну в шлюзе.. что нормально.. я хотел посмотреть, смогу ли я обойтись без всего в Marklogic


person Ravi    schedule 21.02.2021    source источник
comment
Похоже, вы ищете <additional-query>. У вас есть все возможности для поиска: поиск в docs.marklogic.com/guide/ search-dev/appendixa#id_67369   -  person first last    schedule 22.02.2021


Ответы (2)


Рассмотрим cts:parse(), который является современной, более быстрой, более гибкой и более надежной альтернативой search:parse() для создания cts:query не только в XQuery, но и в SJS:

https://docs.marklogic.com/cts:parse

Если вам нужно создать структуру запроса на клиенте, одна из возможностей — построить сериализацию cts:query с использованием XML или JSON DOM API на клиенте и использовать конструктор cts:query() для анализа сериализованного cts:query. на эноде.

Вы можете увидеть XML-сериализацию cts:query с помощью:

xdmp:quote(document{...YOUR QUERY...}/*)

и сериализация JSON с помощью:

xdmp:to-json-string(...YOUR QUERY...)

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

person ehennum    schedule 22.02.2021

Получение и обработка qtext довольно проста: просто используйте search:parse. Он возвращает cts:query, который можно объединить с другими cts-запросами и передать либо в search:resolve, оптический запрос (где вы передаете cts-запрос в качестве аргумента в op:where), либо в cts:search по старинке.

Обработка структурированного запроса сложнее. К сожалению, нет официальных API для преобразования этого запроса в cts.

ХТХ!

person grtjn    schedule 22.02.2021