3

我正在尝试使用内置的查询构建器 api对 CQ 中的内容进行全文搜索。这工作正常,但现在我想将搜索结果限制为过去 2 个月内修改过的结果。我看过使用相对日期时间谓词。我正在使用的属性是:

   QueryBuilder builder = sling.getService(QueryBuilder.class);
   String fulltextSearchTerm = request.getParameter("q");

   Map<String, String> map = new HashMap<String, String>();
   map.put("relativedaterange", "@jcr:content/cq:lastModified");
   map.put("relativedaterange.lowerBound", "-2M");
   map.put("fulltext", fulltextSearchTerm);
   map.put("path", "/content/test/");
   map.put("type", "cq:Page");
   map.put("orderby", "@jcr:content/cq:lastModified");
   map.put("orderby.sort", "desc");

   Query query = builder.createQuery(PredicateGroup.create(map), resourceResolver.adaptTo(Session.class));

这给了我搜索结果,但不限于最近 2 个月内修改过的结果。我是正确使用这些属性还是需要设置其他值?

4

2 回答 2

4

relativedaterange关键是relativedaterange.property. 这显示在父类DateRangePredicateEvaluator的 java 文档中。并且通过使用查询构建器调试器,它表明您不需要@在乞求值时使用符号。

所以最终它最终成为:

  map.put("1_relativedaterange.property", "jcr:content/cq:lastModified");
  map.put("1_relativedaterange.lowerBound", "-2M");
于 2012-08-16T11:25:53.530 回答
0

为了快速测试您的查询,您可以访问 http://xxxx:4502/libs/cq/search/content/querydebug.html 并输入您需要添加到谓词组的参数。将这些添加到谓词组,您应该得到结果。

path=/content/geometrixx
type=cq:Page
1_relativedaterange.property=jcr:content/cq:lastModified
1_relativedaterange.lowerBound=-2M

这里“ relativedaterange”是这个谓词评估器的名称

这里 2M 表示 2 个月,其他可用选项如1s 2m 3h 4d 5w 6M 7y(一秒、两分钟、三小时、四天、五周、6 个月、7 年)。,请参阅http://dev.day.com/docs/en/cq/5-4/javadoc/com/day/cq/search/eval/RelativeDateRangePredicateEvaluator.html了解更多详情。

于 2014-06-28T11:00:46.307 回答