[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 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)
|