#xquery #marklogic #marklogic-8 #marklogic-9
#xquery #marklogic #marklogic-8 #marklogic-9
Вопрос:
Недавно я начал работать с базой данных MarkLogic 10
Что мне нужно сделать, это найти документы, у которых есть идентификатор, подобный
wew35r-ui856-iiu
Когда я запрашиваю вот так
cts:element-value-match(xs:Qname("id"),".*-.*")
Я получаю 0 результатов
но когда я делаю
fn:matches("wew35r-ui856-iiu",".*-.*")
It return true
И удивительно, когда я делаю
cts:element-value-match(xs:Qname("id"),"*")
Я получаю целый список, который также включает wew35r-ui856-iiu.
Я просмотрел документацию и все, но не смог заставить ее работать.
Ответ №1:
Для cts:element-value-match
не поддерживаются полные шаблоны регулярных выражений, только шаблоны подстановочных знаков.
Использовать шаблон подстановки для поиска значений, содержащих тире -
:
cts:element-value-match(xs:QName("id"),"*-*")
И затем, если вам нужно, вы могли бы отфильтровать эти результаты с помощью более конкретного регулярного выражения в фильтре предикатов:
cts:element-value-match(xs:QName("id"),"*-*")[matches(., "(w -w ){2}")]
Комментарии:
1. Сноска к этому полезному объяснению:
cts:element-value-match()
сопоставляет документы на основе запроса по индексам, гдеfn:matches()
фильтры проверяют документы в памяти. Для хорошей производительности в масштабе лучше всего выполнять как можно больше запросов к индексам и как можно меньше фильтрации в памяти.