基于模式 Marklogic/java 脚本批量删除文档

Bulk delete documents based on a pattern Marklogic/java script

我正在尝试根据模式批量删除文档,但是由于该集合包含超过 500K 的文档,forloop 似乎挂起。下面是我的代码:

for (const uri of cts.uris("", null, cts.jsonPropertyValueQuery("source", "survey"))) {
  xdmp.documentDelete(uri);
}

谁能帮我一个更好的方法来删除 MarkLogic 中的文件,当文件量很大时?

尝试“煮沸海洋”类型的查询以在单个事务中修改大量文档可能会 运行 在执行时间、事务大小、扩展树缓存等方面受到限制.

最好将工作分解成更小的单元。

一种简单的方法是将工作生成多个事务,这些事务在任务服务器上执行。您可以使用 xdmp:spawn-function() 在 XQuery 中相当轻松地完成此操作(不幸的是,等效函数在 SJS 中不可用):

xquery version "1.0-ml";
for $URI in cts:uris("", (), cts:json-property-value-query("source", "survey"))
return xdmp:spawn-function(function(){ xdmp:document-delete($URI) })

您可以修改上面的代码以删除 URI 的子集,而不是一次一个。但是,这些删除事务应该执行得非常快(并且与您为任务服务器配置的线程一样多的线程并行执行),因此可能不值得编写更复杂的代码。

另一种选择是使用批处理工具,例如CoRB