Expand my Community achievements bar.

Enhance your AEM Assets & Boost Your Development: [AEM Gems | June 19, 2024] Improving the Developer Experience with New APIs and Events

How to get relevance score from QueryBuilder?


Level 5

I am running a variety of queries and I am trying to sort them by @jcr:score descending.  I am noticing that the queryBuilder is returning a value of 0.01 for all results.  This is true for me using fulltext search, tag based search, very simple searches with filters, and very complex searches.


How are you supposed to sort by relevance using the jcr:score property?


For reference, I can literally run any query on this sheet and everything comes back with 0.01 for the score: aem-links/querybuilder_cheatsheet.md at master · paulrohrbeck/aem-links (github.com)

1 Accepted Solution


Correct answer by
Community Advisor
3 Replies


Correct answer by
Community Advisor

Hi @dylanmccurry 


With AEM 6.1 - Indexing plays a role that was not in 5.6.


Please check the relevant discussions here:

  1. https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/aem-fulltext-search-result...
  2. https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/xpath-query-ignoring-the-s...

Hope it helps!

Kiran Vedantam.


Level 5

So this is AEM 6.5.


I am also using QueryBuilder ... does this work with query builder?


jcr:contains(., 'jelly sandwich^4')


Community Advisor


To get the relevance score of a document to a particular query in AEM's QueryBuilder, you can use the setExplain(true) method to include the explanation of the score in the search results.

import javax.jcr.Session;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import com.day.cq.search.QueryBuilder;

// Get the QueryBuilder instance from the SlingHttpServletRequest object
QueryBuilder queryBuilder = slingRequest.adaptTo(QueryBuilder.class);

// Create a Map object for the query parameters
Map<String, String> queryParams = new HashMap<String, String>();

// Set the search term
queryParams.put("fulltext", "some query");

// Set the path to search
queryParams.put("path", "/content/my-site");

// Set the search type to "fulltext"
queryParams.put("type", "fulltext");

// Include the score explanation in the search results
queryParams.put("explain", "true");

// Execute the search
QueryResult queryResult = queryBuilder.createQuery(session, Query.XPATH, queryParams).getResult();

// Iterate through the hits to get the relevance score for each document
for (Hit hit : queryResult.getHits()) {


In this example, queryParams.put("explain", "true") is used to include the explanation of the score in the search results. Then, hit.getScore() is used to retrieve the relevance score of each hit. Note that the Hit object is from the com.day.cq.search.result.Hit package.