Expand my Community achievements bar.

Applications for the 2024-2025 Adobe Experience Manager Champion Program are open!
SOLVED

Question about hybrid filtering option

Avatar

Level 1

I came across this option about AEM GraphQL hybrid filtering which combines both JCR filtering with AEM filtering. In this documentation: https://experienceleague.adobe.com/docs/experience-manager-cloud-service/content/headless/graphql-ap...
It was explained that entire load will be split between JCR and AEM graphql. I came to know that JCR filter has few limitations, where it does not work today, like case-insensitivity, null-check, contains not etc

In this session, the same was explained: https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/adobe-developers-live-may-...

 

However, the query showed in the session is like normal graphql query. It does not show any differentiation between JCR and AEM graphql filterings. I want to check how it actually works like how the JCR query will be setup and how the results will be provided according to the query written. How it will be different from regular graphql query. It would be great if any kind of documentation is provided which explains this part. 

1 Accepted Solution

Avatar

Correct answer by
Employee

Re:  ... I want to check how it actually works like how the JCR query will be setup and how the results will be provided according to the query written. How it will be different from regular graphql query. It would be great if any kind of documentation is provided which explains this part. 

 

Linking to my reply on a relevant thread: https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/adobe-developers-live-may-...

 

View solution in original post

5 Replies

Avatar

Level 2

Hello, I would add that you can configure the DEBUG logger for 

com.adobe.cq.dam.cfm.graphql.ContentFragmentsFetcher 

And there you can see the actual JCR query which is performed for your GraphQL query.

Avatar

Community Advisor

Hello @Nikita_Mitroshin 

 

Thanks for sharing the information. As suggested, we have configured the logger and the output is:

aanchalsikka_0-1697827984085.png

 

Queries executed from wknd-shared project:

- adventures-by-activity

SELECT main.* FROM [dam:Asset] AS main WHERE ISDESCENDANTNODE(main, '/content/dam') AND main.[jcr:content/contentFragment] = true AND main.[jcr:content/data/cq:model] = '/conf/wknd-shared/settings/dam/cfm/models/adventure' AND (([jcr:primaryType] IS NOT NULL)) ORDER BY main.[jcr:content/data/master/title] OPTION (INDEX TAG[fragments], TRAVERSAL FAIL)

- adventures-by-slug

SELECT main.* FROM [dam:Asset] AS main WHERE ISDESCENDANTNODE(main, '/content/dam') AND main.[jcr:content/contentFragment] = true AND main.[jcr:content/data/cq:model] = '/conf/wknd-shared/settings/dam/cfm/models/adventure' AND ((main.[jcr:content/data/*/slug] = 'bali-surf-camp')) ORDER BY main.[jcr:path] OPTION (INDEX TAG[fragments], TRAVERSAL FAIL)

 

Need some help to understand: how do we differentiate what part of GraphQL query is executed as a JCR-filter and graphQL filter?

Please suggest.

 


Aanchal Sikka

Avatar

Level 2

Hello @aanchal-sikka 

I think you might need to reverse-engineer the AEM code to understand what is the differentiation logic  

It can't be configured somehow.

Also, I see that the query you are using is traversal, so I would recommend to:

1. Follow this procedure https://experienceleague.adobe.com/docs/experience-manager-65/developing/headless/delivery-api/graph...

2. After that, install this package with the suggested indexes for GraphQL

 

Here I've shared some numbers of the tests I did with these indexes https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/aem-v6-5-17-and-graphql-in...

So once you have it you should see that even with the filters in the GraphQL queries, the  JCR queries should perform pretty fast.

Avatar

Correct answer by
Employee

Re:  ... I want to check how it actually works like how the JCR query will be setup and how the results will be provided according to the query written. How it will be different from regular graphql query. It would be great if any kind of documentation is provided which explains this part. 

 

Linking to my reply on a relevant thread: https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/adobe-developers-live-may-...