首页 > 解决方案 > cts:uri-match 选择特定格式

问题描述

在我的 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 查询来完成这项工作。

标签: marklogicmarklogic-9

解决方案


不幸的是,cts:uri-match采用通配符模式,而不是正则表达式。您可以获得的最接近的模式是"/documents/*.xml". 不过,它可能已经大大减少了结果的数量,具体取决于您的数据集。然后,您可以使用附加谓词过滤掉误报fn:matches。就像是:

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

因此,可能比直接传递正则表达式不太理想,但比对所有 uri 执行正则表达式更好。它应该可以与数百万个 uri 一起正常工作。


推荐阅读