c# - SolrNet:尝试添加和提交时出现 SolrConnectionException (400) 错误请求

标签 c# .net solr tomcat7 solrnet

我已经到了 SolrNet 执行“添加”方法的地步,但是当我尝试“提交”时,我收到了错误。以下是我的 schema.xml、模型、调用它的代码以及我得到的错误。更奇怪的是,尽管有错误,模型还是在我重新启动 Tomcat 后添加到我的 Solr 索引中(因此它仍然添加我的模型,尽管有错误但不是立即):

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

代码初始化,调用 Add 和 Commit *注意 - 这是一个单元测试,所以 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: 

编辑 感谢 Paige 的回答:问题是“waitFlush”错误,这是旧版本 SolrNet 的错误。我使用的 SolrNet 版本来自 VS NuGet,它是 0.3.1(我认为这是他们最新的稳定版本)。他们的谷歌代码站点没有最新版本,但构建服务器(此处:“工件”下的 http://teamcity.codebetter.com/project.html?projectId=project36&guest=1)确实有最新版本并修复了此错误。问题为我解决了。

最佳答案

我猜您可能在 Tomcat 日志中看到了 waitFlush 错误,并且您使用的是 Solr 4.X 版。如果是这种情况,这是 Solr 4.x 和旧版本的 SolrNet 的已知问题。要解决此问题,请升级到更高版本的 SolrNet 库。您可以从Build Server下载。 .单击 Artifacts 获取 zip 链接。

关于c# - SolrNet:尝试添加和提交时出现 SolrConnectionException (400) 错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17682501/

相关文章:

具有日志文件管理(滚动)的.Net WCF服务跟踪日志

c# - 在系统命名空间中编写自己的扩展方法是否可以?

SOLR 从站正在执行完整复制,因为它无法删除未使用的索引目录

c# - WPF - 来自用户控件内部的事件

c# - 如何将 char 和 char* 从 C# 传递到 C++/CLI?

c# - 为什么 "View Heap"结果与 Visual Studio 中的 'Process Memory Usage' 不匹配

c# - 如何从 aspx 文件调用方法?

c# - 为什么我可以将无效值解析为 .NET 中的枚举?

solr - 如何关闭 Solr 中的多值?

multithreading - 在Solr Cloud上加载文档所需的最佳Actor实例(线程)数