首页 > 解决方案 > MarkLogic如何在指定林中插入文档

问题描述

我的数据库中有重复的 URI。我想通过在我的test-dup数据库的不同林中使用相同的 URI 复制问题来进行测试,但它会排除错误。看起来我无法在森林中分配 URI。

1.0-ml] XDMP-PLACEKEYSLOCKING:xdmp:document-insert("/xquery/catalog.xml", 557........., (), (), 0, (xs:unsignedLong("13222250964842568399" ), xs:unsignedLong("15490631252765310070"))) -- 快速锁定不能与位置键一起使用。

xquery version "1.0-ml";
let $XML:=<catalog>
             <product dept="WMN">
             <number>557</number>
             <name language="en">Fleece Pullover</name>
             <colorChoices>navy black</colorChoices>
</product>
let $filename:= "/xquery/catalog.xml"
return
xdmp:document-insert($filename,$XML,(),(),0,xdmp:database-forests(xdmp:database("test-dup")) )

标签: marklogic

解决方案


您的数据库时间戳是否设置为“快速”?

为了通过显式指定林键将文档加载到林中,该林必须存在并附加到您要加载到的数据库中。尝试将文档加载到不属于上下文数据库的林中将引发异常。此外,必须在数据库配置上将锁定参数设置为严格,否则将引发 XDMP-PLACEKEYSLOCKING 异常。

如果您将其更改为strictthen 您将看不到错误,但仍然不会重复。

复制重复文档问题的一种简单方法是:

  1. 确保禁用再平衡器
  2. 分离其中一个test-dup森林(即 test-dup1)
  3. 插入您的文档
  4. 分离它插入的森林(即test-dup2)
  5. 重新附加 test-dup1 森林
  6. 再次插入文档
  7. 附加 test-dup1 和 test-dup2 森林

您现在将拥有相同 URI 的重复文档,因为它将同时存在于 test-dup1 和 test-dup2 森林中。


推荐阅读