marklogic - 如何使用 xdmp :eval in Marklogic? 进行时间点查询

标签 marklogic marklogic-9

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

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

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

TIA。

最佳答案

刚刚尝试一下并获得最新版本,而不是空序列。这是我对你想要做的事情的理解:

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

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

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

您要求 MarkLogic 将时钟倒回一格并为您提供当时存在的文档。然而,时间戳确实与时钟时间相关。它们不仅仅在数据库状态发生变化时增加。来自 MarkLogic 的 Administrator's Guide :

The ticks are calculated at 10,000,000 ticks per second

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

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

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

关于marklogic - 如何使用 xdmp :eval in Marklogic? 进行时间点查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48704318/

相关文章:

marklogic - 使用 mlcp 将文档加载到自定义休息端点

sparql - CTS 范围查询与 SPARQL 查询性能

marklogic - 检索 MarkLogic 9 中的所有文档计数有所不同

java - 使用 java 的 marklogic 中的方面

javascript - 我可以使用哪些搜索选项来限制 marklogic 搜索 API 关键字搜索,使其不搜索提到的 json 属性值?

MarkLogic - 使 CPF 在 URI 为 "name.xml"且没有目录或斜杠的每个摄取的文档上运行

marklogic - XML 标签值的分面

xml - 上传 MarkLogic 时强制执行 XML contentType

java - 使用 java 客户端 api 对 Marklogic 数据库中的文档进行批量修补

marklogic - 在 XML 文档中搜索 Xpath 及其值并从 Marklogic 获取文档 URI