You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用xdmp:document-timestamp的MarkLogic范围查询:能否按日期区间检索文档?

如何用xdmp:document-timestamp在MarkLogic中检索日期区间内的文档

当然可以!xdmp:document-timestamp就是用来获取文档最后修改时间戳的核心函数,完全可以基于它构建范围查询,筛选出处于任意两个日期区间内的文档。下面我会一步步讲清楚实现方法、注意事项,还有实用的代码示例。

先搞懂核心逻辑

xdmp:document-timestamp返回的是文档的毫秒级UNIX时间戳,对应文档最后被创建、修改或覆盖的时间。MarkLogic默认会维护这个时间戳的索引,所以不需要额外创建自定义索引就能高效查询——这也是用它做时间范围筛选的一大优势。

要实现区间查询,核心步骤就是:

  • 把你的起始、结束日期转换成对应的毫秒时间戳
  • 用专门的时间戳范围查询函数构建查询条件
  • 执行搜索获取结果

具体实现示例

假设我们要筛选2023年全年(1月1日到12月31日)修改过的文档,代码可以这么写:

(: 1. 解析日期并转换为毫秒时间戳 :)
let $start-date := xdmp:parse-dateTime("[Y0001]-[M01]-[D01]", "2023-01-01")
let $end-date := xdmp:parse-dateTime("[Y0001]-[M01]-[D01]", "2023-12-31")
(: 注意:结束时间加1天,确保包含12月31日全天的文档 :)
let $start-timestamp := xdmp:datetime-to-millis($start-date)
let $end-timestamp := xdmp:datetime-to-millis(xdmp:add-day-to-dateTime($end-date, 1))

(: 2. 构建文档时间戳范围查询 :)
let $time-range-query := cts:document-timestamp-query($start-timestamp, $end-timestamp)

(: 3. 执行搜索,返回符合条件的文档 :)
return cts:search(fn:doc(), $time-range-query)

进阶:结合其他查询条件

如果需要同时筛选特定集合、目录的文档,只需要把时间戳查询和其他查询用cts:and-query组合起来就行。比如筛选"my-collection"集合中2023年修改的文档:

let $start-timestamp := xdmp:datetime-to-millis(xdmp:parse-dateTime("[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]Z", "2023-01-01T00:00:00Z"))
let $end-timestamp := xdmp:datetime-to-millis(xdmp:parse-dateTime("[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]Z", "2024-01-01T00:00:00Z"))

let $combined-query := cts:and-query((
  cts:document-timestamp-query($start-timestamp, $end-timestamp),
  cts:collection-query("my-collection")
))

return cts:search(fn:doc(), $combined-query)

注意事项

  • 时区问题:xdmp:parse-dateTime默认使用服务器时区,如果你的业务日期是UTC时间,记得在日期字符串后加上Z,比如"2023-01-01T00:00:00Z",避免时区转换错误。
  • 性能优先:优先使用cts:document-timestamp-query,而不是用cts:range-query直接包裹xdmp:document-timestamp()——前者直接利用内置索引,性能会好很多。
  • 时间戳的含义:时间戳记录的是文档最后一次修改的时间,包括创建、更新、覆盖操作,所以如果文档被多次修改,只会保留最新的时间戳。

内容的提问来源于stack exchange,提问作者CrazyNerd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:05:54