当前位置: 首页 > 知识库问答 >
问题:

AEM查询生成器排除搜索中的文件夹

齐英耀
2023-03-14

我需要创建一个查询,其中参数如下:

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

但是,我需要排除这个总括文件夹中的某个路径,比如:“/content/myFolder/errowfolder”,然后在所有其他文件夹中搜索(其数量不断变化)

有没有办法做到这一点?我没有在网上找到它。

我还尝试了unequals操作,因为父路径被保存在JCR属性中,但仍然没有运气。我实际上需要不像来避免路径的所有出现。但是没有这样的事情:

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

共有3个答案

万喜
2023-03-14

下面是在给定的特定组id上指定运算符的查询。

path=/content/course/
type=cq:Page
p.limit=-1
1_property=jcr:content/event

group.1_group.1_group.daterange.lowerBound=2019-12-26T13:39:19.358Z
group.1_group.1_group.daterange.property=jcr:content/xyz

group.1_group.2_group.daterange.upperBound=2019-12-26T13:39:19.358Z
group.1_group.2_group.daterange.property=jcr:content/abc

group.1_group.3_group.relativedaterange.property=jcr:content/courseStartDate
group.1_group.3_group.relativedaterange.lowerBound=0
group.1_group.2_group.p.not=true
group.1_group.1_group.p.not=true
赫连永怡
2023-03-14

使用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,它们提供了一个setNathan ated方法。我自己从来没有用过,但是我认为你可以否定一个组,并将它与你正在搜索的路径组合成一个公共谓词,比如:

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);
哈沛
2023-03-14

这是一个老问题,但是你后来得到更多结果的原因在于你构建查询的方式。编写这样一个查询的正确方法如下:

path=/main/path/where
property=myProperty
property.operation=exists
property.value=true
group.p.or=true
group.p.not=true
group.1_path=/main/path/where/first/you/donot/want/to/search
group.2_path=/main/path/where/second/you/donot/want/to/search
p.limit=-1

注意:您在上次评论中的group.p.or将适用于您的所有组,因为它们没有由组号划定。如果您希望将OR应用于特定组(但不是所有组),您可以使用:

path=/main/path/where
group.1_property=myProperty
group.1_property.operation=exists
group.1_property.value=true
2_group.p.or=true
2_group.p.not=true
2_group.3_path=/main/path/where/first/you/donot/want/to/search
2_group.4_path=/main/path/where/second/you/donot/want/to/search

此外,数字本身并不重要——它们不必是连续的,只要属性谓词数字不被重用,这将导致在QB尝试解析它时引发异常。但为了可读性和一般惯例,它们通常是这样呈现的。

我假设你的例子是为了这个问题而放在一起的,但是很明显,你的“不搜索”路径必须是你想要搜索的主路径的子路径,或者将它们包含在查询中是多余的,否则查询将不会搜索它们。

6.3版的AEM查询生成器文档

希望这对将来的人有所帮助。

 类似资料:
  • 如何在给定节点下列出多个属性的所有属性和各自的值。 例如,在下面的代码中,我只能搜索一个属性。但我需要搜索10个不同的属性(alttext、img、promos等),并获得相应的值(如果存在)。

  • 我正在构建一个简单的元数据表,从查询中获取数据。我希望能够查询“type”变量的两个选项。然而| |不起作用;当我使用这个时,页面崩溃。

  • 我需要在AEM查询生成器中进行搜索,只获取尚未移动到新位置的标签。 添加到旧标签的唯一属性是"",它具有新位置的路径。 但是当我试图搜索没有这个属性的标签时,我没有得到任何结果: 我错过什么了吗?搜索由第三方完成,无法处理其收到的标签列表。所以我只需要通过这个查询获取正确的列表。

  • 我有以下工作查询 它在整个路径=/content/dam上运行,所以它遍历所有节点大约20分钟,并给出结果。 当以编程方式使用查询生成器api时,我如何才能批量使用它,比如-遍历1000个节点并按代码执行某些操作,然后继续查询并遍历下1000个节点等等?这可能吗? 谢谢。

  • 我试图根据特定属性的特定值对AEM query builder搜索结果进行排序。就像在MySQL这样的数据库中一样,我们也可以根据列的值进行排序(例如,按字段排序('columnName','anyColumnName'))。我们可以在AEM中使用类似的东西吗。 假设我们在path/content/dam/Assets下有5个资产。 资产名称------------dc: title 1.jpg-

  • 我需要使用AEM查询生成器检索父节点。 例如,这是我的问题: 此查询允许我检索以下元素: 使用此查询,可以检索放置在 /content/test/us/bar下的所有元素,这些元素包含8003170008212作为产品属性的值。 从前面的项目符号开始,我只需要返回父节点,例如: 我可以通过编程实现我的目标,迭代结果并使用3次getParent()方法。 我想知道:有没有一种方法可以通过查询生成器获