Details
-
Bug
-
Resolution: Duplicate
-
Medium
-
4.4.0, 4.6.0
-
None
-
eZ Publish 4.4
eZ Find 2.3
EZSP-007-EZP4.4 Service Pack
Description
Fix for public issue http://issues.ez.no/18701 #018701: eZ Find issue when searching for a string with (:) or (+), features the ezfeZPSolrQueryBuilder::escapeQuery function, which effectively prevents SOLR filters from working. For instance, a fetch containing the following filter:
'filter', array( 'article/publish_date:[* TO *]' ),
...will fail because ezfeZPSolrQueryBuilder::escapeQuery will escape both "[" and "]" characters, resulting in the following SOLR output:
SEVERE: org.apache.solr.common.SolrException: Invalid Date String:'[*' at org.apache.solr.schema.DateField.parseMath(DateField.java:163) at org.apache.solr.schema.TrieDateField.readableToIndexed(TrieDateField.java:129) at org.apache.solr.schema.TrieDateField.toInternal(TrieDateField.java:134) at org.apache.solr.schema.FieldType.getFieldQuery(FieldType.java:529) at org.apache.solr.search.SolrQueryParser.getFieldQuery(SolrQueryParser.java:153) at org.apache.lucene.queryParser.QueryParser.Term(QueryParser.java:1449) at org.apache.lucene.queryParser.QueryParser.Clause(QueryParser.java:1337) at org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:1294) at org.apache.lucene.queryParser.QueryParser.Clause(QueryParser.java:1341) at org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:1265) at org.apache.lucene.queryParser.QueryParser.TopLevelQuery(QueryParser.java:1254) at org.apache.lucene.queryParser.QueryParser.parse(QueryParser.java:200) at org.apache.solr.search.LuceneQParser.parse(LuceneQParserPlugin.java:78) at org.apache.solr.search.QParser.getQuery(QParser.java:137) at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:99) at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:174) at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131) at org.apache.solr.core.SolrCore.execute(SolrCore.java:1321) at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:341) at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:244) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211) at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) at org.mortbay.jetty.Server.handle(Server.java:285) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:835) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:641) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:202) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378) at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
Steps to reproduce
Use the following fetch function (as an example):
{def $search_params = hash( 'query', $search_text, 'offset', $view_parameters.offset, 'limit', $page_limit, 'sort_by', hash( 'score', 'desc' ), 'filter', array( 'article/publish_date:[* TO *]' ), 'class_id', $classFilter, 'spell_check', array( true() ) ) } {def $search = fetch( 'ezfind', 'search', $search_params )}