web-dev-qa-db-ja.com

Solr「無効な日付文字列」例外

Solrは初めてです。一部のデータのインデックス作成に成功しましたが、適切なsolrフィールドに日付属性を渡した後、例外が発生します。

文字列「15.06.2011 13:51:41」を渡します。これはドイツなどの国で一般的な日付形式です。しかし、私が見つけたいくつかのグーグルの後、Solrは日付がUTC形式であることを期待しています。

私の具体的な質問は、Solrのある時点でフォーマットをUTCに変換できますか?これはDateFormatTransformerの場合でしょうか、それとも最初に正しい形式で渡す必要がありますか?

編集:DataImportHandlerを使用していません。データを直接Solrに渡してDirectUpdateHandler2を使用しています。これは「直接更新」と呼ばれているため、そこで何かを変換する可能性はかなり低いですか?

記録のために、私が得た例外は:

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

Solr DateFieldのドキュメント によると、この形式は必須です。

日付フィールドは1995-12-31T23:59:59Zの形式にする必要があります。末尾の「Z」はUTC時間を示し、必須です(以下を参照) UTCの説明)。末尾の0で終わらない限り、オプションの小数秒を使用できます(ただし、ミリ秒を超える精度は無視されます)。他のすべてのパーツは必須です。

唯一のオプションは、Solrに送信する前に日付を変換することです。 DataImportHandlerを使用している場合は、そのコンテキスト/プロセス内で可能です。

22
Paige Cook