[ 
https://issues.apache.org/jira/browse/SOLR-13430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16826985#comment-16826985
 ] 

David Smiley commented on SOLR-13430:
-------------------------------------

[~thetaphi] the issue was correctly reported to LUCENE because the relevant 
portion of the functionality here is on the Lucene end.  It would be more 
correct for us here to refer to {{DateRangePrefixTree}} and not 
{{DateRangeField}} but it's not a big deal I think.

> DateRangeField does not accept ISO 8601 date/time strings with more ore less 
> than 3 decimal places
> --------------------------------------------------------------------------------------------------
>
>                 Key: SOLR-13430
>                 URL: https://issues.apache.org/jira/browse/SOLR-13430
>             Project: Solr
>          Issue Type: Improvement
>      Security Level: Public(Default Security Level. Issues are Public) 
>    Affects Versions: 8.0
>         Environment: Solr running solr:7.7-alpine Docker image
>            Reporter: Thomas Lemmé
>            Assignee: David Smiley
>            Priority: Major
>         Attachments: LUCENE-8773.patch, LUCENE-8773.patch
>
>
> *Context*: Solr running solr:7.7-alpine Docker image
> *Steps to reproduce:*
>  * create a DateRangeField field type 
> {{<fieldType name="dateRange" class="solr.DateRangeField"/>}}
>  * add a field to the schema:
> {{<field name="openingHoursDates" type="dateRange" multiValued="true"/>}}
>  * start & populate the core
>  * Query the core with a filter query on the DateRangeField:
> /select?&q.alt=*&defType=dismax&fq={!field f=openingHoursDates 
> op=Contains}[2019-04-21T12:34:56.100Z TO *2019-04-21T12:34:56.1Z*]
> *Expected:*
>  * Solr returns matching documents
> *Actual:*
>  * ParseException is thrown & Solr returns Message "Couldn't parse date 
> because: Improperly formatted datetime: 2019-04-21T12:34:56.1Z"
>  
> The timestamp has been created using DateTimeFormatter.ISO_DATE_TIME. I guess 
> Solr should support Strings generated with the java datetime API.
>  
> *Stacktrace*:
> {noformat}
> 2019-04-19 09:00:14.670 ERROR (qtp1543148593-18) [ x:snpindex] 
> o.a.s.h.RequestHandlerBase org.apache.solr.common.SolrException: Couldn't 
> parse date because: Improperly formatted datetime: 2019-04-21T12:34:56.1Z
> at org.apache.solr.schema.DateRangeField.parseShape(DateRangeField.java:100)
> at 
> org.apache.solr.schema.DateRangeField.parseSpatialArgs(DateRangeField.java:134)
> at 
> org.apache.solr.schema.AbstractSpatialFieldType.getFieldQuery(AbstractSpatialFieldType.java:340)
> at 
> org.apache.solr.search.FieldQParserPlugin$1.parse(FieldQParserPlugin.java:45)
> at org.apache.solr.search.QParser.getQuery(QParser.java:173)
> at 
> org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:207)
> at 
> org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:272)
> at 
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:199)
> at org.apache.solr.core.SolrCore.execute(SolrCore.java:2551)
> at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:710)
> at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:516)
> at 
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:395)
> at 
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:341)
> at 
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1602)
> at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540)
> at 
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
> at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
> at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
> at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
> at 
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1588)
> at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
> at 
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345)
> at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
> at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
> at 
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1557)
> at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
> at 
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247)
> at 
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
> at 
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:220)
> at 
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
> at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
> at 
> org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:335)
> at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
> at org.eclipse.jetty.server.Server.handle(Server.java:502)
> at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364)
> at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
> at 
> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
> at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
> at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
> at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
> at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
> at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
> at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
> at 
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
> at 
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
> at 
> org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
> at java.lang.Thread.run(Thread.java:748)
> Caused by: java.text.ParseException: Improperly formatted datetime: 
> 2019-04-21T12:34:56.1Z
> at 
> org.apache.lucene.spatial.prefix.tree.DateRangePrefixTree.parseCalendar(DateRangePrefixTree.java:512)
> at 
> org.apache.lucene.spatial.prefix.tree.DateRangePrefixTree.parseUnitShape(DateRangePrefixTree.java:431)
> at 
> org.apache.lucene.spatial.prefix.tree.NumberRangePrefixTree.parseShape(NumberRangePrefixTree.java:188)
> at org.apache.solr.schema.DateRangeField.parseShape(DateRangeField.java:97)
> ... 46 more
> Caused by: java.lang.StringIndexOutOfBoundsException: String index out of 
> range: 23
> at java.lang.String.substring(String.java:1963)
> at 
> org.apache.lucene.spatial.prefix.tree.DateRangePrefixTree.parseCalendar(DateRangePrefixTree.java:507)
> ... 49 more
> snpindex_1 |
> 2019-04-19 09:00:14.670 INFO (qtp1543148593-18) [ x:snpindex] 
> o.a.s.c.S.Request [snpindex] webapp=/solr path=/select 
> params={q.alt=*&defType=dismax&fq={!field+f%3DopeningHoursDates+op%3DContains}[2019-04-21T12:34:56.100Z+TO+2019-04-21T12:34:56.1Z]}
>  status=400 QTime=5{noformat}
> *Solution*:
> The misconception in the current code is that it parses "milliseconds" but 
> it's actually the decimal places of seconds.
> I modified the parser to parse as many decimal places as available. The 
> result is then normalized to milliseconds to fit the Java Calendar 
> implementation.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to