Ami*_*ope 2 marklogic marklogic-9
在我的 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 查询来完成这项工作。
不幸的是,cts:uri-match采用通配符模式,而不是正则表达式。您能得到的最接近的是像这样的模式"/documents/*.xml"。不过,根据您的数据集,它已经可以大幅减少结果数量。然后,您可以使用带有 的附加谓词过滤掉误报fn:matches。就像是:
cts:uri-match('/documents/*.xml')[fn:matches(., '^/documents/\d+\.xml$')]
因此,也许比直接传递正则表达式稍微不太理想,但比对所有 uri 执行正则表达式要好。它应该可以很好地处理数百万个尿路。
哈!