2017-07-25 71 views
0

我需要创建一个查询,其中PARAMS是这样的:AEM查询生成器排除在搜索文件夹

queryParams.put("path", "/content/myFolder"); 
queryParams.put("1_property", "myProperty"); 
queryParams.put("1_property.operation", "exists"); 
queryParams.put("p.limit", "-1"); 

但是,我需要排除这种毯子文件夹内的某个路径,说:"/content/myFolder/wrongFolder"和搜索所有其他文件夹(其编号不断变化)

有没有办法做到这一点?我没有发现它完全在线。

我也试过unequals操作,因为父路径正在保存在JCR属性中,但仍然没有运气。我实际上需要unlike以避免所有路径出现。但是,有没有这样的事情:

path=/main/path/to/search/in 
group.1_property=cq:parentPath 
group.1_property.operation=unequals 
group.1_property.value=/path/to/be/avoided 
group.2_property=myProperty 
group.2_property.operation=exists 
group.p.or=true 
p.limit=-1 
+0

如果SQL2查询会为你,那么你可以为执行工作这个查询:select * from [nt:unstructured] as p where (isdescendantnode(p,[/ content/myFolder /]) AND NOT isdescendantnode(p,[/ content/myFolder/wrongFolder /])) (p。*,'myProperty')让我知道这是否有效。 –

+0

@SumantaPakira,我现在不能使用SQL2,因为它需要对应用程序进行重大更改。因此,现在只能在查询构建器中查找解决方案。 –

回答

0

使用QueryBuilder的,你可以执行:

map.put("group.p.not",true) 
map.put("group.1_path","/first/path/where/you/donot/want/to/search") 
map.put("group.2_path","/second/path/where/you/donot/want/to/search") 

而且我已经检查PredicateGroup的类的API,他们提供了一个setNegated方法。我从来没有用它自己,但我认为你可以否定一个组,并将其合并成你喜欢搜索上的路径共同断言:

final PredicateGroup doNotSearchGroup = new PredicateGroup(); 
doNotSearchGroup.setNegated(true); 
doNotSearchGroup.add(new Predicate("path").set("path", "/path/where/you/donot/want/to/search")); 

final PredicateGroup combinedPredicate = new PredicateGroup(); 
combinedPredicate.add(new Predicate("path").set("path", "/path/where/you/want/to/search")); 
combinedPredicate.add(doNotSearchGroup); 

final Query query = queryBuilder.createQuery(combinedPredicate); 
+0

group.p.not没有为我工作。我尝试了下面,并得到比以前更多的结果: path =/main/path/where/I/want/to/search group.p.not = true group.1_path =/first/path/where/you/donot/want/to/search group.2_property = myProperty group.2_property.operation = exists group.p.or = true p.limit = -1 –