AEM 6.5 | Search component for content fragments | Community
Skip to main content
Level 3
November 4, 2022
Solved

AEM 6.5 | Search component for content fragments

  • November 4, 2022
  • 3 replies
  • 1718 views

I am looking to create a custom component to pull content fragments based on type(content fragment model) and/or a field filter. Wondering if anyone from the community has already created such types of components. If yes, could you please share the link?

 

Thanks.

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Mani_kumar_

Hi 

You can utilize the Query builder concept for searching any type of data in your custom code and write query on the fragment type with path as your root cf path

For more information on query builder please follow this article

https://experienceleague.adobe.com/docs/experience-manager-64/developing/platform/query-builder/querybuilder-api.html?lang=en

 

3 replies

Mani_kumar_
Community Advisor
Mani_kumar_Community AdvisorAccepted solution
Community Advisor
November 4, 2022

Hi 

You can utilize the Query builder concept for searching any type of data in your custom code and write query on the fragment type with path as your root cf path

For more information on query builder please follow this article

https://experienceleague.adobe.com/docs/experience-manager-64/developing/platform/query-builder/querybuilder-api.html?lang=en

 

Saravanan_Dharmaraj
Community Advisor
Community Advisor
November 4, 2022

Below blog shows exactly how to query the fragments using query builder based on model. Please check it out,

https://aemsimplifiedbynikhil.wordpress.com/2020/10/11/content-fragment-as-java-apis/ 

 

Map<String, String> map = new HashMap<>();
map.put("type", "dam:Asset");
map.put("path", "/content/dam");
map.put("First_property", "jcr:content/contentFragment");
map.put("First_property.value", "true");
map.put("Second_property", "jcr:content/data/cq:model");
map.put("Second_property.value", "conf/fragmentexamples/settings/dam/cfm/models/<your-model-name>");
map.put("property.and", "true");
map.put("p.limit", "-1");

QueryBuilder queryBuilder = request.getResourceResolver().adaptTo(QueryBuilder.class);
Query query = queryBuilder.createQuery(PredicateGroup.create(map),
request.getResourceResolver().adaptTo(Session.class));
final SearchResult result = query.getResult();
krati_garg
Adobe Employee
Adobe Employee
November 4, 2022

@mukeshaem mostly this can be achieved with Query Builder as pointed by answers below.
But in case of Content Fragments, I personally prefer using GraphQL, which will optimize and would prove to be a better solution in case Content Fragments and Content Fragment Models scale to a larger number. It could also prove to be a better option, if the component requirement get more complex and asks for even more complex queries. Please refer below link to achieve your usecase:

https://github.com/adobe/aem-headless-client-java

 

https://experienceleague.adobe.com/docs/experience-manager-cloud-service/content/headless/graphql-api/sample-queries.html?lang=en#sample-all-schemes-datatypes