[MAGNOLIA-7824] deprecation of cmsfn.search should be reconsidered Created: 30/Jan/19  Updated: 08/Jun/20

Status: Open
Project: Magnolia
Component/s: templating
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Neutral
Reporter: Bradley Andersen Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Bug DoR:
[ ]* Steps to reproduce, expected, and actual results filled
[ ]* Affected version filled

 Description   

cmsfn.search has been deprecated (as of M 5.4) in favor of
searchfn.searchContent

This seems to replace a fully fledged queryString search with keyword search:

[1] cmsfn.search eventually calls QueryUtil.search, which accepts a real SQL-ish statement: Query query = manager.createQuery(statement, language);

[2] searchfn.searchContent eventually calls Query query = jcrQueryManager.createQuery(String.format(SEARCH_QUERY_PATTERN ...)) where SEARCH_QUERY_PATTERN = "SELECT rep:excerpt() from %s WHERE jcr:path like '%s/%%' AND contains(., '%s') ORDER BY jcr:score DESC";

 



 Comments   
Comment by Bradley Andersen [ 30/Jan/19 ]

A few notes from the Magnolia user who first reported this.

[#assign queryString = "select * from [nt:base] AS t WHERE ISDESCENDANTNODE('/Home/News') and date is not null order by date desc"]
[#assign searchResults = searchfn.searchContent('website', queryString, '/ ','nt:base') /]
[#if searchResults?has_content]
       [#list searchResults as item]
              ${item.title!}<br/>
       [/#list]
[/#if] 

The above works if we replace queryString with a keyword.

Another example:

This works:

[#assign searchResults = searchfn.searchContent('website', 'beamline', '/','nt:base') /]
[#if searchResults?has_content]
       [#list searchResults as item]  
              ${item.title!}<br/>   
       [/#list]
[/#if] 

But this does not:

[#assign queryString = "select * from [nt:base] AS t WHERE date is not null order by date desc"]
[#assign searchResults = searchfn.searchContent('website', queryString, '/','nt:base') /]
[#if searchResults?has_content]
       [#list searchResults as item]  
              ${item.title!}<br/>   
       [/#list]
[/#if] 

The latter leads to an exception like

Caused by: javax.jcr.RepositoryException: Exception building query: org.apache.lucene.queryParser.ParseException: Cannot parse 'select * from [nt\:base] AS t WHERE date is not null order by date desc': Encountered " "]" "] "" at line 1, column 23.
Was expecting one of:
    "TO" ...
    <RANGEIN_QUOTED> ...
    <RANGEIN_GOOP> ...
    
 
         at org.apache.jackrabbit.core.query.lucene.LuceneQueryBuilder.createQuery(LuceneQueryBuilder.java:244)
         at org.apache.jackrabbit.core.query.lucene.QueryImpl.execute(QueryImpl.java:109)
         at org.apache.jackrabbit.core.query.QueryImpl$1.perform(QueryImpl.java:132)
         at org.apache.jackrabbit.core.query.QueryImpl$1.perform(QueryImpl.java:129)
         at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216)
         at org.apache.jackrabbit.core.query.QueryImpl.execute(QueryImpl.java:128)
         at info.magnolia.templating.functions.SearchTemplatingFunctions.searchContent(SearchTemplatingFunctions.java:163)
         at info.magnolia.templating.functions.SearchTemplatingFunctions.searchContent(SearchTemplatingFunctions.java:133) 

 

 

Generated at Mon Feb 12 04:27:09 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.