如何在给定节点下列出多个属性的所有属性和各自的值。
例如,在下面的代码中,我只能搜索一个属性。但我需要搜索10个不同的属性(alttext、img、promos等),并获得相应的值(如果存在)。
Map<String, String> map = new HashMap<String, String>();
map.put(TYPE_PREDICATE, "nt:base");
map.put(PATH_PREDICATE, printAttachmentJsonNodePath);
map.put("property", "fileReference");
map.put("p.excerpt", "true");
map.put(SEARCH_LIMIT_PREDICATE, "-1");
Query query = queryBuilder.createQuery(PredicateGroup.create(map),
resourceResolver.adaptTo(Session.class));
SearchResult result = query.getResult();
for (Hit hit : result.getHits()) {
String path = hit.getPath();
Resource resourceHit = resourceResolver.getResource(path);
Node node = resourceHit.adaptTo(Node.class);
String fileReference = node.getProperty("fileReference").getString();
System.out.println(fileReference);
}
如果您有很多属性,或者在运行时生成了大量属性,则可以使用谓词。班
您的代码:
Map<String, String> map = new HashMap<String, String>();
map.put(TYPE_PREDICATE, "nt:base");
map.put(PATH_PREDICATE, printAttachmentJsonNodePath);
map.put("property", "fileReference");
map.put("p.excerpt", "true");
map.put(SEARCH_LIMIT_PREDICATE, "-1");
Query query = queryBuilder.createQuery(PredicateGroup.create(map),
resourceResolver.adaptTo(Session.class));
SearchResult result = query.getResult();
威尔看起来是这样的:
PredicateGroup rootGroup = new PredicateGroup();
rootGroup.add(new Predicate("type").set("type", "nt:base"));
rootGroup.add(new Predicate("path").set("path", printAttachmentJsonNodePath));
rootGroup.add(new Predicate("property").set(property, "fileReference"));
rootGroup.add(new Predicate("property").set(property, "property1").set("value", value1));
.....
rootGroup.add(new Predicate("property").set(property, "propertyN").set("value", valueN));
rootGroup.set(Predicate.PARAM_EXCERPT, Boolean.TRUE.toString());
rootGroup.set(Predicate.PARAM_LIMIT, "-1");
Query query = queryBuilder.createQuery(rootGroup);
query.setHitsPerPage(limit); // also you could put limit here
SearchResult result = query.getResult();
...........
在这种情况下,将在以下属性之间创建条件:@property1=value1和@property2=value2
如果您想要OR,请创建单独的组并将其添加到根组:
PredicateGroup properties = new PredicateGroup();
properties.add(new Predicate("property").set(property, "property1").set("value", value1));
.....
properties.add(new Predicate("property").set(property, "propertyN").set("value", valueN));
properties.setAllRequired(false);
rootGroup.add(properties);
可以为多个属性使用数字前缀:
map.put("1_property", "jcr:content/cq:template");
map.put("1_property.value", "/apps/geometrixx/templates/homepage");
map.put("2_property", "jcr:content/jcr:title");
map.put("2_property.value", "English");
这是文件
我需要在AEM查询生成器中进行搜索,只获取尚未移动到新位置的标签。 添加到旧标签的唯一属性是"",它具有新位置的路径。 但是当我试图搜索没有这个属性的标签时,我没有得到任何结果: 我错过什么了吗?搜索由第三方完成,无法处理其收到的标签列表。所以我只需要通过这个查询获取正确的列表。
我正在构建一个简单的元数据表,从查询中获取数据。我希望能够查询“type”变量的两个选项。然而| |不起作用;当我使用这个时,页面崩溃。
我需要创建一个查询,其中参数如下: 但是,我需要排除这个总括文件夹中的某个路径,比如:,然后在所有其他文件夹中搜索(其数量不断变化) 有没有办法做到这一点?我没有在网上找到它。 我还尝试了操作,因为父路径被保存在JCR属性中,但仍然没有运气。我实际上需要来避免路径的所有出现。但是没有这样的事情:
如何在下面的查询生成器代码段中获得industries page属性有值的结果?(即,其值不是空字符串)
我需要使用AEM查询生成器检索父节点。 例如,这是我的问题: 此查询允许我检索以下元素: 使用此查询,可以检索放置在 /content/test/us/bar下的所有元素,这些元素包含8003170008212作为产品属性的值。 从前面的项目符号开始,我只需要返回父节点,例如: 我可以通过编程实现我的目标,迭代结果并使用3次getParent()方法。 我想知道:有没有一种方法可以通过查询生成器获
我有以下工作查询 它在整个路径=/content/dam上运行,所以它遍历所有节点大约20分钟,并给出结果。 当以编程方式使用查询生成器api时,我如何才能批量使用它,比如-遍历1000个节点并按代码执行某些操作,然后继续查询并遍历下1000个节点等等?这可能吗? 谢谢。