Expand my Community achievements bar.

Dive into Adobe Summit 2024! Explore curated list of AEM sessions & labs, register, connect with experts, ask questions, engage, and share insights. Don't miss the excitement.
SOLVED

Exclude child path from fulltext search parent path using Querybuilder OR get search hit excerpt from XPATH/JCR SQL2 query

Avatar

Level 4

I want to exclude child nodes path from search path using querybuilder 

 

for example - parent folder is /content/mysite/en

 

and subfolders are

 

/content/mysite/en/testfolder1

/content/mysite/en/testfolder2

 

I want query builder to write a query to exclude these paths

 

I already looked at this question - 

https://stackoverflow.com/questions/45292778/aem-query-builder-exclude-a-folder-in-search

but grouping paths and p.not=true doesn't seem to be working as expected

 

I know it's a bit tricky to write such a query using query builder ; so I am using JCR/SQL2 query  - 

 

using 

 

SELECT * FROM [cq:Page] 
WHERE ISDESCENDANTNODE(page,'/content/mysite/en') 
AND CONTAINS(*, 'fulltext') 
AND NOT ISDESCENDANTNODE(page, '/content/mysite/en/testfolder1') 
AND NOT ISDESCENDANTNODE(page, '/content/mysite/en/testfolder2')

 

but the issue now is that We also want the search excerpt which is created automatically by querybuilder api's SearchResult's hit object - 

 

hit.getExcerpt()

 so is there a way I can get the excerpt using JCR/SQL2 query ?

 

OR is there a way I can build the exclude subfolder query using querybuilder; so that I can get excerpts from results? Both solutions will solve my case. 

 

If anyone has experience in excluding subfolder query using querybuilder; or building search excerpt using JCR/SQL2 query; or any other idea/suggestion for this case;  help will be much appreciated

 

1 Accepted Solution

Avatar

Correct answer by
Level 8

Hi @cqsapientu69896 

You can pass query map with properties as mentioned below to QueryBuilder API, define paths which needs to be excluded in group as highlighted below & then you can get hit.getExcerpt() from QueryBuilder search result.

 

1_property=property-name
1_property.value=property-value
path=/content/mysite/en
group.1_group.p.not=true
group.1_group.path=/content/mysite/en/testfolder1
group.1_group.path.self=true
group.2_group.p.not=true
group.2_group.path=/content/mysite/en/testfolder2
group.2_group.path.self=true

 

 

Hope this helps!

View solution in original post

2 Replies

Avatar

Community Advisor

can you check with 

 String sql= "SELECT * FROM sling:Folder WHERE jcr:path LIKE '"+path +"/%'  AND NOT jcr:path LIKE '"+path +"/%/%'";

that I got from one of the old community  you can check it on below link.

https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/question-regarding-query-b...

hope this will help.

Umesh Thakur

Avatar

Correct answer by
Level 8

Hi @cqsapientu69896 

You can pass query map with properties as mentioned below to QueryBuilder API, define paths which needs to be excluded in group as highlighted below & then you can get hit.getExcerpt() from QueryBuilder search result.

 

1_property=property-name
1_property.value=property-value
path=/content/mysite/en
group.1_group.p.not=true
group.1_group.path=/content/mysite/en/testfolder1
group.1_group.path.self=true
group.2_group.p.not=true
group.2_group.path=/content/mysite/en/testfolder2
group.2_group.path.self=true

 

 

Hope this helps!