2013-09-16 7 views
15

Ich bin neu bei Solr. Ich habe einige Daten erfolgreich indiziert, aber nachdem ich ein Datumsattribut an ein entsprechendes Solr-Feld übergeben habe, erhalte ich eine Ausnahme:Solr 'Invalid Date String' Ausnahme

Ich gebe die Zeichenfolge "15.06.2011 13:51:41" weiter, die ein gemeinsames Datum ist Format für Länder wie Deutschland. Nach etwas Googeln fand ich jedoch heraus, dass Solr ein Datum im UTC-Format erwartet.

Meine spezifische Frage ist: Kann ich mein Format irgendwann bei Solr in UTC umwandeln? Wäre das ein Fall für den DateFormatTransformer oder ist es ein MUSS, ihn im richtigen Format zu übergeben?

BEARBEITEN: Ich verwende keinen DataImportHandler. Ich benutze den DirectUpdateHandler2, indem ich die Daten direkt an Solr übergebe. Da es "direktes Update" genannt wird, sind meine Chancen ziemlich schlecht darin, irgendetwas dort zu transformieren?

Für die Aufzeichnungen, die Ausnahme, die ich bekam, war:

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) 

Antwort

17

Nach dem Solr DateField documentation wird dieses Format erforderlich:

Datumsfeld des Formulars sein soll 1995-12-31T23 : 59: 59Z Das abschließende "Z" bezeichnet die UTC-Zeit und ist obligatorisch (Siehe unten für eine Erklärung von UTC). Optionale Bruchteile von Sekunden sind zulässig, solange sie nicht in einer abschließenden 0 enden (aber jede Genauigkeit über Millisekunden hinaus wird ignoriert). Alle anderen Teile sind obligatorisch.

Die einzige Möglichkeit besteht darin, das Datum vor dem Senden in Solr umzuwandeln. Wenn Sie DataImportHandler verwenden, wäre dies in diesem Kontext/Prozess möglich.

+0

Danke für Ihre Antwort. Das Framework, das ich verwende (ManifoldCF) verwendet den DirectUpdateHandler2 und der DataImportHandler wird überhaupt nicht verwandt. Gibt es eine Möglichkeit, eine Datumstransformation vor dem DirectUpdateHandler2-Aufruf zu erreichen? Apropos Solr natürlich. –

+0

Angesichts der Tatsache, dass Sie den DirectUpdateHandler2 verwenden, gibt es innerhalb von Solr keine Möglichkeit, eine Datenumwandlung zu diesem Prozess hinzuzufügen, ohne eine angepasste Version von DirectUpdateHandler zu erstellen. Ich bin nicht vertraut mit ManfioldCF, also kann ich nicht anbieten, wenn es dort Optionen gäbe. –

+1

Soweit ich das beurteilen kann, gibt es in ManifoldCF diesbezüglich keine Angebote (da dies Connector-spezifisch ist). Allerdings werde ich Ihre Antwort akzeptieren, da ich in meiner Frage nicht genug geklärt habe. Nochmals vielen Dank für Ihr Engagement. –