SolrNet:SolrConnectionException试图加入,承诺当(400)错误的请求 [英] SolrNet: SolrConnectionException (400) bad request when attempting to Add and Commit

查看:1257
本文介绍了SolrNet:SolrConnectionException试图加入,承诺当(400)错误的请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到的地方SolrNet执行添加的方法,但是当我尝试提交,是当我收到错误的位置。以下是我的schema.xml中,模型,code调用它,我得到的错误。更奇怪的是,尽管错误,该模型将被添加到我的Solr索引后,我重新启动Tomcat(所以它仍然立即增加了我的模型,尽管错误,但没有):

I have gotten to the point where SolrNet executes the "Add" method but when I try to "Commit" is when I receive the error. The following is my schema.xml, model, code calling it, and the error I get. Even stranger is that despite the error, the model is added to my Solr index AFTER I restart Tomcat (so it still adds my model despite the error but not immediately):

schema.xml中(域和域类型):

schema.xml (fields and fieldtypes):

<!-- Fields -->   
<field name="part_numbers" type="my_string_exact" indexed="true" stored="true" multiValued="true" />
<field name="page_url" type="my_string_exact" indexed="true" stored="true" />
<field name="product_name" type="my_string" indexed="true" stored="true" />
<!-- FieldTypes -->
<fieldType name="my_string_exact" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
<fieldType name="my_string" class="solr.TextField" sortMissingLast="true" omitNorms="true">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
</fieldType>
<fieldType name="my_int" class="solr.IntField" omitNorms="true" />

模式(Product.cs)*注 - 使用的PageId的Solr的默认的ID这是一个字符串,独特的和要求的:

Model (Product.cs) *NOTE - PageId uses the Solr default "id" that is a string, unique and required:

public class Product
{
    [SolrUniqueKey("id")]
    public string PageId { get; set; }

    [SolrField("part_numbers")]
    public ICollection<string> PartNumbers { get; set; }

    [SolrField("page_url")]
    public string PageUrl { get; set; }

    [SolrField("product_name")]
    public string Name { get; set; }
}

code初始化,调用添加并提交*注意 - 这是一个单元测试,因此,init只调用一次:

Code initializing, calling the Add and Commit *NOTE - This is a unit test so init is only called once:

Startup.Init<Product>("http://localhost:8080/solr");
Product testProd = new Product() { 
            EPiPageId = "44", 
            Name = "TestProd3", 
            PageUrl = "/TestProd3", 
            PartNumbers = new List<string>() { "000022222", "000000333333" } 
        };
var solr = ServiceLocator.Current.GetInstance<ISolrOperations<Product>>();
solr.Add(testProd);
solr.Commit(); // Bad Request Error occurs here.

错误信息:

SolrNet.Exceptions.SolrConnectionException was unhandled by user code
  HResult=-2146232832
  Message=The remote server returned an error: (400) Bad Request.
  Source=SolrNet
  StackTrace:
       at SolrNet.Impl.SolrConnection.Post(String relativeUrl, String s) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 104
       at SolrNet.Commands.CommitCommand.Execute(ISolrConnection connection) in c:\prg\SolrNet\svn\SolrNet\Commands\CommitCommand.cs:line 71
       at SolrNet.Impl.SolrBasicServer`1.Send(ISolrCommand cmd) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:line 87
       at SolrNet.Impl.SolrBasicServer`1.SendAndParseHeader(ISolrCommand cmd) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:line 91
       at SolrNet.Impl.SolrBasicServer`1.Commit(CommitOptions options) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:line 54
       at SolrNet.Impl.SolrServer`1.Commit() in c:\prg\SolrNet\svn\SolrNet\Impl\SolrServer.cs:line  24
  InnerException: System.Net.WebException
       HResult=-2146233079
       Message=The remote server returned an error: (400) Bad Request.
       Source=System
       StackTrace:
            at System.Net.HttpWebRequest.GetResponse()
            at HttpWebAdapters.Adapters.HttpWebRequestAdapter.GetResponse() in c:\prg\SolrNet\svn\HttpWebAdapters\Impl\HttpWebRequestAdapter.cs:line 36
            at SolrNet.Impl.SolrConnection.GetResponse(IHttpWebRequest request) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 160
            at SolrNet.Impl.SolrConnection.Post(String relativeUrl, String s) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 101
       InnerException: 

修改感谢佩奇的回答:这个问题是一个waitFlush错误是与旧版本SolrNet的错误。 SolrNet的版本,我是用来自VS的NuGet这是0.3.1(我认为是他们最新的稳定版本)。他们的谷歌code站点没有他们最近的版本,但在构建服务器(此处的 HTTP://teamcity.$c$cbetter.com/project.html projectId = project36和放大器;下客= 1 ?神器),并拥有最新的修正这个错误。问题解决了我。

EDIT Thanks to Paige for the answer: The issue was a "waitFlush" error that is a bug with older versions of SolrNet. The version of SolrNet that I was using was from VS NuGet that was 0.3.1 (which I assumed was their latest stable build). Their google code site does not have their most recent build but the build server (here: http://teamcity.codebetter.com/project.html?projectId=project36&guest=1 under "artifacts") did have the latest with the fix to this bug. Problem solved for me.

推荐答案

我猜测你可能看到在Tomcat日志一个 waitFlush 错误,您正在使用的版本4.X的Solr。如果是这样的话,这是一个已知问题的Solr 4.x和旧版本SolrNet的。要解决此问题,升级到SolrNet库的更新版本。您可以从构建服务器。点击文物得到一个链接到拉链。

I am guessing that you are probably seeing a waitFlush error in your Tomcat Logs and you are using version 4.X of Solr. If that is the case, this is a known issue with Solr 4.x and older versions of SolrNet. To fix this issue, upgrade to a later release of the SolrNet library. You can download it from the Build Server. Click on Artifacts to get a link to the zip.

这篇关于SolrNet:SolrConnectionException试图加入,承诺当(400)错误的请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆