2012-09-04 7 views
2

수백만 문서의 색인을 생성하고 있습니다. 우리는 Solr 3.1과 Jetty를 사용합니다. 나는 여기에 설명 된대로 부두에서 로깅을 활성화 : http://wiki.apache.org/solr/LoggingInDefaultJettySetup색인 생성 중 SOLR RuntimeException : 문서 ID를 기록하는 방법?

을 우리가 예외를 얻을 일부 fulltexts를 들어, 따라서 이와 같은 기록합니다

<record> 
    <date>2012-09-04T15:55:16</date> 
    <millis>1346766916578</millis> 
    <sequence>0</sequence> 
    <logger>org.apache.solr.core.SolrCore</logger> 
    <level>SEVERE</level> 
    <class>org.apache.solr.common.SolrException</class> 
    <method>log</method> 
    <thread>10</thread> 
    <message>java.lang.RuntimeException: [was class java.io.CharConversionException] Invalid UTF-8 character 0xd835(a surrogate character) at c 
har #1144, byte #127) 
     at com.ctc.wstx.util.ExceptionUtil.throwRuntimeException(ExceptionUtil.java:18) 
     at com.ctc.wstx.sr.StreamScanner.throwLazyError(StreamScanner.java:731) 
     at com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3657) 
     at com.ctc.wstx.sr.BasicStreamReader.getText(BasicStreamReader.java:809) 
     at org.apache.solr.handler.XMLLoader.readDoc(XMLLoader.java:287) 
     at org.apache.solr.handler.XMLLoader.processUpdate(XMLLoader.java:146) 
     at org.apache.solr.handler.XMLLoader.load(XMLLoader.java:77) 
     at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:55) 
     at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129) 
     at org.apache.solr.core.SolrCore.execute(SolrCore.java:1360) 
     at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:356) 
     at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:252) 
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) 
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399) 
     at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) 
     at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450) 
     at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) 
     at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) 
     at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
     at org.mortbay.jetty.Server.handle(Server.java:326) 

</message> 
</record> 

것은 또한 전송 된 문서 ID를 기록하는 좋은 것입니다. 우리는 어떻게이 일을 할 수 있습니까?

감사합니다.

답변

0

부두에서 ID를 기록하는 방법을 묻는 질문이 있으십니까? ID 값을 얻기 위해 요청의 XML을 구문 분석 할 수 없으므로 Jetty를 통해 로그 할 수는 없습니다. http://svn.apache.org/viewvc/lucene/dev/tags/lucene_solr_3_1/solr/src/java/org/apache/solr/handler/XMLLoader.java?revision=1086927&view=markup

관련 섹션 :

SolrInputDocument readDoc(XMLStreamReader parser) throws XMLStreamException { 
264  SolrInputDocument doc = new SolrInputDocument(); 
265  
266  String attrName = ""; 
267  for (int i = 0; i < parser.getAttributeCount(); i++) { 
268  attrName = parser.getAttributeLocalName(i); 
269  if ("boost".equals(attrName)) { 
270  doc.setDocumentBoost(Float.parseFloat(parser.getAttributeValue(i))); 
271  } else { 
272  XmlUpdateRequestHandler.log.warn("Unknown attribute doc/@" + attrName); 
273  } 
274  } 
275  
276  StringBuilder text = new StringBuilder(); 
277  String name = null; 
278  float boost = 1.0f; 
279  boolean isNull = false; 
280  while (true) { 
281  int event = parser.next(); 
282  switch (event) { 
283  // Add everything to the text 
284  case XMLStreamConstants.SPACE: 
285  case XMLStreamConstants.CDATA: 
286  case XMLStreamConstants.CHARACTERS: 
287  text.append(parser.getText()); 

SOLR 스택 추적이 XMLLoader.readDoc() 메소드는 결코 여기에 과거의 라인 287을 얻을 수 없다 (버전에) 그 클래스에 대한 코드 있다고 알려 주목 문서가 아직 작성되지 않았으므로 기록 ID 필드에 접근 할 실제 방법이 없습니다.

해결 방법은 상태가 0 (성공)이 아닌 경우 인덱서 스크립트가 Solr 응답의 상태 코드를 확인하고 로그에 기록 ID를 기록하도록하는 것입니다. 마찬가지로 Java 나 PHP 또는 예외를 잡을 수있는 언어를 사용하는 경우에도 예외를 잡아 로그에 기록 할 수 있습니다.

희망, 도움이되고 행운을 빕니다.

+0

대단히 감사합니다. 내 인덱서 스크립트를 수정합니다. – patrickg

+0

당신을 진심으로 환영합니다. 또한 수백만 개의 문서를 색인 생성하는 중입니다. 확실히 사소한 일이 아닙니다. 행운을 빌어 요. – David

관련 문제