Need help to in optimization an existing query
Brief: I need optimization in an existing query which is for fetching all the promo from /etc/promos.get.promoid.allPromos.json call
Issue/Feedback: JCR query seems to be expensive and need some optimization for better performance.
I got the feedback: consider creating an index or changing the query,
So, I need help how in modifying (creating an index or changing the query) the code and by which I'll get the same result that I got earlier (all promo)?
Code: currently I am gerneting the query like below code:
@CheckForNull
private Query generateSearchQuery(String searchfield, String searchCriteria, String searchPath, ResourceResolver resourceResolver)
throws RepositoryException {
Query query = null;
String queryString = "";
String generateQuerySearchCriteria = searchCriteria;
if (generateQuerySearchCriteria.equalsIgnoreCase(SprintConstants.ALL_PROMOS_SELECTOR)) {
queryString = QUERY_BASE_PROMO + searchPath + "])) and (identifier is not null) ";
} else if(searchfield.equalsIgnoreCase(SprintConstants.OFFERS_PROMOID)){
generateQuerySearchCriteria = '%' + generateQuerySearchCriteria + '%';
queryString = QUERY_BASE_DEVICE_AND_PROMO + searchPath + QUERY_BRACKETS + SprintConstants.PROPERTY_IDENTIFIER + QUERY_LIKE + generateQuerySearchCriteria + QUERY_UNIVERSAL_PROMO;
}
else{
generateQuerySearchCriteria = '%' + generateQuerySearchCriteria + '%';
queryString = QUERY_BASE_DEVICE_AND_PROMO + searchPath + QUERY_BRACKETS + searchfield + QUERY_LIKE + generateQuerySearchCriteria + QUERY_UNIVERSAL_PROMO;
}
Session session = resourceResolver.adaptTo(Session.class);
if (session != null) {
QueryManager queryManager = session.getWorkspace().getQueryManager();
query = queryManager.createQuery(queryString, Query.JCR_SQL2);
}
return query;
}

