以下是一个AEM查询构建器的示例代码,用于在结果列表中排除根文件夹:
import com.day.cq.search.PredicateGroup;
import com.day.cq.search.Query;
import com.day.cq.search.QueryBuilder;
import com.day.cq.search.result.Hit;
import com.day.cq.search.result.SearchResult;
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import javax.jcr.Session;
import java.util.HashMap;
import java.util.Map;
@Component(service = YourService.class)
public class YourService {
@Reference
private QueryBuilder queryBuilder;
public void searchItems(ResourceResolver resourceResolver) {
// 创建查询构建器
Session session = resourceResolver.adaptTo(Session.class);
Map queryParameters = new HashMap<>();
queryParameters.put("path", "/content"); // 指定要搜索的路径
queryParameters.put("type", "cq:Page"); // 指定要搜索的资源类型
queryParameters.put("property", "jcr:content/cq:lastReplicatBy"); // 指定要搜索的属性
queryParameters.put("property.value", "admin"); // 指定属性的值
queryParameters.put("p.limit", "-1"); // 指定结果的最大数量
// 创建排除根文件夹的谓词
Map notPredicate = new HashMap<>();
notPredicate.put("path", "/content"); // 指定要排除的路径
notPredicate.put("type", "nt:unstructured"); // 指定要排除的资源类型
PredicateGroup notPredicateGroup = PredicateGroup.create(notPredicate);
// 将排除谓词添加到主谓词组中
PredicateGroup mainPredicateGroup = PredicateGroup.create(queryParameters, notPredicateGroup);
// 构建查询
Query query = queryBuilder.createQuery(mainPredicateGroup, session);
SearchResult result = query.getResult();
// 处理搜索结果
for (Hit hit : result.getHits()) {
// 处理每个搜索结果
String path = hit.getPath();
// ...
}
}
}
在上面的代码中,我们首先创建了一个查询构建器,然后指定要搜索的路径、资源类型、属性和属性值。接下来,我们创建了一个排除根文件夹的谓词,并将其添加到主谓词组中。最后,我们使用查询构建器来构建查询,并处理搜索结果。
请注意,上述示例代码中的YourService
类是一个示例服务类,您需要根据您的应用程序需求来调整和使用该类。此外,还需要确保您已经正确配置了AEM查询构建器,并在代码中引入了正确的依赖项。