Нам нужно ограничить поиск MarkLogic последней версией управляемых документов, используя REST api от Marklogic. Мы используем MarkLogic 6.
Используя прямой xquery, вы можете использовать dls:documents-query()
в качестве параметра дополнительного запроса (см. Есть ли способ ограничить поиск marklogic для определенной версии документа).
Но REST api требует XML, а не произвольного xquery. Вы можете достаточно легко превратить обычные cts-запросы в XML (выполнить <some-element>{cts:word-query("hello world")}</some-element>
в QConsole).
Если я попробую это с dls:documents-query()
, я получу следующее:
<cts:properties-query xmlns:cts="http://marklogic.com/cts">
<cts:registered-query>
<cts:id>17524193535823153377</cts:id>
</cts:registered-query>
</cts:properties-query>
Помимо того, что он не совсем прозрачен ... насколько безопасно это число? Нам нужно будет указать это в наших параметрах запроса, чтобы мы не могли его восстанавливать каждый раз, когда нам это нужно. Я просмотрел здесь две разные установки, и их число было одинаковым, но гарантированно ли оно будет таким же и изменится ли оно когда-нибудь? Например, при обновлении MarkLogic?
Кроме того, если номер безопасный, всегда ли будет зарегистрированный запрос? В документации говорится, что зарегистрированные запросы могут очищаться системой в разное время, но речь идет о зарегистрированных пользователем запросах, и я не уверен, насколько это применимо к внутренним запросам.
Это вообще правильный подход? Если мы не можем этого сделать, мы всегда можем настроить коллекции и таким образом ограничить поиск, но мы бы предпочли использовать dls:documents-query
, если это возможно.