MarkLogic 时间戳和搜索

问题描述 投票:0回答:1

我的集合中有三个记录,其时间信息记录如下:

{utcTime: "13:28:00+0000", utc: 1329398880000, etDate: "02/16" etTime: "08:28:00-0500"}
{utcTime: "13:02:00+0000", utc: 1333976569000, etDate: "04/09" etTime: "09:02:00-0400"}
{utcTime: "13:14:00+0000", utc: 1398172449000, etDate: "04/22" etTime: "09:14:00-0400"}

当我搜索

09:00:00-0400
09:30:00-0400 之间的所有 utcTime 列时,所有三个记录都会返回,因为 MarkLogic 正在将 -0400 转换为 UTC 并进行比较。 09:00:00-0400 等于 13:00:00+0000,因此所有记录均按预期返回。

但是我怎样才能避免这种时区比较呢? 如果用户只需要 09:00:00 到 09:30:00 之间的记录,无论时间偏移如何,则 09:02:00 和 09:14:00 记录应该是唯一返回的记录,而 08:28:00 -0500 被忽略?

有办法做到这一点吗?

marklogic
1个回答
0
投票

您可以在

etTime
属性上放置一个字符串范围索引,并搜索以“09:”开头的内容

cts:search(doc(), 
  cts:and-query((
    cts:json-property-range-query("etTime", ">", "09:*"),
    cts:json-property-range-query("etTime", "<", "10:*")
  ))
)
© www.soinside.com 2019 - 2024. All rights reserved.