Hi,
I would like to carry out search in AEM where in I would like to search for the exact word such as "Insurance Broker".
The search should provide only that reference which has the exact word match "Insurance Broker".
If we use AEM full text search and carry out the search using above keyword, it returns the pages in result even if the word "Insurance" and "Broker" are present at two different locations within page. Appreciate any assistance.
Sample Query (ignore the OR condition as I need to search for multiple keywords)
Thanks,
Sumit Kulkarni
type=cq:Page
path=/content/mysite/en
group.p.or=true
group.1_group.fulltext=Insurance Broker
group.2_group.fulltext=Insurance Claim
orderby.sort=desc
p.limit=-1
Solved! Go to Solution.
Views
Replies
Total Likes
Hi @sumeet_a_kulkar,
Check this out. Please note that the search string is in double quotes inside the single quotes. I haven't tried this myself but hope it helps.
SELECT * FROM [nt:base] AS s WHERE CONTAINS(s.*, '"Insurance Broker"')
References:
https://stackoverflow.com/questions/48077571/why-does-contains-find-inequal-text-strings-in-jcr-sql2
Thanks,
Ram
Hi @sumeet_a_kulkar ,
Please check the below example and try same in your project
Java: String pageTitle, pagePath Map params = [:] params["path"] = path params["type"] = "cq:Page" params["fulltext"] = searchKey params["orderby"] = "@jcr:score" now use Query interface to create a query object that will in turn use builder object of Query Builder interface to build the query. Query query = builder.createQuery(PredicateGroup.create(params), session) searchResult will contain the result of the JCR query. A hit represents a single search result which is adapted to a page so as to fetch the page title and page url for display. SearchResult searchResult = query.result Long totalHits = searchResult.getTotalMatches() for (Hit hit : searchResult.hits) { Page page = hit.resource.adaptTo(Page) pageTitle = page.title pagePath = page.path searchHit = new JSONObject() searchHit.put("totalHits", totalHits) searchHit.put("path", pagePath) if (!pageTitle) { pageTitle = pagePath.substring(pagePath.lastIndexOf(‘/’) + 1, pagePath.length()) } searchHit.put("title", pageTitle) resultArray.put(searchHit) } resultObject.put("data", resultArray) return resultObject
Thank you for the reply. But if the search key is not a single word but a combination of words then the page appears in result if the page contains all these keywords at random locations. It does not consider the entire searchkey as a single word. (Insurance Broker as a single word)
params["fulltext"] = searchKey
I am trying sql2 query as well but this also behaves as Xpath based on my observation so far.
You can add more words coma separated in one line instead of sql2.
Hi @sumeet_a_kulkar, could you please try to put entire search phrase inside double quote. So your sample query will look like that:
type=cq:Page path=/content/mysite/en group.p.or=true group.1_group.fulltext="Insurance Broker" group.2_group.fulltext="Insurance Claim" orderby.sort=desc p.limit=-1
Hi @sumeet_a_kulkar,
Check this out. Please note that the search string is in double quotes inside the single quotes. I haven't tried this myself but hope it helps.
SELECT * FROM [nt:base] AS s WHERE CONTAINS(s.*, '"Insurance Broker"')
References:
https://stackoverflow.com/questions/48077571/why-does-contains-find-inequal-text-strings-in-jcr-sql2
Thanks,
Ram
Your X path query is missing double quotes for search key please modify like this and try search
type=cq:Page path=/content/mysite/en group.p.or=true group.1_group.fulltext="Insurance Broker" group.2_group.fulltext="Insurance Claim" orderby.sort=desc p.limit=-1
This one is correct Xpath query.
- Thanks.
Views
Likes
Replies