Java 索引期间SOLR RuntimeException:如何将文档id写入日志?
我们正在为数以百万计的文档编制索引。我们使用Solr 3.1和Jetty。我启用了如下所述的Jetty登录: 对于某些全文,我们会遇到例外情况,因此会出现如下日志:Java 索引期间SOLR RuntimeException:如何将文档id写入日志?,java,solr,jetty,Java,Solr,Jetty,我们正在为数以百万计的文档编制索引。我们使用Solr 3.1和Jetty。我启用了如下所述的Jetty登录: 对于某些全文,我们会遇到例外情况,因此会出现如下日志: <record> <date>2012-09-04T15:55:16</date> <millis>1346766916578</millis> <sequence>0</sequence> <logger>org.apa
<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>
2012-09-04T15:55:16
1346766916578
0
org.apache.solr.core.SolrCore
严峻的
org.apache.solr.common.SolrException
日志
10
java.lang.RuntimeException:[was类java.io.CharConversionException]在c处的UTF-8字符0xd835(代理字符)无效
har#1144,字节#127)
位于com.ctc.wstx.util.ExceptionUtil.throwRuntimeException(ExceptionUtil.java:18)
位于com.ctc.wstx.sr.StreamScanner.throwLazyError(StreamScanner.java:731)
位于com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3657)
位于com.ctc.wstx.sr.BasicStreamReader.getText(BasicStreamReader.java:809)
位于org.apache.solr.handler.xmloader.readDoc(xmloader.java:287)
位于org.apache.solr.handler.xmloader.processUpdate(xmloader.java:146)
位于org.apache.solr.handler.xmloader.load(xmloader.java:77)
位于org.apache.solr.handler.ContentStreamHandlerBase.HandlerRequestBody(ContentStreamHandlerBase.java:55)
位于org.apache.solr.handler.RequestHandlerBase.HandlerRequest(RequestHandlerBase.java:129)
位于org.apache.solr.core.SolrCore.execute(SolrCore.java:1360)
位于org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:356)
位于org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:252)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
位于org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
位于org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
位于org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
位于org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
位于org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
位于org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
位于org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
位于org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
位于org.mortbay.jetty.Server.handle(Server.java:326)
同时记录发送的文档id将非常好。我们如何才能做到这一点
谢谢大家! 您是在问如何让Jetty记录ID?您不太可能通过Jetty将其记录下来,因为无法解析请求中的XML以获取ID值。请注意,堆栈跟踪通知xmloader.readDoc()方法永远不会超过第287行。以下是该类的代码(适用于您的版本): 有关章节:
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());
SolrInputDocument readDoc(XMLStreamReader解析器)抛出XMLStreamException{
264 SolrInputDocument doc=新的SolrInputDocument();
265
266字符串attrName=“”;
267 for(int i=0;i
Solr文档尚未构建,因此没有真正的方法来访问records ID字段
解决方法是让您的索引器脚本检查Solr响应的状态代码,如果状态不是0(成功),则将记录ID写入日志。同样,如果您使用的是Java或PHP或可以捕获异常的语言,您也可以捕获这些异常并将其写入日志
希望这有帮助,祝你好运。你是在问如何让Jetty记录ID吗?你不太可能通过Jetty记录它,因为无法解析请求中的XML以获取ID值。请注意,堆栈跟踪通知XMLLoader.readDoc()方法永远不会超过第287行。下面是该类的代码(适用于您的版本): 有关章节:
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());
SolrInputDocument readDoc(XMLStreamReader解析器)抛出XMLStreamException{
264 SolrInputDocument doc=新的SolrInputDocument();
265
266字符串attrName=“”;
267 for(int i=0;i
Solr文档尚未构建,因此没有真正的方法来访问records ID字段
解决方法是让您的索引器脚本检查Solr响应的状态代码,如果状态不是0(成功),则将记录ID写入日志。同样,如果您使用的是Java或PHP或可以捕获异常的语言,则可以捕获这些异常