2

我已经更改了数据库的合并策略。我将合并时间戳设置为当前时间atmp(15181726371585905)。更改合并策略后,我更新了一个具有相同 URI 和集合的文档。现在,当我尝试获取已删除的文档时,我没有得到它。我得到空序列。

xdmp:eval("doc('/docs/test.xml')", (),
<options xmlns="xdmp:eval">
  <timestamp>{xdmp:request-timestamp()-1}</timestamp>
</options>)

如何使用上述查询获取已删除的文档。

TIA。

4

2 回答 2

2

只需尝试一下并获得最新版本,而不是空序列。这是我对您要执行的操作的理解:

您已将时间戳设置为当前时间 ( t ),然后插入文档(在时间t + m 处),然后在同一 URI 处插入文档的新版本(在时间t + n处)。您现在想要从时间t + m检索文档。

问题是您为读取请求指定时间戳的方式:

<timestamp>{xdmp:request-timestamp()-1}</timestamp>

您要求 MarkLogic 将时钟倒回一格,并给您当时存在的文档。但是,时间戳确实与时钟时间相关。它们不仅会在数据库状态更改时增加。来自 MarkLogic 的管理员指南

滴答声以每秒 10,000,000 个滴答声计算

因此,通过从当前时间戳中减去一个,您要求返回大约 1/10,000,000 秒。

如果您知道要查询数据库时的挂钟时间,则可以使用xdmp:wallclock-to-timestamp.

顺便说一句,您还在 Stack Overflow 上提出了一个关于如何跟踪文档的多个版本的问题。我想提醒您不要将时间点查询视为其中之一,如果这是您的想法的话。为此,文档库服务或双时态文档是更好的解决方案。有关为什么不使用 PIT 查询进行版本控制的更多信息,请参阅管理员指南的合并概述部分,特别是“禁用合并的危险”和“合并将改变分数”部分。

于 2018-02-12T13:57:16.350 回答
0

将合并时间戳设置为当前时间会告诉服务器从该点开始保留片段。在设置新的合并时间戳值之前系统中的所有文档在逻辑上都会在该时间之前具有片段时间戳。因此,当您更新文档时,系统不再提供以前的版本(因为您说从现在开始只保留带有片段时间戳的文档)。

一些参考资料:

于 2018-02-10T16:21:04.317 回答