在我的MarkLogic数据库中,我们有符合以下格式的URI格式的文档:
/documents/12345.xml
/documents/12-abc.xml
/documents/abc-123-def.xml
/12345.xml
我想在cts:uri-match中运行一个正则表达式,以仅选择那些符合格式的uri
> /documents/{integer-values}.xml
请提出如何进行这项工作的建议。数据库中有数百万个文档,我只想选择符合上述格式的uri,将对这些文档运行CORB流程以进行转换。我不想获取所有URI,然后运行fn:matches查询以使其正常工作。
答案 0 :(得分:4)
不幸的是,cts:uri-match
采用通配符模式,而不是正则表达式。您可以获得的最接近的是像"/documents/*.xml"
这样的模式。但是,这可能已经大大减少了结果的数量,具体取决于您的数据集。然后,您可以使用fn:matches
的附加谓词过滤掉误报。像这样:
cts:uri-match('/documents/*.xml')[fn:matches(., '^/documents/\d+\.xml$')]
因此,与直接传递正则表达式相比,最优程度可能略差一些,但在所有情况下都比进行正则表达式更好。数百万欧元,它应该可以正常工作。
HTH!