【问题标题】:cts:uri-match to pick a particular formatcts:uri-match 选择特定格式
【发布时间】:2018-09-20 02:14:48
【问题描述】:

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

【问题讨论】:

    标签: marklogic marklogic-9


    【解决方案1】:

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

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

    因此,可能比直接传递正则表达式不太理想,但比对所有 uri 执行正则表达式更好。它应该适用于数百万个 uri。

    HTH!

    【讨论】:

    • 如果在谓词中应用过滤器时遇到问题,您还可以在 CORB 作业的流程模块中过滤 URI,让流程模块跳过处理不匹配的 URI正则表达式模式。
    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 2011-01-14
    • 2018-10-04
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多