cts: uri-match для выбора определенного формата - PullRequest
0 голосов
/ 19 сентября 2018

В моей базе данных MarkLogic есть документы, которые соответствуют формату URI следующими способами:

/documents/12345.xml
/documents/12-abc.xml
/documents/abc-123-def.xml
/12345.xml

Я хочу запустить регулярное выражение в cts: uri-match, чтобы выбрать только те URI, которыесоответствуют формату

> /documents/{integer-values}.xml

Подскажите, пожалуйста, как сделать эту работу.В базе данных есть миллионы документов, и я хочу выбрать только тот Uris, который соответствует вышеуказанному формату, для этих преобразований будет запущен процесс CORB для этих документов.Я не хочу получать все URI, а затем выполнить запрос fn: совпадения, чтобы сделать эту работу.

1 Ответ

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

К сожалению, cts:uri-match принимает шаблон подстановки, а не регулярное выражение.Самое близкое, что вы можете получить, с шаблоном типа "/documents/*.xml".Хотя это может значительно сократить количество результатов, в зависимости от вашего набора данных.Затем вы можете отфильтровать ложные срабатывания с помощью дополнительного предиката с fn:matches.Примерно так:

cts:uri-match('/documents/*.xml')[fn:matches(., '^/documents/\d+\.xml$')]

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

HTH!

...