2013-09-16 52 views
15

Tôi mới dùng Solr. Tôi đã lập chỉ mục thành công một số dữ liệu, nhưng sau khi chuyển thuộc tính ngày cho trường solr thích hợp, tôi nhận được ngoại lệ:Solr 'Invalid Date String' Ngoại lệ

Tôi đang chuyển chuỗi "15.06.2011 13:51:41", là ngày phổ biến định dạng cho các quốc gia như Đức. Tuy nhiên, sau khi một số googling tôi phát hiện ra, rằng Solr hy vọng một ngày được ở định dạng UTC.

Câu hỏi cụ thể của tôi là: Tôi có thể chuyển định dạng của mình sang UTC tại một số điểm tại Solr không? Đây có phải là một trường hợp cho DateFormatTransformer hoặc là nó PHẢI để vượt qua nó trong định dạng chính xác ban đầu?

EDIT: Tôi không sử dụng DataImportHandler. Tôi đang sử dụng DirectUpdateHandler2 bằng cách chuyển dữ liệu trực tiếp đến Solr. Kể từ khi nó được gọi là 'cập nhật trực tiếp', là cơ hội của tôi khá xấu trong việc chuyển đổi bất cứ điều gì đó?

Đối với các hồ sơ, ngoại trừ tôi nhận được:

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) 

Trả lời

17

Theo Solr DateField documentation, định dạng này là cần thiết:

trường ngày sẽ có dạng 1995-12-31T23 : 59: 59Z Dấu "Z" chỉ định thời gian UTC và bắt buộc là (Xem bên dưới để biết giải thích về UTC). Tùy chọn phân số giây được cho phép, miễn là chúng không kết thúc bằng dấu 0 (nhưng bất kỳ độ chính xác nào vượt quá mili giây sẽ bị bỏ qua). Tất cả các phần khác là bắt buộc.

Tùy chọn duy nhất là chuyển đổi ngày trước khi gửi vào Solr. Nếu bạn đang sử dụng DataImportHandler, nó sẽ có thể trong ngữ cảnh/quy trình đó.

+0

Cảm ơn phản hồi của bạn. Khung tôi đang sử dụng (ManifoldCF) sử dụng DirectUpdateHandler2 và DataImportHandler không được sử dụng. Có khả năng nào để đạt được chuyển đổi ngày trước cuộc gọi DirectUpdateHandler2 không? Nói về Solr tất nhiên. –

+0

Cho rằng bạn đang sử dụng DirectUpdateHandler2, từ những gì tôi có thể xác định, không có cách nào trong Solr thêm một chuyển đổi dữ liệu cho quá trình này ngắn tạo ra một phiên bản tùy chỉnh của DirectUpdateHandler. Tôi không quen thuộc với ManfioldCF, vì vậy tôi không thể cung cấp nếu có bất kỳ tùy chọn trong đó. –

+1

Theo như tôi có thể nói, không có bất kỳ lời mời nào trong ManifoldCF liên quan đến điều này (vì đây là Trình kết nối cụ thể). Tuy nhiên, tôi sẽ chấp nhận câu trả lời của bạn, vì tôi không làm rõ đủ trong câu hỏi của mình. Cảm ơn một lần nữa vì sự cam kết của bạn. –