Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn more

View all

Sign in to view all badges

SOLVED

Searching in specific order

aembytes
Level 4
Level 4

We want our results from content to be returned in this order

 

  • URL contains <keyword/>
  • Page title contains <keyword/>
  • Tags contain <keyword/>
  • Page Description (will crawl all source metadata)  contains <keyword/>
  • Boost frequency <keyword/> to the top

 

how should we go about ensuring URL is included as first search criteria?

 

Thanks

Search Engine
1 Accepted Solution
Vijayalakshmi_S
Correct answer by
Community Advisor
Community Advisor

Hi @aembytes

In order for URL to be first in the Search Results, we need to boost nodeName in the respective index (that is used for fulltext query execution)

Example:

For a full text query like below, cqPageLucene is used. 

path=/content/we-retail
fulltext=Skitouring
type=cq:Page
p.limit=-1

In order to have URLs that contain Skitouring to be rendered first than the jcr:title for instance,  update the cqPageLucene as below and reindex.

Vijayalakshmi_S_0-1630434346873.png

Vijayalakshmi_S_1-1630434408271.png

Explain Query response:

Vijayalakshmi_S_2-1630434540278.png

Query Results:

Just for a cross check I have amended the title of "Experience" page to Skitouring (which we see as a result in 4th entry)

Vijayalakshmi_S_3-1630434628507.png

 

Suggest to check which index is used for your fulltext query execution(as evident by Explain Query) and boost nodeName and other properties of that index accordingly. 

 

Update: Per official doc, boost should be of type "Double". (Screenshots from my local is when I used String and it works too)

View solution in original post

4 Replies
Ritesh_M
Community Advisor
Community Advisor

Hi @aembytes ,

 

You can create custom predicates for that. You can use orderBy predicate with desired property and can join the results. Also, you can boost a specific property and give desired value to have order in place.

 

https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/aem-fulltext-search-result...

https://github.com/paulrohrbeck/aem-links/blob/master/querybuilder_cheatsheet.md

 

Vijayalakshmi_S
Correct answer by
Community Advisor
Community Advisor

Hi @aembytes

In order for URL to be first in the Search Results, we need to boost nodeName in the respective index (that is used for fulltext query execution)

Example:

For a full text query like below, cqPageLucene is used. 

path=/content/we-retail
fulltext=Skitouring
type=cq:Page
p.limit=-1

In order to have URLs that contain Skitouring to be rendered first than the jcr:title for instance,  update the cqPageLucene as below and reindex.

Vijayalakshmi_S_0-1630434346873.png

Vijayalakshmi_S_1-1630434408271.png

Explain Query response:

Vijayalakshmi_S_2-1630434540278.png

Query Results:

Just for a cross check I have amended the title of "Experience" page to Skitouring (which we see as a result in 4th entry)

Vijayalakshmi_S_3-1630434628507.png

 

Suggest to check which index is used for your fulltext query execution(as evident by Explain Query) and boost nodeName and other properties of that index accordingly. 

 

Update: Per official doc, boost should be of type "Double". (Screenshots from my local is when I used String and it works too)

View solution in original post

aembytes
Level 4
Level 4

One additional query, what you mentioned worked, so that's awesome. If I had to put a page with the highest occurrence of search word on the top, would that be OOB behavior in jcr:score ordering or I'll have to do that additionally with a different attribute etc?

 

 

Vijayalakshmi_S
Community Advisor
Community Advisor

Thanks for the confirmation @aembytes 

It happens OOTB. For fulltext index, search results are sorted by jcr:score descending (result with highest score being the first) by default.

If you would like to cross check this, you can print the jcr:score as part of query results and observe the behaviour. 

Using the same example : 

select [jcr:path], [jcr:score] from [cq:Page] as a where contains(*, 'Skitouring') and isdescendantnode(a, '/content/we-retail')

Result:

  • results are returned with highest score being the top. 
  • experience page has the term "Skitouring" only in jcr:title and hence the least score.

Vijayalakshmi_S_0-1630891841762.png

Only thing to note is that if you have union of fulltext queries, scoring is applied for each subquery individually and hence the ultimate result won't be ordered by score in this case.