CQ5中的QueryBuilder API - 基于日期范围查询

时间:2014-06-28 19:37:40

标签: search cq5 query-builder

我需要在“上个月”,“上周”,“过去3个月”,“去年”的基础上进行搜索。 我使用的代码如下。

map.put("1_relativedaterange.property", "date");
map.put("1_relativedaterange.lowerBound", "-1M");

分别放-7d,-3M,-1y。

这些适用于最后的日期范围。我希望根据这些标准,不应该搜索日期是下个月,下周还是明年。但它也在搜索,不应该。 有人请指出我在这里做错了吗?

感谢。

1 个答案:

答案 0 :(得分:1)

当你指定lowerBound时,生成的Xpath查询是

/jcr:root/content/geometrixx/en//element(*, cq:Page)
[
(@jcr:content/cq:lastModified > xs:dateTime('2014-05-30T02:18:50.479Z')) 
]

这意味着它将获取日期值大于上述值的所有项目。

您可以将upperBound值指定为0,表示现在。除了满足您的其他标准外,这将仅返回那些不超过当前日期的结果。

map.put("1_relativedaterange.property", "date");
map.put("1_relativedaterange.lowerBound", "-1M");
map.put("1_relativedaterange.upperBound", "0");

和生成的相应XPath查询是

/jcr:root/content/geometrixx/en//element(*, cq:Page)
[
(@jcr:content/cq:lastModified > xs:dateTime('2014-05-30T02:25:21.026Z')
and @jcr:content/cq:lastModified < xs:dateTime('2014-06-29T02:25:21.026Z')) 
]

当您需要调试查询时,querydebug控制台(/libs/cq/search/content/querydebug.html)可能会派上用场。

有关相对日期范围谓词评估程序的其他信息,请参阅the docs