2013-09-16 21 views
15

Jestem nowy w Solr. Pomyślnie zindeksowałem niektóre dane, ale po przejściu przez atrybut daty do odpowiedniego pola Solr otrzymuję wyjątek:Solr Niepoprawny łańcuch dat Wyjątek

Przekazuję ciąg "15.06.2011 13:51:41", który jest częstą datą format dla krajów takich jak Niemcy. Jednak po kilku badaniach, dowiedziałem się, że Solr spodziewa się, że data będzie w formacie UTC.

Moje szczegółowe pytanie brzmi: Czy mogę w pewnym momencie zmienić format na UTC? Czy byłby to przypadek dla DateFormatTransformer, czy jest to MUSI przekazać go w odpowiednim formacie na początku?

EDYCJA: Nie używam DataImportHandler. Używam DirectUpdateHandler2, przekazując dane bezpośrednio do Solr. Skoro jest to nazywane "bezpośrednią aktualizacją", czy moje szanse są bardzo złe w przekształcaniu czegokolwiek?

dla rekordów, wyjątek Dostałem:

ERROR - 2013-09-13 15:52:07.705; org.apache.solr.common.SolrException; org.apache.solr.common.SolrException: Invalid Date String:'15.06.2011 13:51:41' 
    at org.apache.solr.schema.DateField.parseMath(DateField.java:182) 
    at org.apache.solr.schema.TrieField.createField(TrieField.java:616) 
    at org.apache.solr.schema.TrieField.createFields(TrieField.java:655) 
    at org.apache.solr.schema.TrieDateField.createFields(TrieDateField.java:157) 
    at org.apache.solr.update.DocumentBuilder.addField(DocumentBuilder.java:47) 
    at org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:118) 
    at org.apache.solr.update.AddUpdateCommand.getLuceneDocument(AddUpdateCommand.java:73) 
    at org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:210) 
    at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:69) 
    at org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:51) 
    at org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalAdd(DistributedUpdateProcessor.java:556) 
    at org.apache.solr.update.processor.DistributedUpdateProcessor.versionAdd(DistributedUpdateProcessor.java:692) 
    at org.apache.solr.update.processor.DistributedUpdateProcessor.processAdd(DistributedUpdateProcessor.java:435) 
    at org.apache.solr.update.processor.LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:100) 
    at org.apache.solr.handler.extraction.ExtractingDocumentLoader.doAdd(ExtractingDocumentLoader.java:121) 
    at org.apache.solr.handler.extraction.ExtractingDocumentLoader.addDoc(ExtractingDocumentLoader.java:126) 
    at org.apache.solr.handler.extraction.ExtractingDocumentLoader.load(ExtractingDocumentLoader.java:228) 
    at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:74) 
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135) 
    at org.apache.solr.core.RequestHandlers$LazyRequestHandlerWrapper.handleRequest(RequestHandlers.java:241) 
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:1904) 
    at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:659) 
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:362) 
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:158) 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) 
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 
    at org.eclipse.jetty.server.Server.handle(Server.java:368) 
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) 
    at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) 
    at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:942) 
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1004) 
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:636) 
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) 
    at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) 
    at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) 
    at java.lang.Thread.run(Unknown Source) 

Odpowiedz

17

Według Solr DateField documentation, ten format jest wymagany:

data pole powinno mieć postać 1995-12-31T23 : 59: 59Z Końcowy "Z" oznacza czas UTC i jest obowiązkowy (Zobacz poniżej wyjaśnienie UTC). Opcjonalne ułamkowe sekundy są dozwolone, o ile nie kończą się końcowym 0 (ale każda dokładność większa niż milisekundy zostanie zignorowana). Wszystkie pozostałe części są obowiązkowe.

Jedyną opcją jest przekształcenie daty przed wysłaniem jej do Solr. Jeśli korzystasz z DataImportHandler, będzie to możliwe w tym kontekście/procesie.

+0

Dziękuję za odpowiedź. Ramy, których używam (ManifoldCF) używa DirectUpdateHandler2 i DataImportHandler nie jest w ogóle używany. Czy istnieje możliwość przekształcenia daty przed wywołaniem DirectUpdateHandler2? Mówiąc oczywiście o Solr. –

+0

Biorąc pod uwagę, że używasz DirectUpdateHandler2, z tego, co mogę stwierdzić, nie ma sposobu, aby w Solr dodać transformację danych do tego procesu, nie tworząc niestandardowej wersji DirectUpdateHandler. Nie jestem zaznajomiony z ManfioldCF, więc nie mogę zaoferować, jeśli pojawią się jakieś opcje. –

+1

O ile mogę powiedzieć, nie ma żadnych ofert w ManifoldCF w odniesieniu do tego (ponieważ jest to specyficzne dla Connector). Jednak przyjmuję twoją odpowiedź, ponieważ nie wyjaśniłem wystarczająco dużo w moim pytaniu. Jeszcze raz dziękuję za zaangażowanie. –