2013-07-16 62 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錯誤的版本尚未發佈。 –