这可以通过创建自定义AbstractPredicateEvaluator并使用您自己的比较器覆盖getOrderByComparator来完成。然后,您将通过调用registerPredicateEvaluator为您的查询注册您的自定义谓词评估器。
在下面的示例中,您可以使用任何您想要的customSort.sortby
属性。如果您的比较器处理多种类型的排序,这将很有用。您可以通过谓词从 中获取此信息predicate.get("sortby")
。
QueryBuilder builder = resourceResolver.adaptTo(QueryBuilder.class);
Map<String, String> params = new HashMap<String, String>();
params.put("1_group", "true");
params.put("1_group.1_type", "cq:Page");
params.put("1_group.2_type", "dam:Asset");
params.put("2_group.p.or", "true");
params.put("2_group.1_path", "/content");
params.put("2_group.2_path", "/content/dam");
params.put("fulltext", text);
params.put("p.limit", "-1");
params.put("customSort.sortby", "last-modified");
PredicateGroup pg = PredicateGroup.create(params);
Query query = builder.createQuery(pg, resourceResolver.adaptTo(Session.class));
query.registerPredicateEvaluator("customSort", new CustomSortPredicateEvaluator());
SearchResult result = query.getResult();