marklogic - 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 查询来完成这项工作。
解决方案
不幸的是,cts:uri-match
采用通配符模式,而不是正则表达式。您可以获得的最接近的模式是"/documents/*.xml"
. 不过,它可能已经大大减少了结果的数量,具体取决于您的数据集。然后,您可以使用附加谓词过滤掉误报fn:matches
。就像是:
cts:uri-match('/documents/*.xml')[fn:matches(., '^/documents/\d+\.xml$')]
因此,可能比直接传递正则表达式不太理想,但比对所有 uri 执行正则表达式更好。它应该可以与数百万个 uri 一起正常工作。
!
推荐阅读
- android - 如何区分我正在走的街道和我周围的其他街道?
- plesk - 无法再在 Plesk 中创建 plesk.page 又名占位符域
- flutter - Flutter firestore 流将所有条目返回为 null
- javascript - 如何在 Amazon Mechanical Turk 上的 javascript 中访问 csv 文件变量?
- java - 将平面结构转换为 Java 类层次结构
- c++ - 当调用它必须使用的库是导致它崩溃的原因时,如何防止我的 C++ 程序崩溃?
- postgresql - PgAdmin 4 - 如何查看每个查询的输出消息
- python - 如何使用硒获得所需的输出
- laravel - Laravel-Excel 导出关系数据
- python - 如何避免下溢尝试将元素归零