如何根据插入时间从MarkLogic检索文档

时间:2016-05-31 16:58:38

标签: xml xquery marklogic

我正在尝试找出一种根据插入文档的时间从MarkLogic检索文档的方法。

据我所知,使用xdmp:document-timestamp检查文档时间戳,但此时间戳取决于文档的最新更新。那么MarkLogic会维护文档的插入时间戳吗?如果是,那我该如何使用呢?

目前,我使用fn:doc()[last()-10 to last()]中的谓词作为示例来获取最近插入的文档。但我想要一种更动态的方式来获取特定时间戳之间的文档。

2 个答案:

答案 0 :(得分:4)

MarkLogic可以选择自动维护上次修改。它是早期的选项,并在properties-fragment中保存lastModified属性。但是,属性存储在单独的片段中,从而导致额外的开销,并且磁盘上的占用空间更大。如果可能,请考虑向文档本身添加元素或属性,并自行维护。您可以在提取转换中执行此操作,或者(如果您希望确保它始终存在)在预提交触发器中。如果您希望将原始内容与这些添加内容分开,请使用信封模式。

拥有该元素后,您可以在其上放置一个普通范围索引,并使用它来查询和排序结果。如果你想要最新的10个文档,请确保按降序排序,然后先获取10个。

如果您还希望将相关日期用于相关性评分,请确保在范围查询中使用非零评分函数选项。另见:http://docs.marklogic.com/cts:element-range-query

HTH!

答案 1 :(得分:1)

MarkLogic不会自动执行此操作(可能用于双时态文档或DLS?)。

此外,您可能不会依赖URI来插入。

您想要的内容听起来像是内容处理框架(CPF)的一部分。 CPF在“属性”片段中存储一些有用的信息。如果这还不够,可以使用管道样本来保存插入和更新时间戳等内容。

- 或者通过您自己的代码或触发器以最符合您需求的方式存储此信息。您不必为此使用CPF,如果它是您唯一的用例,CPF在某些情况下可能有点过度,因为它有开销。触发器或您自己的代码可能会影响相同的结果。存储数据的位置取决于您。如果您尚未使用属性并且在文档中有一个方便的位置(某些标题部分或包装器),则将其存储在那里而不是属性片段(由于某些原因)。然后,如果你有二进制内容,那么使用属性就是选项。