简体   繁体   English

Solr - 将“添加”发布到服务器时出错

[英]Solr - Error when posting an “Add” to the server

I'm Posting the following to the Solr Server:我将以下内容发布到 Solr 服务器:

<add>
    <doc>
        <field name="uniqueid">5453543</field>
        <field name="modifieddate">2008-12-03T15:49:00Z</field>
        <field name="title">My Record</field>
        <field name="description">Descirption 
        Details
</field>
        <field name="startdate">2009-01-21T15:26:05.680Z</field>
        <field name="enddate">2009-01-21T15:26:05.697Z</field>
        <field name="Telephone_number">11111 111 111(text phone)</field>
        <field name="Telephone_number">11111 111 111</field>
        <field name="Mobile_number">1111111111</field>
    </doc>
</add>

I'm using SolrNet to send the documents here's an extract from the code (s is the above xml):我正在使用SolrNet发送文档,这里是代码的摘录(s 是上面的 xml):

public string Post(string relativeUrl, string s) 
{
    var u = new UriBuilder(serverURL);
    u.Path += relativeUrl;
    var request = httpWebRequestFactory.Create(u.Uri);
    request.Method = HttpWebRequestMethod.POST;
    request.KeepAlive = false;
    if (Timeout > 0)
        request.Timeout = Timeout;
    request.ContentType = "text/xml; charset=utf-8";
    request.ContentLength = s.Length;
    request.ProtocolVersion = HttpVersion.Version10;
    try 
    {
        using (var postParams = request.GetRequestStream()) 
        {
            postParams.Write(xmlEncoding.GetBytes(s), 0, s.Length);
            using (var response = request.GetResponse()) 
            {
                using (var rStream = response.GetResponseStream()) 
                {
                    string r = xmlEncoding.GetString(ReadFully(rStream));
                    //Console.WriteLine(r);
                    return r;
                }
            }
        }
    } 
    catch (WebException e) 
    {
        throw new SolrConnectionException(e);
    }
}

When it gets to request.GetResponse it failed with this error:当它到达 request.GetResponse 时,它​​因以下错误而失败:

base {System.InvalidOperationException} = {"The remote server returned an error: (500) Internal Server Error."} base {System.InvalidOperationException} = {"远程服务器返回错误:(500) 内部服务器错误。"}

When i look on the server in the Logs for apache it gives the following reason:当我在 apache 的日志中查看服务器时,它给出了以下原因:

Unexpected end of input block in end输入块意外结束

Here's the full stack trace:这是完整的堆栈跟踪:

Sep 17, 2009 10:13:53 AM org.apache.solr.common.SolrException log SEVERE: com.ctc.wstx.exc.WstxEOFException: Unexpected end of input block in end tag at [row,col {unknown-source}]: [26,1266] at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOB(StreamScanner.java:700) at com.ctc.wstx.sr.StreamScanner.loadMoreFromCurrent(StreamScanner.java:1054) at com.ctc.wstx.sr.StreamScanner.getNextCharFromCurrent(StreamScanner.java:811) at com.ctc.wstx.sr.BasicStreamReader.readEndElem(BasicStreamReader.java:3211) at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2832) at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1019) at org.apache.solr.handler.XmlUpdateRequestHandler.processUpdate(XmlUpdateRequestHandler.java:148) at org.apache.solr.handler.XmlUpdateRequestHandler.handleRequestBody(XmlUpdateRequestHandler.java:123) at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131) at org.apache.solr.core.SolrCore.execute(SolrCore.java:1 2009 年 9 月 17 日上午 10:13:53 org.apache.solr.common.SolrException 日志严重:com.ctc.wstx.exc.WstxEOFException:[row,col {unknown-source} 处的结束标记中的输入块意外结束]:[26,1266] 在 com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOB(StreamScanner.java:700) 在 com.ctc.wstx.sr.StreamScanner.loadMoreFromCurrent(StreamScanner.java:1054) 在 com.ctc。 wstx.sr.StreamScanner.getNextCharFromCurrent(StreamScanner.java:811) at com.ctc.wstx.sr.BasicStreamReader.readEndElem(BasicStreamReader.java:3211) at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java: 2832) 在 com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1019) 在 org.apache.solr.handler.XmlUpdateRequestHandler.processUpdate(XmlUpdateRequestHandler.java:148) 在 org.apache.solr.handler.XmlUpdateRequestHandler .handleRequestBody(XmlUpdateRequestHandler.java:123) 在 org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131) 在 org.apache.solr.core.SolrCore.execute(SolrCore.java:1) 204) at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:303) at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:232) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859) at org.apache.coyote.http11.Http11AprProtocol$Http 204) 在 org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:303) 在 org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:232) 在 org.apache.catalina.core.ApplicationFilterChain .internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org. apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 在 org.apache.catalina.valves.ErrorReportValve.ReValve( java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 在 org.apache.coyote.http11 .Http11AprProcessor.process(Http11AprProcessor.java:859) 在 org.apache.coyote.http11.Http11AprProtocol$Http 11ConnectionHandler.process(Http11AprProtocol.java:574) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527) at java.lang.Thread.run(Thread.java:619) 11ConnectionHandler.process(Http11AprProtocol.java:574) 在 org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527) 在 java.lang.Thread.run(Thread.java:619)

Please note the Solr server is running on the following system:请注意 Solr 服务器在以下系统上运行:

Microsoft Windows Server 2003 R2 Apache Tomcat 6 Microsoft Windows Server 2003 R2 Apache Tomcat 6

Finally here's my question:最后这是我的问题:

The Xml i'm sending looks ok to me.. Does anyone have an ideas as to why Solr is throwing this exception?我发送的 Xml 对我来说看起来没问题.. 有没有人知道 Solr 为什么抛出这个异常?

Thanks谢谢

Dave戴夫

Edit Answer is as follows:编辑答案如下:

public string Post(string relativeUrl, string s) 
{
    var u = new UriBuilder(serverURL);
    u.Path += relativeUrl;
    var request = httpWebRequestFactory.Create(u.Uri);
    request.Method = HttpWebRequestMethod.POST;
    request.KeepAlive = false;
    if (Timeout > 0)
        request.Timeout = Timeout;
    request.ContentType = "text/xml; charset=utf-8";
    request.ProtocolVersion = HttpVersion.Version10;
    try 
    {
        // Set the Content length after the size of the byte array has been calculated.
        byte[] data = xmlEncoding.GetBytes(s);
        request.ContentLength = s.Length;
        using (var postParams = request.GetRequestStream()) 
        {
            postParams.Write(data, 0, data.Length);
            using (var response = request.GetResponse()) 
            {
                using (var rStream = response.GetResponseStream()) 
                {
                    string r = xmlEncoding.GetString(ReadFully(rStream));
                    //Console.WriteLine(r);
                    return r;
                }
            }
        }
    } 
    catch (WebException e) 
    {
        throw new SolrConnectionException(e);
    }
}

I'm not much familiar with .Net or Solr or .Net port of Solr.我对 Solr 的 .Net 或 Solr 或 .Net 端口不太熟悉。 But, here is my guess.但是,这是我的猜测。

postParams.Write(xmlEncoding.GetBytes(s), 0, s.Length);

There are two possible errors.有两种可能的错误。

  1. When you are getting bytes from String, you should specify the encoding.当您从 String 获取字节时,您应该指定编码。 It might be the case that the default encoding is different from UTF8, which you have set in content type header in response.可能是默认编码与 UTF8 不同,您在响应的内容类型标头中设置了 UTF8。
  2. The third parameter in Write() probabably refers to the length of byte array which you got from GetBytes(). Write() 中的第三个参数可能是指您从 GetBytes() 获得的字节数组的长度。 The byte array could be longer than the length of string.字节数组可能长于字符串的长度。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM