2013-07-16 63 views
3

我已经到了SolrNet执行“添加”方法的地步,但是当我尝试“提交”的时候我收到错误。以下是我的schema.xml,模型,调用它的代码和我得到的错误。更奇怪的是,尽管误差,该模型被添加到我的Solr的索引之后我重新启动Tomcat(所以它仍然增加了我的模型,尽管错误,但不会立即):SolrNet:SolrConnectionException(400)尝试添加和提交时的错误请求

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

<!-- 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” 这是一个字符串,独特的要求:

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; } 
} 

代码初始化,调用添加并提交*注 - 这是一个单元测试,所以init只被调用一次:

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(我认为它是他们最新的稳定版本)。他们的谷歌代码网站没有他们最近的版本,但构建服务器(这里:http://teamcity.codebetter.com/project.html?projectId=project36&guest=1下的“工件”)确实有最新的修复这个bug。问题解决了我。

+0

https://github.com/mausch/SolrNet/blob/master/Documentation/FAQ.md#im-getting-a-bad-request-error-when-calling-commit –

回答

4

我在猜测您的Tomcat日志中可能会出现waitFlush错误,并且您使用的是Solr 4.X版。如果是这样的话,这是Solr 4.x和旧版本SolrNet的已知问题。要解决此问题,请升级到更高版本的SolrNet库。您可以从Build Server下载它。点击Artifacts以获得链接。

+0

我检查了我的版本从NuGet获得(我从VS的NuGet包中获得了SolrNet),它的版本为0.3.1。我从他们的谷歌代码(https://code.google.com/p/solrnet/)看到他们有0.4.0,但看起来它仍处于测试阶段。这个问题是否存在0.3.1和0.4.0?我会尝试0.4.0。 – Channafow

+0

好了,现在可以使用。构建服务器有正确的版本(不像NuGet或他们的谷歌代码,它们都没有最新的外观)。谢谢Paige。 – Channafow

+0

是的,不幸的是修复Solr 4.X waitFlush错误的版本尚未发布。 –